2014-12-27 5 views
8

हम कुछ होस्टों के लिए सी ++ में एक अत्यधिक समवर्ती सॉफ्टवेयर लिख रहे हैं, सभी सिस्टम ड्राइव के रूप में एक एकल ST9500620NS और डेटा के लिए इंटेल P3700 NVMe Gen3 पीसीआई एसएसडी कार्ड से सुसज्जित हैं। हमारे सॉफ्टवेयर ट्यूनिंग के लिए प्रणाली अधिक समझने की कोशिश कर, मैं प्रणाली के आसपास खोदा (दो E5-2620 v2 @ 2.10GHz सीपीयू, 32GB राम, CentOS 7.0 चल रहा है) और निम्नलिखित को पहचानना हैरान था:एनवीएमई एसएसडी से सुसज्जित मेजबान के लिए सही लिनक्स I/O शेड्यूलर का चयन करना?

[[email protected] ~]# cat /sys/block/nvme0n1/queue/scheduler 
none 

यह the official doc on kernel.org से सही लिनक्स I/O शेड्यूलर चुनने के बारे में मैंने जो कुछ भी सीखा, उसके विपरीत है।

मैं समझता हूं कि एनवीएमई ब्लॉक पर एक नया बच्चा है, इसलिए अब मैं मौजूदा शेड्यूलर सेटिंग को नहीं छूंगा। लेकिन मैं वास्तव में इंस्टॉलर द्वारा "कोई नहीं" के बारे में अजीब महसूस करता हूं। यदि कोई भी जिसके पास कुछ संकेत हैं, जहां मैं अधिक जानकारी प्राप्त कर सकता हूं या अपने निष्कर्ष साझा कर सकता हूं, तो मैं आभारी रहूंगा। मैंने अब तक कुछ ठोस खोजने के बिना कई घंटे गुगल किए हैं।

उत्तर

7

"कोई नहीं" (उर्फ "नोओप") इस डिवाइस के लिए उपयोग करने के लिए सही शेड्यूलर है।

आई/ओ शेड्यूलर मुख्य रूप से सीमित क्यूइंग (उदाहरण के लिए, एकल यांत्रिक हार्ड ड्राइव) के साथ धीमी स्टोरेज डिवाइस के लिए उपयोगी होते हैं - I/O शेड्यूलर का उद्देश्य I/O अनुरोधों को पुन: व्यवस्थित करना है ताकि पहले से अधिक महत्वपूर्ण सेवा प्राप्त हो सके। एक बहुत बड़ी आंतरिक कतार वाली डिवाइस के लिए, और बहुत तेज़ सेवा (जैसे पीसीआई एसएसडी!), एक आई/ओ शेड्यूलर आपको कोई अच्छा नहीं करेगा; आप तुरंत डिवाइस पर सभी अनुरोध सबमिट करने से बेहतर हैं।

+0

तार्किक रूप से, मैंने जो कहा वह आपको मिला। शायद मुझे खुद को और स्पष्ट करना चाहिए था - मुझे यह विकल्प कहीं भी नहीं मिला "कोई नहीं"। क्या मुझे इसे खोजने के लिए कर्नेल कोड में खोदना है या इसे कहीं भी दस्तावेज किया गया है? – user183394

+0

असल में, मुझे इतना उत्सुकता मिली कि मैंने अपनी मशीन पर संपूर्ण 'लिनक्स-3.18.1.tar.xz' डाउनलोड किया, स्रोत' zx'-ed tar ball 'untar', और 'linux-3.18.1 में चला गया/block', ने 'grep -i none' किया और 'noop-iosched.c' भी समीक्षा की। कहीं भी मैंने इस विकल्प का नाम 'none' देखा था। अब मैं और भी रहस्यमय हूं कि सेंटोस एनाकोंडा इंस्टॉलर ने ऐसा प्रतीत होता है कि यह प्रतीत होता है। अरे, रेड हैट लोग? – user183394

+0

मेरे लूप बैक डिवाइस 'बिल्ली/sys/block/loop */queue/शेड्यूलर' को' none' के रूप में दिखाते हैं। क्या आप सुनिश्चित हैं कि आपका डिवाइस कुछ फ़ाइल सिस्टम प्रकार (ext {3,4}, btrfs) के साथ ठीक से स्वरूपित, कनेक्ट, स्वरूपित और/या घुड़सवार है। इस आलेख से [एसएसडीएस के लिए I/o शेड्यूलर ट्यूनिंग] (http://dev.nuodb.com/techblog/tuning-linux-io-scheduler-ssds) हालांकि, सभी मानक शेड्यूलर और एक चयनित व्यक्ति को दिखाना चाहिए। कम से कम यह आपको परीक्षण उद्देश्यों के लिए एक अलग शेड्यूलर का उपयोग कर एक विकल्प देना चाहिए? – askb

9

जवाब टिप्पणियों में Sanne द्वारा दिए गए सही है:

NOOP "। कारण यह है कि NVMe अनुसूचक आप उपयोग नहीं कर रहे नजरअंदाज है" "कार्यान्वयन:। आप एक अनुसूचक उपयोग नहीं कर रहे"

NOOP कोई भी के समान नहीं है, NOOP अभी भी ब्लॉक विलय करता है (जब तक आप यह nomerges साथ निष्क्रिय)

आप एक NVMe डिवाइस का उपयोग करते हैं या यदि आप सक्षम संकलन समय पर "scsi_mod.use_blk_mq = Y" या बूट समय, फिर आप पारंपरिक अनुरोध कतार और उसके संबंधित शेड्यूलर को बाईपास करते हैं।

भविष्य में ब्लैक-एमक के लिए शेड्यूलर विकसित किए जा सकते हैं।

संबंधित मुद्दे