Mengapa kinerja penulisan kartu SD acak untuk ukuran rekaman 8-128 kB turun di bawah kinerja ukuran rekaman 4 kB?

15

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:

Penurunan kinerja kartu SD untuk penulisan acak saat diuji dengan iozone dan 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:

Penurunan kinerja kartu SD untuk penulisan acak saat diuji dengan iozone dan ukuran file 500 MB

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:

  1. Masukkan kartu ke Raspberry Pi Model B
  2. Boot sistem
  3. Login melalui SSH
  4. Mulai uji coba iozone
  5. 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.

ID produk / nomor barang dari kemasan kartu yang diuji

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

Neverland
sumber
1
Ini pertanyaan yang menarik. Apakah hasil yang Anda laporkan rata-rata lebih dari beberapa kali, atau hanya dari sekali saja? Saya ingin tahu berapa banyak variasi dalam hasil.
1
Sebagai hasil dari pemetaan ulang secara logis dan tingkat keausan, klaim ini dalam pertanyaan "Misalnya pada kartu SD dengan ukuran segmen 4 MB, penulisan 4 kB data ke lokasi acak menghasilkan faktor amplifikasi tulis 1024." itu salah.
Ben Voigt
1
Dalam pengujian kinerja pengalaman saya, Anda mencapai semua jenis optimasi dan cache pada tes skala yang lebih kecil. Secara khusus, saya dapat percaya bahwa produsen dengan flash yang lebih lambat akan memerlukan pengoptimalan ini untuk menangani pembaruan sistem file secara efisien, tetapi tidak dapat membuktikannya karena kurangnya dokumentasi publik untuk semua pengontrol. Yang mengatakan, saya perhatikan Anda hanya menggunakan file 50MB. Sudahkah Anda mencoba file yang jauh lebih besar (sesuai "run rules" di iozone.org/docs/IOzone_msword_98.pdf ) untuk mencoba mengatasinya?
1
Dengan asumsi Anda tidak menemukan perbedaan, saya telah mencari data lain tentang masalah ini. Sepertinya Linaro org telah melakukan penelitian serupa . Secara khusus, cache SLC ekstra besar dapat menjelaskan hasil Anda yang sangat cepat. Dan optimisasi FAT32 akan ditujukan khusus pada tulisan kecil.
1
Ya - sudah melihat masalah itu di halaman ... Saya pikir Anda mungkin kehilangan sesuatu dengan FAT32, meskipun: kartu dioptimalkan "untuk pola akses yang diamati pada FAT32" dan bukan hanya untuk FAT32. Pola akses tipikal pada FAT adalah menulis file baru - yang mengharuskan streaming data file plus pembaruan FAT. Pembaruan FAT biasanya akan melibatkan sejumlah kecil blok. Jika saya menulis FTL, oleh karena itu saya berencana untuk mengoptimalkan tulisan apa pun yang lebih kecil dari ukuran halaman saya untuk membantu kinerja FAT.

Jawaban:

4

Struktur Sel Kartu SD:

Dalam keadaan padat elektronik, sel adalah elemen memori yang mampu menyimpan satu atau banyak bit informasi, jumlah bit per sel tergantung pada teknologi yang digunakan. (SLC / MLC / TLC)

Produsen menggunakan teknologi berbeda dalam memori flash untuk mengelola strukturnya, struktur yang paling banyak digunakan adalah TLC dan MLC karena biaya yang lebih murah terkait dengan teknologi tersebut terutama TLC.

Informasi teknis ini sulit diperoleh untuk Kartu SD dan stik USB, produsen memutuskan demikian, mengenai teknologi seperti flash lainnya, seperti SSD di mana informasi ini hampir selalu disediakan.

Ini memiliki dampak langsung pada kehidupan perangkat keras tetapi juga pada kecepatan.

SLC, Sel Level Tunggal (1 bit)

Generally 100000 write erase cycles
Erase time: 1-2.5ms

MLC, Multilevel Cell (2 bit atau lebih)

Anywhere from 3000 to 15000 write erase cycles
Erase time: 2.5-3.5ms

TLC, Triple Level Cell (3 bit)

Anywhere from 1000 to 5000 write/erase cycles
Erase time: 4-5ms

Catatan :

Karena sel dapat berisi 1, 2 atau 3 bit dalam beberapa kasus chip pengontrol kartu sd Anda perlu melakukan lebih banyak siklus akses tergantung pada ukuran rekaman dan kapasitas sel.

Kartu Samsung Anda mungkin menggunakan teknologi SLC atau memiliki chip pengontrol yang kuat.

Catatan 2 :

Saya mencoba beberapa tes seperti yang Anda lakukan dengan partisi ukuran blok ext4 4 kb dan 1 kb tetapi tanpa perbedaan besar

intika
sumber
Kartu Samsung dan kartu Verbatim adalah produk konsumen dan dalam beberapa tahun terakhir, memori SLC tidak umum pada perangkat tersebut. Kartu Samsung adalah MB-MP16D dan MB-MS16D dan kartu kata demi kata nomor artikel 44007 .
Neverland
Mungkin spesifikasi beberapa kontroler tersedia. Saya dapat membuka kartu SD dan memeriksa pengontrol mana yang berisi kartu-kartu ini, tetapi saya tidak dapat membuka kartu microSD. Apakah ada peluang untuk membaca ID produk / nomor dari pengontrol kartu SD melalui perangkat lunak?
Neverland