सवाल हार्ड डिस्क प्रदर्शन की जांच कैसे करें


हार्ड ड्राइव के प्रदर्शन की जांच कैसे करें (या तो टर्मिनल या जीयूआई के माध्यम से)। लिखने की गति। पढ़ने की गति। कैश आकार और गति। यादृच्छिक गति।


261
2017-12-12 00:22


मूल


इसी तरह के सवाल पर पूछा गया है unix.stackexchange.com/questions/108838/... , stackoverflow.com/questions/1198691/... तथा serverfault.com/questions/219739/... । - Anon


जवाब:


टर्मिनल विधि

hdparm शुरू करने के लिए एक अच्छी जगह है।

sudo hdparm -Tt /dev/sda

/dev/sda:
Timing cached reads:   12540 MB in  2.00 seconds = 6277.67 MB/sec
Timing buffered disk reads: 234 MB in  3.00 seconds =  77.98 MB/sec

sudo hdparm -v /dev/sda जानकारी भी देगी।

dd आपको लिखने की गति पर जानकारी देगा।

यदि ड्राइव में फ़ाइल सिस्टम नहीं है (और तभी ही), उपयोग of=/dev/sda

अन्यथा, इसे / tmp पर माउंट करें और फिर लिखें आउटपुट फ़ाइल को हटाएं।

dd if=/dev/zero of=/tmp/output bs=8k count=10k; rm -f /tmp/output

10240+0 records in
10240+0 records out
83886080 bytes (84 MB) copied, 1.08009 s, 77.7 MB/s

ग्राफिकल विधि

  1. सिस्टम -> प्रशासन -> डिस्क उपयोगिता पर जाएं।
    • वैकल्पिक रूप से, चलकर कमांड लाइन से जीनोम डिस्क उपयोगिता लॉन्च करें gnome-disks
  2. बाएं फलक पर अपनी हार्ड डिस्क का चयन करें।
  3. अब दाएं फलक में "बेंचमार्क - मापन ड्राइव प्रदर्शन" बटन पर क्लिक करें।
  4. चार्ट के साथ एक नई विंडो खुलती है। आपको मिलेगा और दो बटन होंगे। एक "स्टार्ट रीड केवल बेंचमार्क" के लिए है और दूसरा एक "प्रारंभ करें / लिखें बेंचमार्क" है। जब आप किसी भी बटन पर क्लिक करते हैं तो यह हार्ड डिस्क की बेंचमार्किंग शुरू करता है।

test

डिस्क I / O बेंचमार्क कैसे करें

लेख

क्या आप कुछ और चाहते हैं?


345
2017-12-12 00:34



मैं परीक्षण की सिफारिश करेंगे /dev/urandom साथ ही साथ /dev/zero इनपुट के रूप में dd डेटा की संपीड़न के रूप में एक एसएसडी का परीक्षण करते समय लिखने की गति पर भारी प्रभाव पड़ सकता है। - Ian Mackinnon
मेरे उबंटू 12.04 एकता पर ऐसी कोई "सिस्टम ->" नहीं है। या कम से कम मुझे यह नहीं मिला है। और मैं उस डिस्क उपकरण को सिस्टम सेटिंग्स के भीतर नहीं देखता हूं ... O_o लेकिन मैं इसे चलाने में कामयाब रहा: / usr / bin / palimpsest - Fran Marzoa
ध्यान दें कि 12.10 के बाद से इसे बस डिस्क कहा जाता है और एकता के माध्यम से पाया जा सकता है। - Paul Lammertsma
जीनोम पर यह एप्लिकेशन -> सिस्टम टूल्स -> प्राथमिकताएं -> डिस्क उपयोगिता में स्थानांतरित हो गया है। उपयोग के उन लोगों के लिए जो एकता से नफरत करते हैं। - Ken Sharp
/tmp फाइल सिस्टम अक्सर इन दिनों रैमडिस्क का उपयोग कर रहा है। तो लिखना /tmp प्रतीत होता है कि आपकी डिस्क का सबसिस्टम नहीं, आपकी याददाश्त का परीक्षण करेगा। - Zoredache


Suominen सही है, हम किसी तरह की सिंक का उपयोग करना चाहिए; लेकिन एक आसान तरीका है, conv = fdatasync नौकरी करेगा:

dd if=/dev/zero of=/tmp/output conv=fdatasync bs=384k count=1k; rm -f /tmp/output
1024+0records in
1024+0 records out
402653184 bytes (403 MB) copied, 3.19232 s, 126 MB/s

73
2017-08-18 18:31



यह दूसरों के मुकाबले एक अलग कमांड / विकल्प का उपयोग कर एक जवाब है। मैं देखता हूं कि यह एक उत्तर के योग्य उत्तर है। - Alaa Ali
आपने ब्लॉक आकार के रूप में 384k का उपयोग क्यों किया है? - Diego F. Durán
@Diego कोई कारण नहीं है। यह सिर्फ एक उदाहरण था। आप किसी और चीज का उपयोग कर सकते हैं। (लगभग 4k ... 1 एम के बीच) बेशक बड़ा अवरोध बेहतर प्रदर्शन देगा। और जब आप बड़े बीएस का उपयोग करते हैं तो निश्चित रूप से गिनती संख्या कम करें, या इसे पूरा करने में एक वर्ष लग जाएगा। - Tele
यह आईओज़ोन और sysbench संख्या जैसे बेंच मार्क टूल्स द्वारा विश्वसनीय नहीं है बहुत कम है - MSS


मैं उपयोग करने की सिफारिश नहीं करेंगे /dev/urandom क्योंकि यह सॉफ्टवेयर आधारित है और सुअर के रूप में धीमा है। रैमडिस्क पर यादृच्छिक डेटा के हिस्से को लेने के लिए बेहतर है। हार्ड डिस्क परीक्षण पर यादृच्छिक कोई फर्क नहीं पड़ता, क्योंकि प्रत्येक बाइट को लिखा जाता है (डीडी के साथ एसएसडी पर भी)। लेकिन अगर हम शुद्ध शून्य या यादृच्छिक डेटा के साथ dedupped zfs पूल का परीक्षण करते हैं, तो वहां बहुत बड़ा प्रदर्शन अंतर होता है।

दृश्य का एक और बिंदु सिंक समय समावेशन होना चाहिए; सभी आधुनिक फाइल सिस्टम फाइल ऑपरेशंस पर कैशिंग का उपयोग करते हैं।

वास्तव में डिस्क की गति को मापने के लिए और स्मृति नहीं, हमें कैशिंग प्रभाव से छुटकारा पाने के लिए फाइल सिस्टम को सिंक करना होगा। इसे आसानी से किया जा सकता है:

time sh -c "dd if=/dev/zero of=testfile bs=100k count=1k && sync"

उस विधि के साथ आप आउटपुट प्राप्त करते हैं:

sync ; time sh -c "dd if=/dev/zero of=testfile bs=100k count=1k  && sync" ; rm testfile 
1024+0 records in
1024+0 records out
104857600 bytes (105 MB) copied, 0.270684 s, 387 MB/s

real    0m0.441s
user    0m0.004s
sys 0m0.124s

इसलिए डिस्क डाटरेट सिर्फ 104857600 / 0.441 = 237772335 बी / एस -> 237 एमबी / एस है

यह कैशिंग के मुकाबले 100 एमबी / एस से कम है।

हैप्पी बेंचमार्किंग,


42
2017-12-06 23:18





यदि आप डिस्क को रीड-टाइम पढ़ने और लिखने की गति की निगरानी करना चाहते हैं तो आप इसका उपयोग कर सकते हैं iotop उपकरण।

डिस्क किसी विशेष एप्लिकेशन या कार्य के लिए निष्पादित करने के बारे में सटीक जानकारी प्राप्त करने के लिए उपयोगी है। आउटपुट आपको प्रति प्रक्रिया पढ़ने / लिखने की गति दिखाएगा, और सर्वर के लिए कुल पढ़ने / लिखने की गति, जैसा कि बहुत समान है top

आईओप स्थापित करने के लिए:

sudo apt-get install iotop  

इसे चलाने के लिए:

sudo iotop

30
2017-09-17 14:24





बोनी ++ अंतिम बेंचमार्क उपयोगिता है जिसे मैं लिनक्स के लिए जानता हूं।

(मैं वर्तमान में इसके साथ विंडोज़-आधारित मशीन का परीक्षण करने के लिए बोनी ++ के साथ काम पर एक लिनक्स लाइवसीडी तैयार कर रहा हूं!)

यह कैशिंग, सिंकिंग, यादृच्छिक डेटा, डिस्क पर यादृच्छिक स्थान, छोटे आकार के अपडेट, बड़े अपडेट, पढ़ता है, लिखता है, आदि का ख्याल रखता है। एक यूएसबीकी, हार्डडिस्क (रोटरी), एक ठोस-राज्य ड्राइव और रैम-आधारित की तुलना करना फाइल सिस्टम नौसिखिया के लिए बहुत जानकारीपूर्ण हो सकता है।

मुझे नहीं पता कि यह उबंटू में शामिल है, लेकिन आप इसे आसानी से स्रोत से संकलित कर सकते हैं।

http://www.coker.com.au/bonnie++/


23
2018-02-03 16:13





गति लिखें

$ dd if=/dev/zero of=./largefile bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 4.82364 s, 223 MB/s

ब्लॉक आकार वास्तव में काफी बड़ा है। आप 64k या यहां तक ​​कि 4k जैसे छोटे आकारों के साथ प्रयास कर सकते हैं।


गति पढ़ें

मेमोरी कैश को साफ़ करने के लिए निम्न आदेश चलाएं

$ sudo sh -c "sync && echo 3 > /proc/sys/vm/drop_caches"

अब फ़ाइल को पढ़ें जो लिखने के परीक्षण में बनाया गया था:

$ dd if=./largefile of=/dev/null bs=4k
165118+0 records in
165118+0 records out
676323328 bytes (676 MB) copied, 3.0114 s, 225 MB/s

17
2018-05-05 22:12





बोनी ++ का उपयोग करने के तरीके पर कुछ संकेत

bonnie++ -d [TEST_LOCATION] -s [TEST_SIZE] -n 0 -m [TEST_NAME] -f -b -u [TEST_USER] 
bonnie++ -d /tmp -s 4G -n 0 -m TEST -f -b -u james

थोड़ा और अधिक: सरल बोनी ++ उदाहरण


12
2017-09-28 19:02





यदि आप सटीकता चाहते हैं, तो आपको इसका उपयोग करना चाहिए fio। इसे मैनुअल पढ़ने की आवश्यकता है (man fio) लेकिन यह आपको सटीक परिणाम देगा। ध्यान दें कि किसी भी सटीकता के लिए, आपको यह निर्दिष्ट करने की आवश्यकता है कि आप वास्तव में क्या मापना चाहते हैं। कुछ उदाहरण:

बड़े ब्लॉक के साथ अनुक्रमिक पढ़ने की गति (यह आपके ड्राइव के विनिर्देशों में दिखाई देने वाली संख्या के नजदीक होना चाहिए):

fio --name TEST --eta-newline=5s --filename=fio-tempfile.dat --rw=read --size=500m --io_size=10g --blocksize=1024k --ioengine=libaio --fsync=10000 --iodepth=32 --direct=1 --numjobs=1 --runtime=60 --group_reporting

बड़े ब्लॉक के साथ अनुक्रमिक लिखने की गति (यह आपके ड्राइव के विनिर्देशों में दिखाई देने वाली संख्या के नजदीक होना चाहिए):

fio --name TEST --eta-newline=5s --filename=fio-tempfile.dat --rw=write --size=500m --io_size=10g --blocksize=1024k --ioengine=libaio --fsync=10000 --iodepth=32 --direct=1 --numjobs=1 --runtime=60 --group_reporting

यादृच्छिक 4K QD1 पढ़ें (यह वह संख्या है जो वास्तविक दुनिया के प्रदर्शन के लिए वास्तव में मायने रखती है जब तक कि आप निश्चित रूप से बेहतर नहीं जानते):

fio --name TEST --eta-newline=5s --filename=fio-tempfile.dat --rw=randread --size=500m --io_size=10g --blocksize=4k --ioengine=libaio --fsync=1 --iodepth=1 --direct=1 --numjobs=1 --runtime=60 --group_reporting

मिश्रित यादृच्छिक 4K सिंक के साथ QD1 पढ़ें और लिखें (यह सबसे खराब मामला संख्या है जिसे आपको कभी भी अपने ड्राइव से उम्मीद करनी चाहिए, आमतौर पर स्पेस शीट में सूचीबद्ध संख्या का 1-10%):

fio --name TEST --eta-newline=5s --filename=fio-tempfile.dat --rw=randrw --size=500m --io_size=10g --blocksize=4k --ioengine=libaio --fsync=1 --iodepth=1 --direct=1 --numjobs=1 --runtime=60 --group_reporting

बढ़ाओ --size फ़ाइल आकार बढ़ाने के लिए तर्क। बड़ी फ़ाइलों का उपयोग करने से आप ड्राइव तकनीक और फर्मवेयर के आधार पर प्राप्त होने वाली संख्याओं को कम कर सकते हैं। छोटी फाइलें घूर्णन मीडिया के लिए "बहुत अच्छे" परिणाम देगी क्योंकि पढ़ने वाले सिर को इतना स्थानांतरित करने की आवश्यकता नहीं है। यदि आपका डिवाइस खाली है, तो ड्राइव को लगभग भरने के लिए पर्याप्त फ़ाइल का उपयोग करके आप प्रत्येक परीक्षण के लिए सबसे खराब केस व्यवहार प्राप्त करेंगे। एसएसडी के मामले में, फ़ाइल का आकार इससे कोई फर्क नहीं पड़ता।

ध्यान दें कि fio पहले रन पर आवश्यक अस्थायी फ़ाइल बनाएगा। यह स्थायी भंडारण से लिखने से पहले डेटा को संपीड़ित करके धोखा देने वाले उपकरणों से बहुत अच्छी संख्या प्राप्त करने से बचने के लिए यादृच्छिक डेटा से भरा जाएगा। अस्थायी फ़ाइल बुलाया जाएगा fio-tempfile.dat उपर्युक्त उदाहरणों में और वर्तमान कार्यशील निर्देशिका में संग्रहीत। तो आपको सबसे पहले उस डिवाइस पर बदलना चाहिए जो उस डिवाइस पर लगाया गया है जिसे आप परीक्षण करना चाहते हैं।


9
2018-01-01 18:14



कुछ फियो सेटिंग्स थोड़ा अजीब हैं और गैर-इष्टतम हो सकती हैं। उदाहरण के लिए, जब आप एक एसिंक्रोनस I / O इंजन के साथ प्रत्यक्ष I / O कर रहे हैं तो इस तरह के एक विशाल ब्लॉक आकार (2Mbytes) होने से कर्नेल में बहुत अधिक विभाजन हो सकता है जिससे इस प्रकार ओवरहेड बन जाता है। आवधिक भेज रहा है fsyncजब आप केवल पढ़ रहे हैं तो भी असामान्य दिखता है। मैं सहमत हूं कि फियो उपयोगी है लेकिन मैं पाठकों को सावधानीपूर्वक जांच करूँगा कि वे कौन से पैरामीटर का उपयोग करना चाहते हैं, वे केवल उत्तर के 20180102 संस्करण से वर्बैटिम की प्रतिलिपि बनाने के बजाय उपयोग करना चाहते हैं ... - Anon
@ऑन: आप सही हैं, अनुक्रमिक पढ़ने के लिए इष्टतम मिलान करना होगा /sys/block/sd?/queue/max_sectors_kb क्योंकि यह वास्तविक हार्डवेयर सीमा से कम हो सकता है जो आमतौर पर ऊपर दिए गए उदाहरण में 2 एमबी से अधिक है। हालांकि, मुझे लगता है कि सीपीयू के कारण मामूली ओवरहेड वास्तविक I / O डिवाइस की गति की तुलना में कोई फर्क नहीं पड़ता। fsync पढ़ने के लिए एक ऑपरेशन है इसलिए यह परिणामों को प्रभावित नहीं करेगा - मैंने इसे रखा ताकि विभिन्न कमांड लाइनों के बीच मतभेदों को समझना आसान हो। क्या आपको निर्माता चश्मे से मेल खाने वाले परिणाम प्राप्त करने में समस्याएं आ रही हैं? - Mikko Rantalainen
बिल्कुल नहीं, मेरे पास अभी कुछ (कुछ) अनुभव है जो फियो और लिनक्स के साथ काम कर रहा है। दरअसल यदि आप सबसे अच्छे ब्लॉक आकार का अनुमान लगा रहे हैं तो यह उपलब्ध होने पर optimal_io_size से शुरू करना बुद्धिमान होगा (लेकिन यदि आप 0 है तो 64Kbytes मान सकते हैं - कर्नेल करता है)। बिल्कुल नहीं, मेरे पास अभी (कुछ) अनुभव है फियो और लिनक्स। दरअसल यदि आप सबसे अच्छे ब्लॉक आकार का अनुमान लगा रहे हैं तो यह उपलब्ध होने पर optimal_io_size से शुरू करना बुद्धिमान होगा (लेकिन यदि आप 0 है तो 64Kbytes मान सकते हैं - कर्नेल यही करता है)। - Anon
मैंने अभी कुछ उपकरणों का पुनः परीक्षण किया है। उपरोक्त अनुक्रमिक पठन परीक्षण (2 एमबी ब्लॉक आकार) का उपयोग करके मुझे सैमसंग एसएसडी 850 ईवीओ और इंटेल 910 एसएसडी से 1070 एमबी / एस से 280 एमबी / एस मिल गया। 64k ब्लॉक आकार और अन्यथा समान कमांडलाइन के साथ मुझे 850 ईवीओ से 268 एमबी / एस और 1010 एमबी / एस 910 एसएसडी से मिला। कम से कम इस तरह के उपकरणों के लिए, 2 एमबी ब्लॉक आकार का उपयोग करने से 1-5% के आसपास के परिणामों में सुधार होता है, भले ही यह कर्नेल को हार्डवेयर को अनुरोधों को विभाजित करने का कारण बनता है। मुझे लगता है कि कर्नेल ऑप्टिमाइज़ेशन के साथ भी अधिक सिस्कोल सबमिट करने के ओवरहेड कर्नेल के अंदर विभाजित होने से भी बदतर है। - Mikko Rantalainen
आगे परीक्षण करने पर ऐसा लगता है कि मुझे 2 मान की शक्ति का उपयोग करके उच्चतम क्रमिक थ्रूपुट मिलता है जो कम से कम है max_sectors_kb। मैंने उपरोक्त उदाहरण कमांड को 1 एमबी ब्लॉक आकार का उपयोग करने के लिए बदल दिया क्योंकि यह वास्तविक दुनिया हार्डवेयर के साथ काम करता प्रतीत होता है। और मैंने इसका परीक्षण भी किया fsync पढ़ने के लिए कोई फर्क नहीं पड़ता। - Mikko Rantalainen