เหตุใดประสิทธิภาพในการเขียน SD card แบบสุ่มสำหรับขนาดเรคคอร์ด 8-128 kB ลดลงต่ำกว่าขนาดเรคคอร์ด 4 kB?


15

เมื่อฉันตรวจสอบประสิทธิภาพการทำงานของการ์ด SD สำหรับการเขียนแบบสุ่มฉันสามารถดูประสิทธิภาพได้ค่อนข้างแย่สำหรับขนาดบันทึก 4 kB (ไม่น่าแปลกใจ) แต่สำหรับการ์ดหลาย ๆ ใบก็จะลดลงสำหรับขนาดบันทึกที่ใหญ่กว่าก่อนที่จะเพิ่มขึ้น ฉันวัดประสิทธิภาพการเขียนแบบสุ่มด้วย iozone v3.430 และทดสอบแฟลชการ์ดหลายรุ่นของผู้ผลิตหลายราย นี่คือคำสั่ง iozone ฉันใช้วัดขนาดไฟล์ 50 MB:

iozone -RaeI -i 0 -i 1 -i 2 -y 4k -q 1M -s 50m -o -f /tmp/testfile

นี่คือผลลัพธ์ที่มีขนาดไฟล์ 50 MB:

ประสิทธิภาพลดลงของการ์ด SD สำหรับการเขียนแบบสุ่มเมื่อทดสอบด้วย iozone และขนาดไฟล์ 50 MB

คำถาม: อะไรคือสาเหตุที่ประสิทธิภาพการเขียนแบบสุ่มที่มีขนาดเร็กคอร์ดที่ 8, 16, 32, 64 และ 128 kB นั้นช้ากว่าขนาดเรคคอร์ด 4 kB?

Peter Brittain แนะนำให้ทดสอบด้วยขนาดไฟล์ที่ใหญ่กว่าดังนั้นฉันจึงลองด้วยขนาดไฟล์ 500 MB นี่คือผลลัพธ์ที่ได้:

ประสิทธิภาพลดลงของการ์ด SD สำหรับการเขียนแบบสุ่มเมื่อทดสอบด้วย iozone และขนาดไฟล์ 500 MB

ประสิทธิภาพโดยรวมแย่ลง แต่ปรากฏการณ์ยังคงเกิดขึ้น

พาร์ติชันถูกจัดชิดกับขอบเขต 4 MB ระบบไฟล์ ext4 ที่มีขนาดบล็อก 4 kB พาร์ติชันที่ใช้สำหรับการทดสอบเริ่มต้นคือ 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

อัปเดต 1:เป็นที่ชัดเจนว่าประสิทธิภาพสำหรับการเขียนแบบสุ่มโดยเฉพาะอย่างยิ่งสำหรับขนาดบันทึกขนาดเล็กนั้นต่ำกว่าอย่างมากเมื่อเทียบกับการเขียนตามลำดับ เซลล์หน่วยความจำของที่จัดเก็บข้อมูลแฟลช NAND ถูกจัดกลุ่มเป็นหน้าต่างๆและที่เรียกว่าบล็อกลบ ขนาดหน้าโดยทั่วไปคือ 4, 8 หรือ 16 kB แม้ว่าตัวควบคุมจะสามารถเขียนหน้าเดียวได้ แต่ข้อมูลไม่สามารถเขียนทับได้โดยไม่ต้องถูกลบออกก่อนและบล็อกการลบเป็นหน่วยที่เล็กที่สุดที่หน่วยความจำแฟลช NAND สามารถลบได้ ขนาดบล็อกการลบโดยทั่วไปอยู่ระหว่าง 128 kB ถึง 2 MB ในการ์ด SD ที่ทันสมัยบล็อกการลบจำนวนเล็กน้อยจะรวมกันเป็นหน่วยที่มีขนาดใหญ่กว่าซึ่งเรียกว่ากลุ่มการจัดสรรหรือหน่วยการจัดสรรหรือเซ็กเมนต์ ขนาดเซ็กเมนต์ปกติคือ 4 MBแต่ละการดำเนินการเขียนบนหน่วยเก็บข้อมูลส่งผลให้เกิดการดำเนินการอ่าน - แก้ไข - เขียนสำหรับกลุ่มทั้งหมด ตัวอย่างเช่นในการ์ด SD ที่มีขนาดเซ็กเมนต์ 4 MB การเขียนข้อมูล 4 kB ไปยังตำแหน่งสุ่มส่งผลให้เกิดปัจจัยการขยายการเขียน 1024 ตัวควบคุมของการ์ด SD ใช้เลเยอร์การแปล สำหรับการดำเนินการ I / O ใด ๆ การแปลจากที่อยู่เสมือนไปยังที่อยู่ทางกายภาพจะดำเนินการโดยผู้ควบคุม หากข้อมูลภายในส่วนใดส่วนหนึ่งจะถูกเขียนทับชั้นการแปลจะทำการแมปที่อยู่เสมือนของส่วนนั้นไปยังที่อยู่ทางกายภาพอื่นที่ถูกลบ ส่วนทางกายภาพเก่าถูกทำเครื่องหมายว่าสกปรกและอยู่ในคิวเพื่อทำการลบ หลังจากนั้นเมื่อถูกลบจะสามารถนำกลับมาใช้ใหม่ได้ ตัวควบคุมของการ์ด SD มักจะแคชกลุ่มเดียวหรือหลายส่วนเพื่อเพิ่มประสิทธิภาพของการดำเนินการเขียนแบบสุ่มหากการ์ด SD จัดเก็บระบบไฟล์รูทจะเป็นประโยชน์ถ้าคอนโทรลเลอร์ของการ์ดสามารถแคชส่วนที่มีการดำเนินการเขียนส่วนที่เก็บเมตาดาต้าสำหรับระบบไฟล์และ (ถ้า ว่าง) เจอร์นัลของระบบไฟล์ ดังนั้นประสิทธิภาพการเขียนแบบสุ่มของการ์ด SD ขึ้นอยู่กับขนาดบล็อกลบขนาดเซกเมนต์และจำนวนเซกเมนต์แคชควบคุม แต่ทั้งหมดนี้ไม่ได้อธิบายว่าทำไมประสิทธิภาพการเขียนแบบสุ่มที่มีขนาดเร็กคอร์ดที่ 8, 16, 32, 64 และ 128 kB นั้นช้ากว่าเช่นเดียวกับขนาดบันทึก 4 kB

อัปเดต 2 (ตอบกลับ myaut):ภาพหน้าจอของตารางเป็นงานของฉันเอง ปัจจุบันฉันเขียนบทความ / บทความเกี่ยวกับกลุ่มคอมพิวเตอร์บอร์ดเดียวเพราะเป็นตัวเลือกที่น่าสนใจสำหรับการจัดหาทรัพยากรให้กับโครงการนักศึกษาและนักวิจัย ในบริบทนี้ฉันยังตรวจสอบประสิทธิภาพของ CPU ที่เก็บข้อมูลและอินเทอร์เฟซเครือข่ายของโหนดเดียว ฉันซื้อการ์ด SD ที่ผ่านการทดสอบทั้งหมดแล้ว ในหนึ่งในการ์ดที่ฉันติดตั้ง (คัดลอกผ่าน dd) Raspian Wheezy (เวอร์ชั่น 2014-06-20) หลังจากที่ฉันกำหนดการตั้งค่าเครือข่ายและติดตั้งแพ็คเกจเพิ่มเติม (เช่น iozone) ฉันก็อปปี้การ์ด SD ทั้งหมดไปยังการ์ด SD อื่น ๆ ทั้งหมด

อัปเดต 3 (คำตอบสำหรับ Gabriel Southern):ผลลัพธ์มาจากการวิ่งครั้งเดียว ขั้นตอนคือ:

  1. ใส่การ์ดลงใน Raspberry Pi รุ่น B
  2. บูตระบบ
  3. เข้าสู่ระบบผ่าน SSH
  4. เริ่มการทดสอบการทำงานของ iozone
  5. หยุดระบบและลองใช้การ์ด SD อื่น

การ์ดบางอันฉันลองหลายครั้งเพื่อตรวจสอบอีกครั้ง มีการเปลี่ยนแปลงเพียงเล็กน้อย ปรากฏการณ์นี้เกิดขึ้นตลอดเวลายกเว้นการ์ด Samsung สองการ์ดและการ์ด Verbatim หนึ่งใบ

อัปเดต 4:ในขณะนี้ฉันพยายามค้นหาผู้ติดต่อกับ บริษัท ที่ผลิตตัวควบคุมแฟลช NAND (Samsung, SanDisk, Toshiba ... ) เพื่อขอคำตอบที่ชัดเจน SanDisk มีฟอรัม ฉันขอคำอธิบายที่นั่น ฉันยังส่งคำขอไปยังฝ่ายสนับสนุนด้านเทคนิคของ Kingston

อัปเดต 5:ขนาดบล็อกลบและขนาดการจัดสรร (เซ็กเมนต์) จะไม่รับผิดชอบต่อปรากฏการณ์ ผมทดสอบขนาดลบบล็อกของ SD การ์ดทั้งหมดที่มีpritcsd.pyกำปั้นเครื่องมือในเครื่องอ่านบัตรภายในของโน้ตบุ๊ค ThinkPad x240 และสุดท้ายกับราสเบอร์รี่ Pi Erase block size of mmcblk0 is 65536 bytesรุ่นบีสำหรับบัตรทั้งหมดผลลัพธ์คือ: ขนาดเซกเมนต์จะเท่ากันสำหรับการ์ด SD ที่ทดสอบแล้วทั้งหมด มันคือ 4 MB ข้อมูลนี้สามารถพบได้ในไฟล์ /sys/class/mmc_host/mmc0/mmc0*/preferred_erase_sizeมันค่อนข้างพิเศษในความคิดของฉันว่าการ์ดเหล่านี้มีขนาดบล็อกลบและขนาดเซ็กเมนต์เดียวกัน ในระหว่างนี้ฉันได้รวบรวม ID ผลิตภัณฑ์ / หมายเลขรายการจากหีบห่อของการ์ดทดสอบ พวกเขาอยู่ที่นี่

รหัสผลิตภัณฑ์ / หมายเลขรายการจากการบรรจุของการ์ดทดสอบ

อัปเดต 6:การสนับสนุนทางเทคนิคของ KINGSTON เขียนถึงฉันว่าคอนโทรลเลอร์ของการ์ด KINGSTON ที่ทดสอบแล้ว (และการ์ดอื่น ๆ ส่วนใหญ่น่าจะเหมาะ) สำหรับไฟล์ขนาด 4 kB การใช้คอนโทรลเลอร์ที่แน่นอนนั้นเป็นความลับ คำตอบจาก Kingston คือคำตอบที่ดีที่สุดที่ฉันได้รับ SanDisk ไม่ตอบสนองต่อคำร้องขอการสนับสนุนของฉันและฉันไม่พบผู้ติดต่อจาก Sony, Samsung หรือ Verbatim


1
นี่เป็นคำถามที่น่าสนใจ ผลลัพธ์ที่คุณรายงานโดยเฉลี่ยมากกว่าการวิ่งหลายครั้งหรือเพียงแค่การวิ่งครั้งเดียว? ฉันอยากรู้ว่าจะมีการเปลี่ยนแปลงเท่าใดในผลลัพธ์

1
อันเป็นผลมาจากการแมปแบบตรรกะและการปรับระดับการสวมใส่การอ้างสิทธิ์นี้ในคำถาม "ตัวอย่างเช่นในการ์ด SD ที่มีขนาดเซ็กเมนต์ 4 MB การเขียนข้อมูล 4 kB ไปยังตำแหน่งสุ่มส่งผลให้เกิดปัจจัยการขยายการเขียน 1024" เป็นเท็จ
Ben Voigt

1
ในการทดสอบประสิทธิภาพของฉันคุณพบกับการเพิ่มประสิทธิภาพและแคชทุกประเภทในการทดสอบขนาดเล็ก โดยเฉพาะอย่างยิ่งฉันเชื่อว่าผู้ผลิตที่มีแฟลชช้าจะต้องเพิ่มประสิทธิภาพเหล่านี้เพื่อจัดการกับการอัปเดตระบบไฟล์อย่างมีประสิทธิภาพ แต่ไม่สามารถพิสูจน์ได้เพราะขาดเอกสารสาธารณะสำหรับตัวควบคุมทั้งหมด ที่กล่าวว่าฉันสังเกตเห็นว่าคุณใช้ไฟล์ 50MB เท่านั้น คุณเคยลองไฟล์ที่มีขนาดใหญ่กว่านี้ (ตาม "กฎการเรียกใช้" ในiozone.org/docs/IOzone_msword_98.pdf ) เพื่อพยายามตอบโต้เรื่องนี้หรือไม่?

1
จากสมมติฐานที่ว่าคุณไม่พบความแตกต่างฉันได้ดูข้อมูลอื่น ๆ ในเรื่องนี้ ดูเหมือนว่า Linaro org ได้ทำการวิจัยที่คล้ายกันแล้ว โดยเฉพาะอย่างยิ่งแคช SLC ขนาดใหญ่พิเศษอาจอธิบายผลลัพธ์ที่รวดเร็วของคุณ และการเพิ่มประสิทธิภาพ FAT32 จะมุ่งเน้นที่การเขียนขนาดเล็กโดยเฉพาะ

1
ใช่แล้ว - พบปัญหานั้นในหน้า ... ฉันคิดว่าคุณอาจพลาดอะไรบางอย่างกับ FAT32 แม้ว่า: การ์ดได้รับการปรับปรุงให้ดีที่สุด "สำหรับรูปแบบการเข้าถึงที่พบใน FAT32" และไม่ใช่แค่สำหรับ FAT32 รูปแบบการเข้าถึงทั่วไปบน FAT จะเป็นการเขียนไฟล์ใหม่ - ซึ่งต้องการให้สตรีมข้อมูลไฟล์และการอัพเดต FAT การอัพเดท FAT มักจะเกี่ยวข้องกับบล็อกจำนวนเล็กน้อย หากฉันกำลังเขียน FTL ฉันจะวางแผนเพิ่มประสิทธิภาพการเขียนใด ๆ ที่เล็กกว่าขนาดหน้าของฉันเพื่อช่วยในการทำงานของ FAT

คำตอบ:


4

โครงสร้างของการ์ด SD การ์ด:

ในอุปกรณ์อิเล็กทรอนิกส์แบบโซลิดสเตตเซลล์คือองค์ประกอบหน่วยความจำที่สามารถเก็บข้อมูลหนึ่งหรือหลายบิตจำนวนบิตต่อเซลล์ขึ้นอยู่กับเทคโนโลยีที่ใช้ (SLC / MLC / TLC)

ผู้ผลิตใช้เทคโนโลยีที่แตกต่างกันในหน่วยความจำแฟลชเพื่อจัดการโครงสร้างโครงสร้างที่ใช้ส่วนใหญ่คือ TLC และ MLC เนื่องจากต้นทุนที่ถูกกว่าเกี่ยวข้องกับเทคโนโลยีเหล่านั้นโดยเฉพาะ TLC

ข้อมูลทางเทคนิคนี้หาได้ยากสำหรับการ์ด SD และ USB sticks ผู้ผลิตจึงตัดสินใจเกี่ยวกับแฟลชเช่นเทคโนโลยีอื่น ๆ เช่น SSD ซึ่งให้ข้อมูลนี้เกือบตลอดเวลา

สิ่งนี้มีผลกระทบโดยตรงต่ออายุการใช้งานของฮาร์ดแวร์ แต่ยังส่งผลต่อความเร็ว

SLC, เซลล์ระดับเดียว (1 บิต)

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

MLC, เซลล์หลายระดับ (2 บิตขึ้นไป)

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

TLC, เซลล์ระดับสาม (3 บิต)

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

บันทึก :

เนื่องจากเซลล์อาจมี 1, 2 หรือ 3 บิตในบางกรณีชิปตัวควบคุมการ์ด sd ของคุณจะต้องดำเนินการรอบการเข้าถึงมากขึ้นขึ้นอยู่กับขนาดบันทึกและความจุของเซลล์

การ์ด Samsung ของคุณอาจใช้เทคโนโลยี SLC หรือมีชิปคอนโทรลเลอร์ที่ทรงพลัง

โน้ต 2 :

ฉันลองทดสอบบางอย่างเช่นพาร์ติชัน ext4 block ขนาด4 kbและ1 kbแต่ไม่ต่างกันมาก


การ์ด Samsung และการ์ดคำต่อคำเป็นผลิตภัณฑ์เพื่อผู้บริโภคและในปีที่ผ่านมาหน่วยความจำ SLC ไม่ได้เป็นอุปกรณ์ทั่วไป การ์ดซัมซุงMB-MP16DและMB-MS16Dและหมายเลขบทความบัตรคำต่อคำ ist 44007
เนเวอร์แลนด์

อาจมีข้อกำหนดของคอนโทรลเลอร์บางตัว ฉันสามารถเปิดการ์ด SD และตรวจสอบว่าการ์ดเหล่านี้มีคอนโทรลเลอร์ใดบ้าง แต่ฉันไม่สามารถเปิดการ์ด microSD ได้ มีโอกาสที่จะอ่าน ID ผลิตภัณฑ์ / หมายเลขของคอนโทรลเลอร์ SD การ์ดผ่านทางซอฟต์แวร์หรือไม่?
เนเวอร์แลนด์
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.