प्रदर्शन परीक्षण को दोहराने के लिए फ़ाइल कैश साफ़ करें


106

अपने प्रदर्शन परिणामों को तिरछा करने से रोकने के लिए मैं कैश्ड फ़ाइल सामग्री को निकालने के लिए किन उपकरणों या तकनीकों का उपयोग कर सकता हूं? मेरा मानना ​​है कि मुझे या तो पूरी तरह से स्पष्ट होने की जरूरत है, या चुनिंदा रूप से फ़ाइल और निर्देशिका सामग्री के बारे में कैश्ड जानकारी को हटा दें।

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

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

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

मैंने SysInternals CacheSet की कोशिश की , लेकिन "क्लियर" पर क्लिक करने से एक औसत दर्जे की वृद्धि (एक कोल्ड-बूट के बाद समय पर बहाली) के परिणामस्वरूप उस समय में फिर से पढ़ने के लिए फाइल नहीं आई है जो मैंने अभी कुछ ही बार पढ़ी है।



1
यह प्रश्न क्यों हटाया गया ?
डेन डैस्कलेस्कु

जवाबों:


82

SysInternal के RAMMap ऐप का उपयोग करें ।

रैंप को खाली स्टैंडबाय

खाली / खाली स्टैंडबाई सूची मेनू विकल्प विंडोज फ़ाइल कैश को साफ करेगा।


2
RAMMap Windows XP पर नहीं चलता है। क्या उन मेनू विकल्पों में SysInternals Cacheset एप्लिकेशन में "स्पष्ट" बटन से कुछ अलग है?
स्टीफन डेने

@stephen इस तकनीक ने विंडोज 8 के तहत मेरे लिए पूरी तरह से काम किया! Windows XP अभी 12 साल का है, किसी भी कारण से आप विस्टा, विंडोज 7 या विंडोज 8 पर यह कोशिश नहीं कर सकते हैं?
जेफ एटवुड

@ जेफ मैं अब उन सीमाओं के साथ काम नहीं करता। तो "खाली खाली सूची" परिणाम हाल ही में पढ़ी गई फ़ाइल से डिस्क IO की आवश्यकता है?
स्टीफन डेन्ह

2
खाली स्टैंडबाई सूची पर क्लिक करने के बाद फ़ाइल सूची को ताज़ा करने के लिए F5 दबाएं
जोश

3
प्रोग्रामेटिक एप्रोच के लिए, इस SO पोस्ट को देखें: stackoverflow.com/a/23085045/430360
snemarch

16

Windows XP के लिए, आपको फ़ाइल को FILE_FLAG_NO_BUFFERING विकल्पों के साथ CreateFile का उपयोग करके और फिर हैंडल को बंद करके किसी विशिष्ट फ़ाइल के लिए कैश साफ़ करने में सक्षम होना चाहिए। यह प्रलेखित नहीं है, और मुझे नहीं पता कि यह विंडोज के बाद के संस्करणों पर काम करता है, लेकिन मैंने फ़ाइल संपीड़न पुस्तकालयों की तुलना करने के लिए परीक्षण कोड लिखते समय इसका उपयोग बहुत पहले किया था। मुझे याद नहीं है कि यदि इस पहुंच को पढ़ने या लिखने से प्रभावित हुआ है।


विंडोज 7 SP1, x64 के तहत मेरे लिए पूरी तरह से काम करता है। महान टिप!
cxxl

2
ताकि हर फ़ाइल के लिए दोहराया जाना चाहिए ? इसलिए यदि उदाहरण के लिए, आप 10 उपनिर्देशिकाओं में 30 फ़ाइलों में फैले 100MB वाले निर्देशिका की प्रतिलिपि बनाते हैं, तो आपको कैश के बजाय वास्तविक डिस्क पढ़ने के लिए प्रत्येक को अलग से खोलना होगा?
सिनटेक

साइट पर अन्य उत्तर इस बात की पुष्टि करते हैं कि यह Win7 और 8 में भी काम करता है। मुझे लगता है कि यह विस्टा पर काम करता है। और हाँ, आपको इसे प्रत्येक फ़ाइल पर चलाना होगा, लेकिन यह सब लंबे समय तक नहीं लेगा। आपको बस प्रत्येक फ़ाइल को खोलना और बंद करना है, और जब आप बंद करते हैं, तो विंडोज कैश को साफ करता है। ऐसा करने के बाद, आपने अपना प्रदर्शन परीक्षण चलाया।
मिंग डक

1
यह एक सही जवाब था। कोड के लिए सरल, प्रभावी, और अधिकांश विंडोज़ ओएस (XP सहित, मुझे केवल Win7x64 पर परीक्षण किया गया है) पर काम करना चाहिए। मैंने फ़ाइल को विशेषाधिकारों के साथ खोला और साझा नहीं किया। सुनिश्चित नहीं है कि कॉम्बो क्या मायने रखता है।
रोसको

खुले (2) syscall में O_DIRECT फ्लैग के साथ Linux (2.4.10 आगे) पर समान कार्यक्षमता। ठीक है, अधिक सटीक रूप से, जो मैं समझता हूं, उस फ़ाइल के लिए O_DIRECT कैश को साफ़ नहीं करता है, यह इसे बायपास करने के लिए सबसे अच्छा है।
काइवन

14

एक त्वरित googling लिनक्स के लिए ये विकल्प देता है

  1. फ़ाइलों को पकड़े हुए विभाजन को अनमाउंट और माउंट करें
  2. sync && echo 1 > /proc/sys/vm/drop_caches

2
धन्यवाद, यह बहुत उपयोगी लगता है, हालांकि मैं संभवतः 1 के बजाय 3 को प्रतिध्वनित करना चाहता हूं। मुझे मुख्य रूप से विंडोज एक्सपी में दिलचस्पी है, यही कारण है कि मैंने अपने गुगली में नहीं पाया था।
स्टीफन डेने

दुर्भाग्य से मैं जिस Linux वातावरण का उपयोग कर सकता था, उसमें कर्नेल संस्करण 2.6.9 है। drop_caches को कर्नेल 2.6.16 में जोड़ा गया
स्टीफन डेने

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

12

यहां कमांड लाइन की उपयोगिता पाई जा सकती है

स्रोत से:

EmptyStandbyList.exe Windows (Vista और ऊपर) के लिए एक कमांड लाइन उपकरण है जो खाली कर सकता है:

  • प्रक्रिया कार्य सेट,
  • संशोधित पृष्ठ सूची,
  • स्टैंडबाय सूची (प्राथमिकताएँ 0 से 7), या
  • प्राथमिकता 0 स्टैंडबाय सूची केवल।

उपयोग:

EmptyStandbyList.exe workingsets|modifiedpagelist|standbylist|priority0standbylist

3
सभी शोर के बीच उच्च स्तर पर जवाब दिया, सरल उपयोगिता है कि एक काम करता है और यह अच्छी तरह से करता है। आपके उत्तोलन को पाने के लिए आपको उत्तर में अधिक विवरणों को शामिल करना चाहिए।
प्रोमेथियस

4
 #include <fcntl.h>

int posix_fadvise(int fd, off_t offset, off_t len, int advice);

सलाह विकल्प के साथ POSIX_FADV_DONTNEED:
निर्दिष्ट डेटा निकट भविष्य में एक्सेस नहीं किया जाएगा।


केवल लिनक्स और अन्य
पॉज़िक्स के

3

मुझे एक तकनीक मिली है (रिबूट करने के अलावा) जो काम करने लगती है:

  1. की कुछ प्रतियाँ चलाएँ MemAlloc
  2. हर एक के साथ, कई बार मेमोरी के बड़े हिस्से आवंटित करें
  3. सिस्टम कैश आकार को बहुत कम स्तर तक देखने के लिए प्रोसेस एक्सप्लोरर का उपयोग करें
  4. MemAlloc प्रोग्राम से बाहर निकलें

यह हालांकि चयनात्मक नहीं है। आदर्श रूप से मैं उन मेमोरी के विशिष्ट अंशों को साफ करने में सक्षम होना चाहूंगा जिनका उपयोग मैं उन फाइलों के डिस्क ब्लॉक को कैशिंग के लिए करता हूं जिन्हें मैं अब कैश नहीं करना चाहता।


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

3

विंडोज एक्सपी फाइलसिस्टम कैश के बहुत बेहतर दृश्य के लिए - टिम मेर्गेंट द्वारा एटीएम का प्रयास करें - यह आपको फाइलसिस्टम कैश वर्किंग सेट आकार और स्टैंडबाई सूची आकार दोनों को अधिक विस्तृत और सटीक दृश्य में देखने की अनुमति देता है। Windows XP के लिए - आपको ATM के पुराने संस्करण 1 की आवश्यकता है जो V2 और V3 के बाद से यहां डाउनलोड के लिए उपलब्ध है Server 2003, Vista या उच्चतर की आवश्यकता है।

आप देखेंगे कि हालांकि सिसिन्टर्नल्स कैचेस "कैश डब्लूएस मिन" को कम कर देगा - वास्तविक डेटा अभी भी स्टैंडबाय सूचियों के रूप में मौजूद है, जहां से इसका उपयोग तब तक किया जा सकता है जब तक इसे कुछ और के साथ बदल नहीं दिया जाता है। उसके बाद इसे किसी और चीज़ से बदलें जैसे कि विंडोज सर्वर 2003 रिसोर्स किट टूल्स से चाड ऑस्टिन या कंस्यूम। Ex द्वारा मेमऑलोक या फ्लशम जैसे टूल का उपयोग करें ।


0

जैसा कि प्रश्न लिनक्स के लिए भी पूछा गया है, यहां एक संबंधित उत्तर है

कमांड लाइन उपकरण vmtouch अन्य चीजों के अलावा, सिस्टम फ़ाइल कैश से फ़ाइलों और निर्देशिकाओं को जोड़ने और हटाने की अनुमति देता है।


0

एक विंडोज़ एपीआई कॉल है https://docs.microsoft.com/en-us/windows/desktop/api/memoryapi/nf-memoryapi-setsystemfilecaches जो फाइल सिस्टम कैश को फ्लश करने के लिए इस्तेमाल किया जा सकता है। इसका उपयोग कैश आकार को बहुत कम मूल्य तक सीमित करने के लिए भी किया जा सकता है। इस प्रकार के परीक्षणों के लिए एकदम सही लगता है।

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