एसडी कार्ड यादृच्छिक रिकॉर्ड प्रदर्शन 8-128 kB रिकॉर्ड आकार 4 kB के प्रदर्शन के नीचे क्यों लिखता है?


15

जब मैं यादृच्छिक लेखन के लिए एसडी कार्ड के प्रदर्शन की जांच करता हूं, तो मैं देख सकता हूं कि प्रदर्शन रिकॉर्ड आकार 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 एमबी है:

Iozone और 50 एमबी फ़ाइल आकार के साथ परीक्षण करने पर यादृच्छिक लेखन के लिए एसडी कार्ड का प्रदर्शन ड्रॉप

प्रश्न: क्या कारण है कि 8, 16, 32, 64 और 128 kB के रिकॉर्ड आकार के साथ यादृच्छिक लेखन प्रदर्शन 4 kB रिकॉर्ड आकार के साथ धीमा है?

पीटर ब्रिटन ने एक बड़े फ़ाइल आकार के साथ परीक्षण करने का सुझाव दिया, इसलिए मैंने इसे फ़ाइल आकार 500 एमबी के साथ आज़माया। यह परिणाम हैं:

Iozone और 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 (गेब्रियल दक्षिणी का जवाब): परिणाम एकल रन से हैं। प्रक्रिया थी:

  1. रास्पबेरी पाई मॉडल बी में कार्ड डालें
  2. सिस्टम बूट करें
  3. SSH के माध्यम से लॉगिन करें
  4. Iozone टेस्ट रन शुरू करें
  5. सिस्टम को रोकें और दूसरे एसडी कार्ड के साथ प्रयास करें

कुछ कार्ड मैंने कई बार जांचने की कोशिश की। बस थोड़ा बदलाव था। घटना दो सैमसंग कार्ड और एक शब्दशः कार्ड को छोड़कर हर समय होती है।

अद्यतन 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 की फ़ाइलों के लिए अनुकूलित हैं। सटीक नियंत्रक कार्यान्वयन गोपनीय है। किंग्स्टन का जवाब मुझे मिला सबसे अच्छा है। सैनडिस्क ने कभी भी मेरे समर्थन अनुरोध का जवाब नहीं दिया और मैं सोनी, सैमसंग या वर्बेटिम से संपर्क नहीं कर पाया


1
यह एक दिलचस्प सवाल है। क्या परिणाम आपके द्वारा एक से अधिक रन से या केवल एक रन से औसत बताया गया है? मुझे यह जानने की उत्सुकता होगी कि परिणामों में कितनी भिन्नता है।

1
तार्किक रीमैपिंग और वियर-लेवलिंग के परिणामस्वरूप, प्रश्न में यह दावा है "उदाहरण के लिए एसडी कार्ड पर 4 एमबी सेगमेंट आकार के साथ, 4 केबी डेटा को यादृच्छिक स्थानों पर लिखने से परिणाम 1024 के एक लेखन प्रवर्धन कारक में होता है।" गलत है।
बेन वोइग्ट

1
मेरे अनुभव प्रदर्शन परीक्षण में, आपने छोटे पैमाने पर परीक्षणों में सभी प्रकार के अनुकूलन और कैश मारा। विशेष रूप से, मुझे विश्वास हो सकता है कि धीमी फ्लैश वाले निर्माताओं को फाइल सिस्टम अपडेट को कुशलतापूर्वक संभालने के लिए इन अनुकूलन की आवश्यकता होगी, लेकिन सभी नियंत्रकों के लिए सार्वजनिक प्रलेखन की कमी के कारण इसे साबित नहीं किया जा सकता है। उस ने कहा, मुझे लगता है कि आप केवल एक 50MB फ़ाइल का उपयोग कर रहे हैं। क्या आपने इसे काउंटर करने की कोशिश करने के लिए iozone.org/docs/IOzone_msword_98.pdf में बहुत बड़ी फ़ाइलों ("रन रूल्स" के अनुसार ) की कोशिश की है?

1
इस धारणा पर कि आपको कोई अंतर नहीं लगता है, मुझे इस मामले के किसी अन्य डेटा की तलाश थी। लगता है कि लिनरो ऑर्ग ने कुछ इसी तरह का शोध किया है । विशेष रूप से, अतिरिक्त बड़े एसएलसी कैश आपके बहुत तेज़ परिणामों की व्याख्या कर सकते हैं। और FAT32 ऑप्टिमाइज़ेशन का उद्देश्य विशेष रूप से छोटे लेखन पर होगा।

1
हाँ - पहले से ही पृष्ठ में उस मुद्दे को देखा था ... मुझे लगता है कि आप FAT32 के साथ कुछ याद कर रहे हैं, हालांकि: कार्ड का उपयोग "FAT32 पर देखे जाने वाले एक्सेस पैटर्न के लिए" किया जाता है, न कि केवल FAT32 के लिए। एफएटी पर एक विशिष्ट एक्सेस पैटर्न एक नई फ़ाइल लिखने के लिए होगा - जिसके लिए फ़ाइल डेटा को स्ट्रीम करने के साथ-साथ एक एफएटी अपडेट की आवश्यकता होती है। एफएटी अपडेट में आमतौर पर कम संख्या में ब्लॉक शामिल होंगे। यदि मैं एक FTL लिख रहा था, तो इसलिए मैं FAT प्रदर्शन में मदद करने के लिए अपने पृष्ठ आकार से छोटे किसी भी लेखन को अनुकूलित करने की योजना बनाऊंगा।

जवाबों:


4

एसडी कार्ड सेल संरचना:

ठोस-अवस्था वाले इलेक्ट्रॉनिक्स में, एक सेल मेमोरी तत्व होता है जो एक या कई बिट्स को संचय करने में सक्षम होता है, प्रति सेल बिट की संख्या प्रयुक्त तकनीक पर निर्भर करती है। (एसएलसी / एमएलसी / टीएलसी)

निर्माता इसकी संरचना को प्रबंधित करने के लिए फ्लैश मेमोरी में अलग-अलग तकनीक का उपयोग करते हैं, सबसे अधिक उपयोग की जाने वाली संरचना टीएलसी और एमएलसी हैं, क्योंकि विशेष रूप से एमएलसी उन प्रौद्योगिकी से संबंधित सस्ती लागत है।

यह तकनीकी जानकारी एसडी कार्ड और यूएसबी स्टिक के लिए प्राप्त करना कठिन है, निर्माताओं ने एसएसडी के रूप में प्रौद्योगिकी के बारे में अन्य फ्लैश के बारे में फैसला किया है, जहां यह जानकारी लगभग हमेशा प्रदान की जाती है।

इसका हार्डवेयर जीवन पर, लेकिन गति पर भी सीधा प्रभाव पड़ता है।

एसएलसी, सिंगल लेवल सेल (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

टीएलसी, ट्रिपल लेवल सेल (3 बिट्स)

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

ध्यान दें :

चूंकि सेल में कुछ मामलों में 1, 2 या 3 बिट्स हो सकते हैं, इसलिए आपके एसडी कार्ड नियंत्रक चिप को रिकॉर्ड आकार और सेल की क्षमता के आधार पर अधिक पहुंच चक्र निष्पादित करने की आवश्यकता होगी।

आपके सैमसंग कार्ड शायद एक एसएलसी तकनीक का उपयोग कर रहे हैं या उनके पास एक शक्तिशाली नियंत्रक चिप है।

नोट 2 :

मैंने कुछ परीक्षणों की कोशिश की जैसे आप विभाजन के साथ करते हैं ext4 ब्लॉक आकार 4 kb और 1 kb लेकिन बड़े अंतर के बिना


सैमसंग कार्ड और वर्बटिम कार्ड उपभोक्ता उत्पाद हैं और पिछले वर्षों में, एसएलसी मेमोरी ऐसे उपकरणों में आम नहीं थी। सैमसंग कार्ड MB-MP16D और MB-MS16D हैं और वर्बटिम कार्ड ist लेख संख्या 44007 है
नेवरलैंड

हो सकता है कि कुछ नियंत्रकों के विनिर्देश उपलब्ध हों। मैं एसडी कार्ड खोल सकता हूं और जांच सकता हूं कि इन कार्डों में कौन से नियंत्रक हैं, लेकिन मैं माइक्रोएसडी कार्ड नहीं खोल सकता। क्या सॉफ्टवेयर के माध्यम से एसडी कार्ड के नियंत्रकों की उत्पाद आईडी / संख्या को पढ़ने का कोई मौका है?
नेवरलैंड
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.