SD kartların performansını rastgele yazma için kontrol ettiğimde, 4 kB kayıt boyutu için performansın oldukça kötü olduğunu görebiliyorum (bu şaşırtıcı değil), ancak daha sonra birkaç kart için artmadan önce daha büyük kayıt boyutları için bile düşüyor. Rasgele yazma performansını iozone v3.430 ile ölçtüm ve farklı üreticilerin birkaç flash kartını test ettim. Bu dosya boyutu 50 MB ile ölçmek için kullanılan iozone komutudur:
iozone -RaeI -i 0 -i 1 -i 2 -y 4k -q 1M -s 50m -o -f /tmp/testfile
Dosya boyutu 50 MB olan sonuçlar:
Soru: 8, 16, 32, 64 ve 128 kB kayıt boyutuna sahip rastgele yazma performansının 4 kB kayıt boyutuna göre daha yavaş olmasının nedeni nedir?
Peter Brittain daha büyük bir dosya boyutuyla test etmeyi önerdi, bu yüzden 500 MB dosya boyutuyla da denedim. Sonuçlar şunlardır:
Genel performans kötüleşti, ancak fenomen hala gerçekleşiyor.
Bölümler 4 MB sınırlarına hizalanır. Dosya sistemi 4 kB blok boyutunda ext4'tür. Testlerin başlaması için kullanılan bölüm mmcblk0p2'dir.
$ 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
Güncelleme 1: Özellikle küçük kayıt boyutları için rastgele yazma performansının ardışık yazma ile karşılaştırıldığında önemli ölçüde düşük olduğu açıktır. NAND flash depolamanın bellek hücreleri sayfalara gruplanır ve silme blokları olarak adlandırılır. Tipik sayfa boyutları 4, 8 veya 16 kB'dir. Denetleyicinin tek sayfa yazması mümkün olsa da, ilk önce silinmeden verilerin üzerine yazılamaz ve silme bloğu bir NAND flash belleğin silebileceği en küçük birimdir. Silme bloğu boyutu tipik olarak 128 kB ile 2 MB arasındadır. Modern SD kartlarda, az sayıda silme bloğu, ayırma grupları veya ayırma birimleri veya segmentleri olarak adlandırılan eşit boyuttaki daha büyük birimlerde birleştirilir. Normal segment boyutu 4 MB'dir.Depolama alanındaki her yazma işlemi, tüm segment için bir okuma-değiştirme-yazma işlemi ile sonuçlanır. Örneğin, 4 MB segment boyutuna sahip bir SD kartta, rastgele yerlere 4 kB veri yazmak 1024 yazma amplifikasyon faktörüne neden olur. SD kartların denetleyicileri bir çeviri katmanı uygular. Herhangi bir G / Ç işlemi için, denetleyici tarafından sanaldan fiziksel adrese bir çeviri gerçekleştirilir. Bir segment içindeki verilerin üzerine yazılacaksa, çeviri katmanı segmentin sanal adresini silinmiş başka bir fiziksel adresle yeniden eşler. Eski fiziksel segment kirli olarak işaretlenir ve silme işlemi için sıraya alınır. Daha sonra silindiğinde tekrar kullanılabilir. SD kartların denetleyicileri, rasgele yazma işlemlerinin performansını artırmak için genellikle bir veya daha fazla segmenti önbelleğe alır.SD kartlar bir kök dosya sistemini depolarsa, kartın denetleyicisinin yazma işleminin / işlemlerinin yapıldığı segment (ler) i, dosya sistemi için meta verileri depolayan segmentleri (eğer kullanılabilir) dosya sisteminin günlüğü. Sonuç olarak, bir SD kartın rastgele yazma performansı silme bloğu boyutuna, segment boyutuna ve segment sayısına, denetleyici önbelleklerine bağlıdır. Ancak bu, 8, 16, 32, 64 ve 128 kB kayıt boyutuna sahip rastgele yazma performansının 4 kB kayıt boyutunda olduğu gibi neden daha yavaş olduğunu açıklamaz.
Güncelleme 2 (myaut'a cevap): Tablonun ekran görüntüsü benim işim. Şu anda, tek kartlı bilgisayar kümeleri hakkında bir makale / makale yazıyorum çünkü öğrenci projelerine ve araştırmacılara kaynak sağlamak için ilginç bir seçenek. Bu bağlamda, tek bir düğümün CPU, depolama ve ağ arayüzünün performansını da araştırdım. Test edilen tüm SD kartları satın aldım. Taktığım kartlardan birine (dd ile kopyalandı) Raspian Wheezy (sürüm 2014-06-20). Ağ ayarlarını yapılandırıp bazı ek paketler (örn. İozone) yükledikten sonra, tüm SD kartı diğer tüm SD kartlara kopyaladım.
Güncelleme 3 (Gabriel Southern'in cevabı): Sonuçlar tek seferliktir. Prosedür şöyleydi:
- Raspberry Pi Model B'ye kart takın
- Sistemi önyükleyin
- SSH ile giriş
- İozone test çalıştırmasını başlat
- Sistemi durdurun ve başka bir SD kart ile deneyin
Bazı kartlar kontrol etmek için birkaç kez denedim. Çok az değişiklik vardı. Bu olay, iki Samsung kartı ve bir Verbatim kartı hariç her zaman ortaya çıkar.
Güncelleme 4: Şu anda orada kesin bir cevap istemek için NAND flash klon kaydedicileri (Samsung, SanDisk, Toshiba ...) üreten bir şirketle iletişim kurmaya çalışıyorum. SanDisk'in bir forumu var. Ben sordum bir açıklama için orada. Ayrıca Kingston'un teknik destek bölümüne bir istek gönderdim.
Güncelleme 5: Silme bloğu boyutu ve ayırma birimi (segment) boyutu olaydan sorumlu değildir. ThinkPad X240 dizüstü bilgisayarın dahili kart okuyucusunda pritcsd.py alet yumruğu ve son olarak bir Raspberry Pi Model B ile tüm SD kartların silme bloğu boyutunu test ettim Erase block size of mmcblk0 is 65536 bytes
. Ayrıca segment boyutu, test edilen tüm SD kartlar için eşittir. 4 MB. Bu bilgi dosyada bulunabilir /sys/class/mmc_host/mmc0/mmc0*/preferred_erase_size
. Bence tüm bu kartların aynı silme bloğu boyutuna ve segment boyutuna sahip olması olağanüstü. Bu arada test edilen kartların ambalajlarından ürün kimliklerini / ürün numaralarını topladım. İşte buradalar.
Güncelleme 6: Kingston'un teknik desteği, test edilen Kingston kartlarının (ve büyük olasılıkla diğer kartların) denetleyicilerinin 4 kB boyutundaki dosyalar için optimize edildiğini yazdı. Tam denetleyici uygulaması gizlidir. Kingston'ın cevabı aldığım en iyisi. SanDisk destek isteğime hiçbir zaman yanıt vermedi ve Sony, Samsung veya Verbatim'den bir kişi bulamadım