Khi tôi kiểm tra hiệu suất của thẻ SD để ghi ngẫu nhiên, tôi có thể thấy hiệu suất khá tệ đối với kích thước bản ghi 4 kB (điều này không đáng ngạc nhiên) nhưng sau đó đối với một số thẻ, nó thậm chí còn giảm cho kích thước bản ghi lớn hơn trước khi tăng. Tôi đã đo hiệu suất ghi ngẫu nhiên với iozone v3.430 và đã thử nghiệm một số thẻ flash của các nhà sản xuất khác nhau. Đây là lệnh iozone, tôi đã sử dụng để đo với kích thước tệp 50 MB:
iozone -RaeI -i 0 -i 1 -i 2 -y 4k -q 1M -s 50m -o -f /tmp/testfile
Đây là kết quả với kích thước tệp 50 MB:
Câu hỏi: Lý do nào khiến hiệu suất ghi ngẫu nhiên với kích thước bản ghi 8, 16, 32, 64 và 128 kB chậm hơn như với kích thước bản ghi 4 kB?
Peter Brittain đề nghị thử nghiệm với kích thước tệp lớn hơn, vì vậy tôi cũng đã thử nó với kích thước tệp 500 MB. Đây là kết quả:
Hiệu suất tổng thể trở nên tồi tệ hơn nhưng hiện tượng vẫn xảy ra.
Các phân vùng được căn chỉnh theo ranh giới 4 MB. Hệ thống tệp là ext4 với kích thước khối 4 kB. Phân vùng được sử dụng cho các thử nghiệm bắt đầu là mmcblk0p2.
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
loop0 7:0 0 953.7M 0 loop /mnt/sdb1
mmcblk0 179:0 0 14.9G 0 disk
├─mmcblk0p1 179:1 0 56M 0 part /boot
├─mmcblk0p2 179:2 0 7.8G 0 part /
└─mmcblk0p3 179:3 0 7G 0 part /mnt/mmcblk0p3
$ cat /etc/fstab | grep mmcblk0p2
/dev/mmcblk0p2 / ext4 defaults,noatime 0 1
$ sudo fdisk -l /dev/mmcblk0
Disk /dev/mmcblk0: 15.9 GB, 15931539456 bytes
4 heads, 16 sectors/track, 486192 cylinders, total 31116288 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000981cb
Device Boot Start End Blocks Id System
/dev/mmcblk0p1 8192 122879 57344 c W95 FAT32 (LBA)
/dev/mmcblk0p2 122880 16506879 8192000 83 Linux
/dev/mmcblk0p3 16506880 31115263 7304192 83 Linux
$ mount | grep ext4 | grep root
/dev/root on / type ext4 (rw,noatime,data=ordered)
# tune2fs -l /dev/mmcblk0p2 | grep Block
Block count: 2048000
Block size: 4096
Blocks per group: 32768
Cập nhật 1: Rõ ràng là hiệu suất cho ghi ngẫu nhiên đặc biệt là đối với kích thước bản ghi nhỏ thấp hơn đáng kể so với ghi tuần tự. Các ô nhớ của bộ lưu trữ flash NAND được nhóm thành các trang và được gọi là các khối xóa. Kích thước trang thông thường là 4, 8 hoặc 16 kB. Mặc dù bộ điều khiển có thể ghi các trang đơn lẻ, dữ liệu không thể được ghi đè mà không bị xóa trước và khối xóa là đơn vị nhỏ nhất mà bộ lưu trữ flash NAND có thể xóa. Kích thước khối xóa thường nằm trong khoảng từ 128 kB đến 2 MB. Trong thẻ SD hiện đại, một số lượng nhỏ các khối xóa được kết hợp thành các đơn vị lớn hơn có kích thước bằng nhau được gọi là nhóm phân bổ hoặc đơn vị phân bổ hoặc phân khúc. Kích thước phân khúc thông thường là 4 MB.Mỗi thao tác ghi trên bộ lưu trữ dẫn đến hoạt động đọc-sửa-ghi cho toàn bộ phân đoạn. Ví dụ: trên thẻ SD có kích thước phân đoạn 4 MB, việc ghi 4 kB dữ liệu vào các vị trí ngẫu nhiên dẫn đến hệ số khuếch đại ghi là 1024. Bộ điều khiển của thẻ SD thực hiện lớp dịch. Đối với bất kỳ thao tác I / O nào, việc dịch từ địa chỉ ảo sang địa chỉ vật lý được thực hiện bởi bộ điều khiển. Nếu dữ liệu bên trong một phân đoạn sẽ bị ghi đè, lớp dịch sẽ ánh xạ lại địa chỉ ảo của phân đoạn đó sang một địa chỉ vật lý bị xóa khác. Phân khúc vật lý cũ được đánh dấu bẩn và xếp hàng để xóa. Sau đó, khi nó bị xóa, nó có thể được sử dụng lại. Bộ điều khiển của thẻ SD thường lưu trữ một hoặc nhiều phân đoạn để tăng hiệu suất của các hoạt động ghi ngẫu nhiên.Nếu thẻ SD lưu trữ hệ thống tệp gốc, sẽ có lợi nếu bộ điều khiển của thẻ có thể lưu trữ (các) phân đoạn nơi diễn ra hoạt động ghi, các phân đoạn lưu trữ siêu dữ liệu cho hệ thống tệp và (nếu có sẵn) tạp chí của hệ thống tập tin. Do đó, hiệu suất ghi ngẫu nhiên của thẻ SD phụ thuộc vào kích thước khối xóa, kích thước phân đoạn và số lượng phân đoạn, bộ điều khiển lưu trữ. Nhưng tất cả điều này không giải thích tại sao hiệu suất ghi ngẫu nhiên với kích thước bản ghi 8, 16, 32, 64 và 128 kB chậm hơn như với kích thước bản ghi 4 kB.
Cập nhật 2 (trả lời cho myaut): Ảnh chụp màn hình của bảng là công việc của riêng tôi. Hiện tại, tôi viết một bài báo / bài báo về các cụm máy tính bảng đơn vì chúng là một lựa chọn thú vị để cung cấp tài nguyên cho các dự án và nhà nghiên cứu của sinh viên. Trong bối cảnh này, tôi cũng đã nghiên cứu hiệu suất của CPU, lưu trữ và giao diện mạng của một nút. Tôi đã mua tất cả các thẻ SD đã thử nghiệm. Trên một trong những thẻ tôi đã cài đặt (sao chép qua dd) Raspian Wheezy (phiên bản 2014-06-20). Sau khi tôi định cấu hình cài đặt mạng và cài đặt một số gói bổ sung (ví dụ: iozone), tôi đã sao chép toàn bộ thẻ SD sang tất cả các thẻ SD khác.
Cập nhật 3 (câu trả lời cho Gabriel Southern): Kết quả là từ các lần chạy duy nhất. Thủ tục là:
- Chèn thẻ vào Raspberry Pi Model B
- Khởi động hệ thống
- Đăng nhập qua SSH
- Bắt đầu chạy thử iozone
- Dừng hệ thống và thử với một thẻ SD khác
Một số thẻ tôi đã thử nhiều lần để kiểm tra lại. Chỉ có một chút thay đổi. Hiện tượng xảy ra mọi lúc trừ hai thẻ Samsung và một thẻ Verbatim.
Cập nhật 4: Hiện tại tôi cố gắng tìm một liên hệ với một công ty sản xuất bộ điều khiển flash NAND (Samsung, SanDisk, Toshiba ...) để hỏi câu trả lời chắc chắn. SanDisk có một diễn đàn. Tôi hỏi ở đó để giải thích. Tôi cũng đã gửi một yêu cầu đến bộ phận hỗ trợ kỹ thuật của Kingston.
Cập nhật 5: Kích thước khối xóa và kích thước đơn vị phân bổ (phân khúc) không chịu trách nhiệm cho hiện tượng này. Tôi đã kiểm tra kích thước khối xóa của tất cả các thẻ SD bằng nắm đấm công cụ pritcsd.py trong đầu đọc thẻ bên trong của máy tính xách tay ThinkPad X240 và cuối cùng với Raspberry Pi Model B. Đối với tất cả các thẻ, đầu ra là : Erase block size of mmcblk0 is 65536 bytes
. Ngoài ra kích thước phân khúc là bằng nhau cho tất cả các thẻ SD được thử nghiệm. Nó là 4 MB. Thông tin này có thể được tìm thấy trong các tập tin /sys/class/mmc_host/mmc0/mmc0*/preferred_erase_size
. Theo tôi, điều khá bất thường là tất cả các thẻ này đều có cùng kích thước khối xóa và kích thước phân khúc. Trong thời gian chờ đợi, tôi đã thu thập ID sản phẩm / số vật phẩm từ các gói của thẻ đã kiểm tra. Họ đây rồi.
Cập nhật 6: Hỗ trợ kỹ thuật của Kingston đã viết cho tôi rằng bộ điều khiển của các thẻ Kingston đã được thử nghiệm (và rất có thể là các thẻ khác) được tối ưu hóa cho các tệp có kích thước 4 kB. Việc thực hiện bộ điều khiển chính xác là bí mật. Câu trả lời từ Kingston là câu trả lời hay nhất mà tôi có. SanDisk không bao giờ trả lời yêu cầu hỗ trợ của tôi và tôi không thể tìm thấy liên hệ từ Sony, Samsung hoặc Verbatim