खोजों को गति देने के लिए क्या grep कैश का उपयोग करता है?


36

मैंने देखा है कि grepएक ही क्वेरी के बाद के रन (और एक अलग क्वेरी भी, लेकिन एक ही फाइल पर) पहले रन की तुलना में बहुत तेज हैं (बड़ी फ़ाइल के माध्यम से खोज करने पर प्रभाव आसानी से ध्यान देने योग्य है)।

यह बताता है कि खोज के लिए प्रयुक्त संरचनाओं के कैशिंग का कुछ प्रकार का उपयोग करता है, लेकिन मुझे इंटरनेट पर एक संदर्भ नहीं मिला।

grepबाद की खोजों में क्या तंत्र तेजी से परिणाम देने में सक्षम बनाता है?

जवाबों:


60

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


2
मैं सहमत हूँ। पहली बार जब आप किसी फ़ाइल को प्राप्त करते हैं, तो फाइलसिस्टम कोड फ़ाइल को डिस्क से कैश में लोड करता है; जब आप इसे थोड़ी देर बाद फिर से पकड़ लेते हैं, तो अभी तक कैश समाप्त होने का समय नहीं हुआ है। देखें कि क्या फाइलसिस्टम कैश को मैन्युअल रूप से फ्लश करने का कोई तरीका है, तो पहले और बाद के समय की तुलना करें।
शादुर 9:11

3
@ बहादुर - एक रास्ता है। देखें unix.stackexchange.com/questions/8398/...
mattdm

3
कोई व्यावहारिक अंतर नहीं है, लेकिन यह एक कर्नेल कैश है, न कि फाइलसिस्टम।
पाब्लो

@pboin ठीक है, मैंने एक छोटा शॉर्टकट लिया। निश्चित ही यह कर्नेल का वह भाग है जो फाइलसिस्टम को संभालता है जो कि कैशिंग को फाइल सिस्टम (डिस्क पर) नहीं करता है। पांडित्य लेकिन सच है। :)
पॉल रेइन

19

लिनक्स और * एनआईएक्स सिस्टम विभिन्न कैश का उपयोग करते हैं जो फाइलसिस्टम (वीएफएस के माध्यम से सार) और उपयोगकर्ता स्तर की प्रक्रियाओं के बीच बैठते हैं। तो यह grep नहीं है और यह कैशिंग करने वाली फाइलसिस्टम नहीं है - यह ऑपरेटिंग सिस्टम है।

आपके grep प्रदर्शन के लिए जिम्मेदार कैश VFS बफ़र कैश है। अन्य कैश इनोड्स और डाइरेक्टरीज़ के लिए हैं, लेकिन वे यहाँ नहीं आएंगे।

अधिक जानकारी के लिए देखें: लिनक्स डॉक्यूमेंटेशन प्रोजेक्ट: 9.2 द वर्चुअल फाइल सिस्टम http://tldp.org/LDP/tlk/fs/ilesystem.html


5
यदि आप एक पुनरावर्ती grep कर रहे हैं, तो इनोड और डेंट्री कैश एक ध्यान देने योग्य अंतर बनाते हैं। एक परीक्षण में, /usr/includeमेरे सिस्टम पर ~ 16.4 सेकंड के भीतर एक grep गिरा दिया गया, जिसमें सभी कैश थे। सब कुछ कैश के साथ, लगभग 0.3 सेकंड। अगर मैं सिर्फ पेज कैश (जो बफर कैश रखता है) ड्रॉप करता हूं, तो ~ 14.3 सेकंड लगते हैं। अगर मैं पेज कैश छोड़ता हूं और डेंट्री / इनकोड कैश को छोड़ देता हूं, तो यह लगभग 12 सेकंड है।
१६:११

@mattdm, यह दिलचस्प है। आपने कैश कैसे गिराया?
JRW


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.