जीआरई समय कैसे सही आदेश देता है?


9

मैं इन दोनों आदेशों की गति की तुलना करना चाहता हूं:

grep pattern1 files* 
grep pattern2 files* 

दुर्भाग्य से, पहला grep बहुत सारी फ़ाइलों को मेमोरी बफ़र्स में पढ़ता है, इसलिए दूसरा grep बहुत तेज़ी से चलता है, लेकिन गलत कारण से।

मैं लिनक्स (फेडोरा 11) को कैसे बताता हूं: "कृपया कैशिंग डिस्क रीड को रोक दें क्योंकि मैं कुछ परीक्षण कर रहा हूं।"


वहाँ शायद एक चालाक जवाब है ... लेकिन आप निर्देशिका संरचना की नकल कर सकते हैं, इसलिए आप एक ही फाइल के साथ काम नहीं करेंगे और आपको कैशिंग की समस्या नहीं होगी!
निको

1
एक तरफ के रूप में: फेडोरा 11 जून 2010 में जीवन के अंत तक पहुंच गया। यह उन्नयन का समय है। आगामी फेडोरा 15 रिलीज वास्तव में अच्छा लग रहा है। या, यदि आपको अधिक लंबी उम्र के लिए कुछ और स्थिर की जरूरत है (और ऐसा लगता है जैसे आप अभी भी 11 साल के हैं), तो आरएचईएल 6 या किसी भी दिन-अब सेंटोस 6.
मैटमैटम

यह मुझे हमेशा के लिए आरएच 7.3 से अपग्रेड करने के लिए ले गया! उन्नयन चीजों को तोड़ता है और मुझे डराता है।
बैरीकेटर

2
कैशिंग बंद करके आप पैटर्न मिलान की गति नहीं, बल्कि आपके ड्राइव की गति को मानदंड देंगे। जैसा कि अन्य लोग सुझाव दे रहे हैं - बस पहली कमांड को दो बार चलाएं: पहला कैश को प्राइम करने के लिए, दूसरा बेंचमार्क को।
एलेक्स

मैं कोशिश करूँगा, लेकिन मेरी मुख्य समस्या डिस्क की गति है ... हार्ड ड्राइव पागल हो जाता है जब मैं grep चलाता हूं। हम्म, ठीक है, तो इसका मतलब यह हो सकता है कि grep का अनुकूलन करने में मदद नहीं मिल सकती है ... मुझे उस डेटा की मात्रा को अनुकूलित करने की आवश्यकता है जिसे मैं खींच रहा हूं।
बैरीकेटर

जवाबों:


11

मुझे नहीं लगता कि आप इसे आसानी से कह सकते हैं, "अस्थायी रूप से कैशिंग बंद करो"। लेकिन आप प्रत्येक रन से पहले कैश को गिराने की प्रणाली को क्या बता सकते हैं:

जड़ के रूप में:

sync; echo 3 > /proc/sys/vm/drop_caches

(यह डॉक्यूमेंटेशन / sysctl / vm.txt पर कर्नेल डॉक्स में प्रलेखित है , जो कि आसान है अगर हम में से कुछ की तरह आप हमेशा याद नहीं रख सकते हैं कि मान 1, 2, या 3 क्या करते हैं।)

या वैकल्पिक रूप से, निश्चित रूप से, कैश को प्रधान करें और कैश्ड प्रदर्शन की तुलना करें। (मुझे लगता है कि दोनों उपयोगी संख्याएं हैं।)


1
echo 1केवल पृष्ठ कैश को गिरा देगा, किसी डिस्क कैश को नहीं।
jsbillings

@jsbillings - एर, हाँ। फिक्स्ड।
mattdm

अविश्वसनीय रूप से मामूली नाइटपैकिंग: मुझे ">>" करना था, न कि ">"
बैरिस्टर क्वार्टर

@barrycarter: सच में? हुह!
Mattdm

3
@barrycarter: आपके पास संभवतः अपने शेल में -o noclobber है, जो इसे बनाता है इसलिए यह आपको किसी मौजूदा फ़ाइल को अधिलेखित करने के लिए> उपयोग नहीं करने देगा।
jsbillings

1

जब इस तरह की चीजों की टाइमिंग होती है तो मैं आमतौर पर इसे सबसे पहले कैश प्राइम करने के लिए चलाता हूं। फिर समय का उपयोग करके कमांड चलाएं। कुछ इस तरह के परीक्षण में आपको सीपीयू और बीते हुए समय के बारे में अधिक चिंतित होना चाहिए, और I / O समय के बारे में कम चिंतित होना चाहिए।

किसी भी मामले में पूरी तरह से सटीक समय प्राप्त करना मुश्किल है। यदि इनपुट फ़ाइल बफ़र्स के लिए उपलब्ध मेमोरी के आकार से अधिक है, तो आप संभवतः बफर कैश के माध्यम से सभी फ़ाइलों को साइकल चलाना समाप्त कर देंगे। अन्यथा, आप बफ़र कैश से सभी डेटा तक पहुँच सकते हैं। वास्तविक जीवन में, अक्सर डिस्क से पढ़े गए बफ़र्ड डेटा और डेटा का मिश्रण होता है।


IRL, मैं इस कमांड को कभी-कभार ही चलाता हूं, इसलिए फ़ाइलें * सामग्री कभी भी कैश नहीं होती हैं। मैं उस स्थिति में तेजी से चलने के लिए grep को अनुकूलित करने का प्रयास कर रहा हूं। जब फ़ाइलें * सामग्री पहले से ही कैश में हैं, तो यह एक सेकंड के तहत चलता है (अनुकूलन के लिए कोई मतलब नहीं है, क्योंकि आउटपुट अंतिम उपयोगकर्ता के लिए है)
barrycarter

2
@barrycarter। यदि फ़ाइलों को कैश नहीं किया जाता है, और जब वे होते हैं तो यह एक सेकंड से कम में चलता है, तो मुझे नहीं लगता कि आपको अनुकूलन के लिए अधिक अवसर मिलेगा। फाइलों को तेज स्टोरेज में ले जाना संभव अनुकूलन होगा।
बिलथोर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.