2011-01-24 17 views
8
  1. यह lseek(fd,0) प्रयोग सुरक्षित है और इसके बजाय यह फिर से खोलने के लिए इस फ़ाइल अगली बार के अद्यतन सामग्री प्राप्त करने के लिए की फ़ाइल तो read(fd,buf)/proc/stat के लिए?
  2. और mmap() इस फ़ाइल को खोलने के बाद कॉल वास्तव में क्या करता है (नीचे देखें)?

मुझे जिस समस्या का सामना करना पड़ रहा है वह यह है कि शीर्ष रिपोर्ट बहुत कम CPU उपयोग (सॉफ़्टवेयर इंटरप्ट्स के लिए 10% बनाम 100%) है। स्ट्रेस इंगित करता है कि शीर्ष इस फ़ाइल को दोबारा नहीं खोलता है बल्कि इसके बजाय शुरू करने और इसे एक बार फिर से पढ़ता है। और किसी भी तरह से इस फ़ाइल से अगली बार जो सामग्री पढ़ी जाती है, उससे मेल नहीं खाती है जब मैं /proc/stat फ़ाइल के लिए बिल्ली चलाता हूं।इसे सुरक्षित lseek उपयोग करने के लिए है() जब प्रोक-एफएस से पढ़ने दूसरी बार फ़ाइलें

इसके अलावा अगर मैं एक ही समय तो कम से एक पाश में ऊपर और बिल्ली /proc/stat चलाने शीर्ष सही सीपीयू उपयोग रिपोर्ट करने के लिए शुरू होता है। जबकि cat कि ऐसा नहीं करता है

एक और अंतर मैं जगह है, जिसमें शीर्ष दाईं ओर /proc/stat फ़ाइल खोलने के बाद mmap() कॉल का उपयोग करता है। मुझे यकीन है कि अगर यह भी (यहाँ क्योंकि filesdes=-1) मेरी समस्या के साथ संबंधित हो सकता है नहीं कर रहा हूँ:

mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f7b37649000 

मैं 2.6.32-27-सर्वर छवि के साथ Ubuntu 10.04.1 डेस्कटॉप संस्करण का उपयोग कर रहा हूँ। सीपीयू इंटेल Q6600 है।

उत्तर

4

यह बहुत दिलचस्प है कि आप क्या पूछते हैं ... मैं अपनी मशीन में जांच करना शुरू करता हूं लेकिन मुझे बिल्ली/proc/stat के बीच अंतर नहीं दिखता है और शीर्ष निष्पादित नहीं होता है। वैसे भी, मैं काम पर हूं और परीक्षण करने के लिए मैं पूरी तरह से 'मुक्त' नहीं हूं।

नए डेटा को पढ़ने के लिए खुले फ़ाइल को 'रीफ्रेश' करने का वर्णन करने का तरीका सही है ... एक [एफ | एल] तलाश() कॉल के अंत में और फिर फ़ाइल की शुरुआत के लिए अपडेट होगा ईओएफ और नया डेटा पढ़ा जाएगा।

मुझे नहीं लगता कि mmap() कॉल आपके द्वारा उल्लिखित समस्या का कारण बन जाएगा, यह तेजी से पढ़ सकता है, लेकिन कुछ भी नहीं (मुझे 100% निश्चित नहीं है)।

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

अब, अपने वास्तविक सवालों का जवाब दे:

  1. हाँ, AFAIK यह क्योंकि तुम जाएगा नए डेटा के लिए फ़ाइल पर 'इंतज़ार कर' और इसे खोलने के लिए की तुलना में बेहतर हो सकता है और फ़ाइल हर समय बंद हो जाना चाहिए यकीन है ।

  2. यह प्रक्रिया पता स्थान के लिए एक फ़ाइल के नक्शे, यहाँ कुछ जानकारी और उदाहरण हैं:

http://www.gnu.org/s/libc/manual/html_node/Memory_002dmapped-I_002fO.html http://www.linuxquestions.org/questions/programming-9/mmap-tutorial -cc-511265/

+0

यह lseek के बारे में सच है। ऐसा लगता है कि इसे पढ़ने से पहले प्रत्येक बार फिर से/proc/stat फ़ाइल को फिर से खोलने के लिए htop लागू किया गया है, लेकिन इस बीच htop भी अमान्य cpu-use की रिपोर्ट करता है। तो हम शायद lseek() बाहर शासन कर सकते हैं। –

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