Ketika saya memeriksa kinerja kartu SD untuk penulisan acak, saya dapat melihat kinerjanya cukup buruk untuk ukuran rekaman 4 kB (ini tidak mengejutkan) tetapi kemudian untuk beberapa kartu bahkan turun untuk ukuran rekaman yang lebih besar sebelum meningkat. Saya mengukur kinerja penulisan acak dengan iozone v3.430 dan menguji beberapa kartu flash dari berbagai produsen. Ini adalah perintah iozone, yang saya gunakan untuk mengukur dengan ukuran file 50 MB:
iozone -RaeI -i 0 -i 1 -i 2 -y 4k -q 1M -s 50m -o -f /tmp/testfile
Ini adalah hasil dengan ukuran file 50 MB:
Pertanyaan: Apa alasan bahwa kinerja penulisan acak dengan ukuran catatan 8, 16, 32, 64 dan 128 kB lebih lambat seperti halnya dengan ukuran catatan 4 kB?
Peter Brittain menyarankan untuk menguji dengan ukuran file yang lebih besar, jadi saya mencobanya juga dengan ukuran file 500 MB. Ini hasilnya:
Performa keseluruhan menjadi lebih buruk tetapi fenomena masih terjadi.
Partisi disejajarkan dengan batas 4 MB. Sistem file ext4 dengan ukuran blok 4 kB. Partisi yang digunakan untuk pengujian dimulai adalah 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
Pembaruan 1: Jelas bahwa kinerja untuk penulisan acak terutama untuk ukuran rekaman kecil secara signifikan lebih rendah dibandingkan dengan penulisan berurutan. Sel-sel memori penyimpanan flash NAND dikelompokkan ke halaman dan disebut hapus blok. Ukuran halaman tipikal adalah 4, 8 atau 16 kB. Meskipun mungkin bagi pengontrol untuk menulis satu halaman, data tidak dapat ditimpa tanpa dihapus terlebih dahulu dan blok hapus adalah unit terkecil yang dapat dihapus oleh penyimpanan NAND flash. Ukuran blok hapus biasanya antara 128 kB dan 2 MB. Dalam kartu SD modern, sejumlah kecil blok penghapus digabungkan menjadi unit yang lebih besar dengan ukuran yang sama yang disebut kelompok alokasi atau unit alokasi atau segmen. Ukuran segmen yang biasa adalah 4 MB.Setiap operasi penulisan pada penyimpanan menghasilkan operasi baca-modifikasi-tulis untuk seluruh segmen. Misalnya pada kartu SD dengan ukuran segmen 4 MB, menulis 4 kB data ke lokasi acak menghasilkan faktor amplifikasi tulis 1024. Pengontrol kartu SD menerapkan lapisan terjemahan. Untuk operasi I / O apa pun, terjemahan dari alamat fisik ke alamat fisik dilakukan oleh pengontrol. Jika data di dalam segmen akan ditimpa, lapisan terjemahan memetakan kembali alamat virtual segmen ke alamat fisik lain yang dihapus. Segmen fisik lama ditandai kotor dan antri untuk dihapus. Kemudian, ketika dihapus, itu bisa digunakan kembali. Pengontrol kartu SD biasanya men-cache satu segmen atau lebih untuk meningkatkan kinerja operasi penulisan acak.Jika kartu SD menyimpan sistem file root, akan bermanfaat jika pengontrol kartu dapat melakukan cache segmen di mana operasi penulisan berlangsung, segmen, yang menyimpan metadata untuk sistem file dan (jika tersedia) jurnal dari sistem file. Akibatnya, kinerja penulisan acak kartu SD tergantung pada ukuran blok hapus, ukuran segmen dan jumlah segmen, cache pengontrol. Tapi ini semua tidak menjelaskan mengapa kinerja penulisan acak dengan ukuran catatan 8, 16, 32, 64 dan 128 kB lebih lambat seperti dengan ukuran catatan 4 kB.
Pembaruan 2 (jawaban untuk myaut): Tangkapan layar tabel adalah karya saya sendiri. Saat ini, saya menulis artikel / makalah tentang kelompok komputer papan tunggal karena mereka merupakan pilihan yang menarik untuk menyediakan sumber daya bagi proyek dan peneliti siswa. Dalam konteks ini saya juga menyelidiki kinerja CPU, penyimpanan dan antarmuka jaringan dari satu node. Saya telah membeli semua kartu SD yang diuji. Pada salah satu kartu yang saya instal (disalin melalui dd) Raspian Wheezy (versi 2014-06-20). Setelah saya mengkonfigurasi pengaturan jaringan dan menginstal beberapa paket tambahan (misalnya iozone), saya menyalin seluruh kartu SD ke semua kartu SD lainnya.
Pembaruan 3 (jawaban untuk Gabriel Southern): Hasilnya hanya dari sekali jalan. Prosedurnya adalah:
- Masukkan kartu ke Raspberry Pi Model B
- Boot sistem
- Login melalui SSH
- Mulai uji coba iozone
- Hentikan sistem dan coba dengan kartu SD lain
Beberapa kartu saya coba beberapa kali untuk mengecek. Hanya ada sedikit variasi. Fenomena terjadi sepanjang waktu kecuali untuk dua kartu Samsung dan satu kartu Verbatim.
Pembaruan 4: Saat ini saya mencoba mencari kontak ke perusahaan yang memproduksi NAND flash clontrollers (Samsung, SanDisk, Toshiba ...) untuk menanyakan jawaban yang pasti. SanDisk memiliki forum. Saya meminta penjelasan di sana. Saya juga mengirim permintaan ke departemen dukungan teknis Kingston.
Pembaruan 5: Ukuran blok hapus dan ukuran unit alokasi (segmen) tidak bertanggung jawab atas fenomena tersebut. Saya menguji ukuran blok menghapus semua kartu SD dengan pritcsd.py tinju alat dalam card reader internal notebook ThinkPad X240 dan akhirnya dengan Model Raspberry Pi B. Untuk semua kartu output adalah: Erase block size of mmcblk0 is 65536 bytes
. Juga ukuran segmen sama untuk semua kartu SD yang diuji. Ini 4 MB. Informasi ini dapat ditemukan di file /sys/class/mmc_host/mmc0/mmc0*/preferred_erase_size
. Sangat luar biasa menurut saya bahwa semua kartu ini memiliki ukuran blok hapus dan ukuran segmen yang sama. Sementara itu saya mengumpulkan ID produk / nomor barang dari kemasan kartu yang diuji. Di sini mereka.
Pembaruan 6: Dukungan teknis Kingston menulis kepada saya bahwa pengontrol kartu Kingston yang diuji (dan kemungkinan besar dari kartu lainnya) dioptimalkan untuk file berukuran 4 kB. Implementasi pengontrol yang tepat bersifat rahasia. Jawaban dari Kingston adalah yang terbaik yang saya dapat. SanDisk tidak pernah menanggapi permintaan dukungan saya dan saya tidak dapat menemukan kontak dari Sony, Samsung atau Verbatim