जब मैं यादृच्छिक लेखन के लिए एसडी कार्ड के प्रदर्शन की जांच करता हूं, तो मैं देख सकता हूं कि प्रदर्शन रिकॉर्ड आकार 4 kB (यह आश्चर्य की बात नहीं है) के लिए काफी खराब है, लेकिन फिर कई कार्डों के लिए यह बड़े रिकॉर्ड आकारों के लिए भी बढ़ता है। मैंने iozone v3.430 के साथ यादृच्छिक लेखन प्रदर्शन को मापा और विभिन्न निर्माताओं के कई फ्लैश कार्ड का परीक्षण किया। यह iozone कमांड है, मैंने फ़ाइल का आकार 50 एमबी मापा है:
iozone -RaeI -i 0 -i 1 -i 2 -y 4k -q 1M -s 50m -o -f /tmp/testfile
यह फ़ाइल का आकार 50 एमबी है:
प्रश्न: क्या कारण है कि 8, 16, 32, 64 और 128 kB के रिकॉर्ड आकार के साथ यादृच्छिक लेखन प्रदर्शन 4 kB रिकॉर्ड आकार के साथ धीमा है?
पीटर ब्रिटन ने एक बड़े फ़ाइल आकार के साथ परीक्षण करने का सुझाव दिया, इसलिए मैंने इसे फ़ाइल आकार 500 एमबी के साथ आज़माया। यह परिणाम हैं:
समग्र प्रदर्शन बदतर हो गया लेकिन घटना अभी भी होती है।
विभाजन 4 एमबी की सीमाओं से जुड़े होते हैं। फ़ाइल सिस्टम 4 kB ब्लॉक आकार के साथ ext4 है। परीक्षण शुरू होने के लिए उपयोग किया जाने वाला विभाजन 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 हैं। यद्यपि नियंत्रक के लिए एकल पृष्ठ लिखना संभव है, पहले मिटाए बिना डेटा को अधिलेखित नहीं किया जा सकता है और एक मिटा ब्लॉक सबसे छोटी इकाई है जिसे नंद फ्लैश स्टोरेज मिटा सकता है। मिटा ब्लॉक का आकार आमतौर पर 128 केबी और 2 एमबी के बीच होता है। आधुनिक एसडी कार्ड में, इरेज़ ब्लॉक की छोटी संख्या को समान आकार की बड़ी इकाइयों में संयोजित किया जाता है जिन्हें आवंटन समूह या आवंटन इकाइयाँ या खंड कहा जाता है। सामान्य खंड का आकार 4 एमबी है।प्रत्येक सेगमेंट पर एक रीड-रिवाइज-राइट ऑपरेशन के लिए स्टोरेज रिजल्ट पर एक ऑपरेशन लिखा जाता है। उदाहरण के लिए, 4 एमबी खंड आकार वाले एसडी कार्ड पर, यादृच्छिक स्थानों पर डेटा का 4 kB लिखना 1024 के एक लेखन प्रवर्धन कारक के रूप में होता है। एसडी कार्ड के नियंत्रक एक अनुवाद परत को लागू करते हैं। किसी भी I / O ऑपरेशन के लिए, नियंत्रक से आभासी से भौतिक पते पर अनुवाद किया जाता है। यदि किसी सेगमेंट के अंदर का डेटा ओवरराइट हो जाएगा, तो ट्रांसलेशन लेयर सेगमेंट के वर्चुअल एड्रेस को दूसरे इरेजड फिजिकल एड्रेस से रिमैप कर देता है। पुराने भौतिक खंड को गंदे के रूप में चिह्नित और मिटा दिया गया है। बाद में, जब इसे मिटा दिया जाता है, तो इसका पुन: उपयोग किया जा सकता है। एसडी कार्ड के नियंत्रक आमतौर पर यादृच्छिक लेखन कार्यों के प्रदर्शन को बढ़ाने के लिए एक या अधिक खंडों को कैश करते हैं।यदि एसडी कार्ड एक रूट फाइल सिस्टम को स्टोर करता है, तो यह फायदेमंद है अगर कार्ड का नियंत्रक सेगमेंट (एस) को कैश कर सकता है, जहां राइट ऑपरेशन होता है, तो सेगमेंट, जो फाइल सिस्टम के लिए मेटाडेटा स्टोर करते हैं और (यदि उपलब्ध) फ़ाइल सिस्टम की पत्रिका। नतीजतन, एसडी कार्ड का रैंडम राइट प्रदर्शन इरेज़ ब्लॉक आकार, सेगमेंट साइज़ और सेगमेंट की संख्या, कंट्रोलर कैश पर निर्भर करता है। लेकिन यह सब स्पष्ट नहीं करता है कि 8, 16, 32, 64 और 128 kB के रिकॉर्ड आकार के साथ यादृच्छिक लेखन प्रदर्शन 4 kB रिकॉर्ड आकार के साथ धीमा क्यों है।
अपडेट 2 (myaut का उत्तर): तालिका का स्क्रीनशॉट मेरा अपना काम है। वर्तमान में, मैं एकल बोर्ड कंप्यूटरों के समूहों के बारे में एक लेख / पत्र लिखता हूं क्योंकि वे छात्र परियोजनाओं और शोधकर्ताओं को संसाधन प्रदान करने के लिए एक दिलचस्प विकल्प हैं। इस संदर्भ में मैंने एकल नोड के सीपीयू, भंडारण और नेटवर्क इंटरफेस के प्रदर्शन की भी जांच की। मैंने सभी परीक्षण किए गए एसडी कार्ड खरीदे हैं। मेरे द्वारा स्थापित एक कार्ड पर (dd के माध्यम से कॉपी की गई) रास्पियन व्हीज़ी (संस्करण 2014-06-20)। जब मैंने नेटवर्क सेटिंग्स को कॉन्फ़िगर किया और कुछ अतिरिक्त पैकेज (जैसे iozone) स्थापित किए, मैंने पूरे एसडी कार्ड को अन्य सभी एसडी कार्ड में कॉपी कर दिया।
अपडेट 3 (गेब्रियल दक्षिणी का जवाब): परिणाम एकल रन से हैं। प्रक्रिया थी:
- रास्पबेरी पाई मॉडल बी में कार्ड डालें
- सिस्टम बूट करें
- SSH के माध्यम से लॉगिन करें
- Iozone टेस्ट रन शुरू करें
- सिस्टम को रोकें और दूसरे एसडी कार्ड के साथ प्रयास करें
कुछ कार्ड मैंने कई बार जांचने की कोशिश की। बस थोड़ा बदलाव था। घटना दो सैमसंग कार्ड और एक शब्दशः कार्ड को छोड़कर हर समय होती है।
अद्यतन 4: फिलहाल मैं एक कंपनी के लिए एक संपर्क खोजने की कोशिश करता हूं जो एक निश्चित उत्तर के लिए पूछने के लिए एनएंड फ्लैश क्लॉंट्रोलर्स (सैमसंग, सैनडिस्क, तोशिबा ...) का उत्पादन करता है। सैनडिस्क का एक फोरम है। मैं पूछा स्पष्टीकरण के लिए वहाँ। मैंने किंग्स्टन के तकनीकी सहायता विभाग को एक अनुरोध भी भेजा।
अद्यतन 5: मिटा ब्लॉक आकार और आवंटन इकाई (खंड) आकार घटना के लिए जिम्मेदार नहीं हैं। मैंने एक थिंकपैड X240 नोटबुक के आंतरिक कार्ड रीडर में pritcsd.py टूल फ़िस्ट के साथ सभी एसडी कार्ड के एरे ब्लॉक आकार का परीक्षण किया और अंत में रास्पबेरी पाई मॉडल बी के साथ सभी कार्ड के लिए आउटपुट है Erase block size of mmcblk0 is 65536 bytes
:। इसके अलावा खंड का आकार सभी परीक्षण किए गए एसडी कार्ड के लिए समान है। यह 4 एमबी है। यह जानकारी फ़ाइल में मिल सकती है /sys/class/mmc_host/mmc0/mmc0*/preferred_erase_size
। यह मेरी राय में असाधारण है कि इन सभी कार्डों में समान ब्लॉक आकार और खंड आकार है। इस बीच मैंने परीक्षण कार्डों की पैकिंग से उत्पाद आईडी / आइटम नंबर एकत्र किए। वे यहाँ हैं।
अद्यतन 6: किंग्स्टन के तकनीकी समर्थन ने मुझे लिखा है कि परीक्षण किए गए किंग्स्टन कार्ड के नियंत्रक (और अन्य कार्डों की सबसे अधिक संभावना) आकार 4 kB की फ़ाइलों के लिए अनुकूलित हैं। सटीक नियंत्रक कार्यान्वयन गोपनीय है। किंग्स्टन का जवाब मुझे मिला सबसे अच्छा है। सैनडिस्क ने कभी भी मेरे समर्थन अनुरोध का जवाब नहीं दिया और मैं सोनी, सैमसंग या वर्बेटिम से संपर्क नहीं कर पाया