कैसे (वास्तव में) लिनक्स में NCQ को अक्षम करें


13

मैंने VHDL में अपना खुद का सीरियल-एटीए होस्ट-बस-एडॉप्टर (HBA) लागू किया और इसे FPGA पर प्रोग्राम किया। एक FPGA चिप है जिसे किसी भी डिजिटल सर्किट के साथ प्रोग्राम किया जा सकता है। यह SATA या PCIe के लिए हाई स्पीड सिग्नल जेनरेट करने के लिए सीरियल ट्रांससीवर्स से भी लैस है।

यह SATA कंट्रोलर SATA 6 Gb / s लाइन दरों का समर्थन करता है और डिवाइस से 32 MiB चंक्स तक के डेटा को स्थानांतरित करने के लिए ATA-8 DMA-IN / OUT कमांड का उपयोग करता है। डिजाइन अधिकतम गति (जैसे कि सैमसंग एसएसडी 840 प्रो -> 550 से अधिक MiB / s) पर काम करने के लिए सिद्ध है।

कई SSD और HDD उपकरणों के साथ कुछ परीक्षणों के बाद, मैंने एक नया सीगेट 6 टीबी आर्काइव एचडीडी ( ST6000AS0002 ) खरीदा । यह HDD 190 MiB / s तक पठन प्रदर्शन तक पहुँचता है, लेकिन केवल 30 से 40 MiB / s लेखन प्रदर्शन!

इसलिए मैंने गहराई से खोदा और प्रेषित फ़्रेमों को मापा (हाँ जो कि एक FPGA डिजाइन के साथ संभव है)। जहाँ तक मैं बता सकता हूँ, सीगेट एचडीडी एक टुकड़े में स्थानांतरण के पहले 32 MiB प्राप्त करने के लिए तैयार है। यह स्थानांतरण 580 MiB / s की अधिकतम लाइन गति पर होता है। उसके बाद, एचडीडी शेष बाइट्स को 800 से अधिक एमएस के लिए स्टाल करता है ! फिर एचडीडी अगले 32 मिब प्राप्त करने के लिए तैयार है और 800 एमएस के लिए फिर से स्टाल है। सभी एक 1 GiB हस्तांतरण में 30 सेकंड की आवश्यकता होती है, जो लगभग 35 MiB / s के बराबर होती है।

मुझे लगता है कि इस HDD में 32 MiB राइट कैश है, जो फट साइकिल के बीच में फ्लश होता है। 32 से कम MiB के साथ डेटा ट्रांसफर यह व्यवहार नहीं दिखाता है।

मेरा नियंत्रक डेटा ट्रांसफर करने के लिए DMA-IN और DMA-OUT कमांड का उपयोग करता है। मैं QUEUED-DMA-IN और QUEUED-DMA-OUT कमांड का उपयोग नहीं कर रहा हूं, जिनका उपयोग NCQ सक्षम AHCI नियंत्रकों द्वारा किया जाता है। FPGA प्लेटफॉर्म पर AHCI और NCQ को लागू करना बहुत ही जटिल है और इसे मेरी एप्लिकेशन परत की आवश्यकता नहीं है।

मैं अपने लिनक्स पीसी पर इस परिदृश्य को पुन: पेश करना चाहूंगा, लेकिन लिनक्स एएचसीआई चालक में एनसीक्यू डिफ़ॉल्ट रूप से सक्षम है। मुझे NCQ को अक्षम करने की आवश्यकता है, इसलिए मैंने NCQ को अक्षम करने का वर्णन करने वाली इस वेबसाइट को पाया , लेकिन यह काम नहीं करता है।

लिनक्स पीसी अभी भी 190 MiB / s लेखन प्रदर्शन तक पहुँचता है।

> dd if=/dev/zero of=/dev/sdb bs=32M count=32
1073741824 bytes (1.1 GB) copied, 5.46148 s, 197 MB/s

मुझे लगता है कि ऊपर से लेख में एक गलती है: NCQ कतार की गहराई को 1 तक कम करना NCQ को अक्षम नहीं करता है। यह सिर्फ ओएस को केवल एक कतार के उपयोग की अनुमति देता है। यह अभी भी स्थानांतरण के लिए QUEUED-DMA - ** आदेशों का उपयोग कर सकता है। मुझे NCQ को आसानी से अक्षम करने की आवश्यकता है ताकि ड्राइवर डिवाइस पर DMA-IN / OUT कमांड जारी करे।

तो यहाँ मेरे सवाल हैं:

  1. मैं NCQ को कैसे निष्क्रिय कर सकता हूं?
  2. यदि NCQ कतार गहराई = 1, लिनक्स का AHCI ड्राइवर है जो QUEUED-DMA - ** या DMA - ** कमांड का उपयोग करता है?
  3. मैं कैसे जांच कर सकते हैं NCQ, अक्षम है, क्योंकि बदलते /sys/block/sdX/device/queue_depthमें रिपोर्ट नहीं किया जाता dmesg?

3
कर्नेल पैरामीटर libata.force=noncq?
ठंढकुट्ज़

धन्यवाद, इससे NCQ को पूरी तरह से अक्षम करने में बहुत मदद मिली। मैंने लेखन प्रदर्शन के मुद्दे को भी हल किया।
पेब्बल्स

1
> dd if=/dev/zero of=/dev/sdb bs=32M count=32डनो तुम उस के साथ क्या करना चाहते थे; लेकिन यह eraseदोनों एमबीआर और ब्लॉक से परे के gazillions होगा । इस पर चलने वाली मुख्य प्रणाली के साथ एक ड्राइव पर ऐसा करना (और grubएमबीआर पर स्थापित है, जैसा कि मेरे मामले में) काफी खतरनाक होगा;) सोचा था कि मैं इसे एक टिप्पणी के रूप में लिखूंगा, कुछ कम अनुभवी लोगों को प्रयोग करने से रोकने के लिए आपकी "शांत" रेखा ...;)
वाक्यविन्यास

@syntaxerror HDD एक FPGA बोर्ड से जुड़ा है। इस तरह के वातावरण में हार्डवेयर दिनचर्या लिखने के लिए जटिल है जो पूरी तरह से एमबीआर और फाइल सिस्टम एसेस को संभालता है। इसलिए मैं दोनों तरफ कच्चे मीडिया के रूप में एचडीडी का उपयोग कर रहा हूं। FPGA दृश्य में यह एक बड़ी रैखिक स्मृति है। लिनक्स में मैं डेटा जारी रखने और पढ़ने के लिए / dev / sdg और C प्रोग्राम का उपयोग कर रहा हूं।
पैबेल्स

@Pabbels ओह, मुझे FPGA बिट को नजरअंदाज नहीं करना चाहिए था। ठीक है, यह वास्तव में डेस्कटॉप पीसी या नोटबुक के मेनबोर्ड की बसों से जुड़े हमारे सामान्य एचडीडी के लिए पूरी तरह से अलग है ;; "ऐसे वातावरण में हार्डवेयर दिनचर्या लिखने के लिए जटिल है जो पूरी तरह से एमबीआर और फ़ाइल सिस्टम एसीस को संभालते हैं" । सच। आप एचडीएल के बिना नहीं कर पाएंगे । और मैं कल्पना कर सकता हूं कि इस तरह की प्रोग्रामिंग दिल के बेहोश करने के लिए नहीं है ... भले ही विकिपीडिया कोड उदाहरण से पता चलता है कि यह पार्क में पूरी तरह से चल रहा है ;-)
वाक्यविन्यास

जवाबों:


11

@Frostschutz के लिए धन्यवाद, मैं NCQ सुविधा के बिना लिनक्स में लेखन प्रदर्शन को माप सकता हूं। कर्नेल बूट पैरामीटर libata.force=noncqNCQ को पूरी तरह से अक्षम करता है।

मेरे Seagate 6TB के प्रदर्शन की समस्या के बारे में, गति में कोई बदलाव नहीं हुआ। लिनक्स अभी भी 180 MiB / s तक पहुँचता है।

लेकिन तब मेरे पास एक और विचार था:
लिनक्स ड्राइवर 32 MiB चंक्स के स्थानान्तरण का उपयोग नहीं करता है। कर्नेल बफर बहुत छोटा है, खासकर अगर 32 क्यूसी के साथ NCQ सक्षम है (32 कतार * 32 MiB => 1 GiB AHCI बफर)।

इसलिए मैंने अपने SATA कंट्रोलर को 256 KiB ट्रांसफ़र और Voilà के साथ परीक्षण किया, यह 185 MiB / s तक पहुंचना संभव है।

इसलिए मुझे लगता है कि सीगेट ST6000AS0002 फर्मवेयर बड़े एटीए फट ट्रांसफर को संभालने में सक्षम नहीं है। ATA मानक 65.536 तार्किक ब्लॉकों तक की अनुमति देता है, जो 32 MiB के बराबर होता है।

SMR - शिंगल्ड मैग्नेटिक रिकॉर्डिंग

खराब लेखन प्रदर्शन के लिए एक और संभावना शिंगल्ड चुंबकीय रिकॉर्डिंग तकनीक हो सकती है , जिसका उपयोग इन संग्रह उपकरणों में सीगेट द्वारा किया जाता है। जाहिर है, मैंने अपने FPGA कार्यान्वयन के साथ एक दुर्लभ प्रभाव को ट्रिगर किया।


1
मेरे अनुभव में, NCQ को अक्षम करने से प्रदर्शन में बड़ी वृद्धि होती है। मैंने डेस्कटॉप सिस्टम, सर्वर पर यह कोशिश की है, आप इसे नाम दें। यहां तक ​​कि 100% "सर्वर" उच्च-प्रदर्शन हार्डवेयर का उपयोग करना जो आपको लगता है कि NCQ से लाभ होगा। नहीं, यह सिर्फ इसे अक्षम करने की तुलना में सबसे खराब है। IMHO NCQ हार्ड-ड्राइव के लिए सबसे खराब चीजों में से एक है। मैंने कभी भी इसे किसी भी परिस्थिति में लाभ प्रदान करते हुए नहीं देखा है, यह RAID कार्ड या ऑन-बोर्ड चिपसेट समर्पित है।
सी.आर.

क्या आपने फट ऑपरेशन या रैंडम एक्सेस किया है? NCQ का बर्स्ट ऑपरेशन पर कोई प्रभाव नहीं पड़ता है, लेकिन रैंडम एक्सेस में सुधार होता है।
पैबेल्स

क्षमा करें, लेकिन आपने मेरे प्रश्न का उत्तर नहीं दिया है। एक और सवाल यह है कि आपने एक साधारण उपभोक्ता मेनबोर्ड या वर्कस्टेशन / सर्वर मेनबोर्ड या समर्पित RAID नियंत्रक का उपयोग किस हार्डवेयर में किया है। कई कार्यान्वयन NCQ / AHCI द्वारा डिज़ाइन किए गए कई उत्कृष्ट अनुरोधों का समर्थन नहीं करते हैं।
पेब्बेल्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.