linux ऑपर लिनक्स में माइक्रोसॉन्ड सटीक(या बेहतर) प्रोसेस टाइमिंग




लिनक्स फाइल सिस्टम (7)

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

मुझे स्पष्ट रूप से एक लिनक्स कर्नेल पैच को याद रखना याद है जो मुझे अपनी प्रक्रियाओं को सटीकता के नैनोसेकेंड के समय देने की इजाजत देता है, सिवाय मैं इसे बुकमार्क करने में भूल गया और मैं पैच का नाम भी भूल गया :(

मुझे याद है कि यह कैसे काम करता है:

हर संदर्भ स्विच पर, यह एक उच्च-रिज़ॉल्यूशन घड़ी के मूल्य को पढ़ता है, और चलने की प्रक्रिया के प्रक्रिया समय में पिछले दो मानों के डेल्टा को जोड़ता है। इससे प्रक्रिया 'वास्तविक प्रक्रिया समय का एक उच्च-रिज़ॉल्यूशन सटीक दृश्य पैदा होता है।

नियमित प्रक्रिया का समय नियमित रूप से घड़ी का उपयोग कर रखा जाता है, जो मुझे विश्वास है कि मिलिसेकंड सटीक (1000 हर्ट्ज), जो मेरे उद्देश्यों के लिए बहुत बड़ा है

क्या किसी को पता है कि मैं किस बारे में बात कर रहा हूँ कर्नेल पैच? मुझे यह भी याद है कि यह एक शब्द पहले या उसके बाद एक पत्र के समान था- कुछ 'आरटीएमर' या कुछ और, लेकिन मुझे बिल्कुल याद नहीं है।

(अन्य सुझाव भी स्वागत है)

पूरी तरह से उचित समयबद्धक का सुझाव दिया गया है कि मार्को ने सुझाव दिया कि मैं क्या देख रहा हूं, लेकिन यह आशाजनक लग रहा है। मेरे पास समस्या यह है कि जिन कॉलों का उपयोग मैं प्रक्रिया समय प्राप्त करने के लिए कर सकता हूं, वे अभी भी ऐसे मूल्यों को नहीं लौट रहे हैं जो दानेदार पर्याप्त हैं

  • बार () मिलीसेकंड में मूल्य 21, 22, लौट रहा है।
  • घड़ी () वापस मूल्य 21000, 22000, वही ग्रैन्युलैरिटी है।
  • getrusage () 21,0002, 22001 (और somesuch) जैसे मूल्यों को वापस कर रहे हैं, वे थोड़ा बेहतर सटीकता देखते हैं, लेकिन मूल्य समान रूप से दिखते हैं।

तो अब मुझे शायद यह समस्या यह है कि कर्नेल में मुझे जो जानकारी है, वह है, मुझे सिस्टम कॉल नहीं पता है जो उसे वापस लौटा देगा।



http://allmybrain.com/2008/06/10/timing-cc-code-on-linux/

आपकी मदद हो सकती है (सीधे अगर आप इसे सी / सी ++ में कर रहे हैं, लेकिन मुझे उम्मीद है कि यह आपको संकेत देगी, भले ही आप नहीं हों) ... यह माइक्रोसकंड सटीकता प्रदान करने का दावा करता है, जो आपके मापदंड से गुजरता है। :)


यदि आपके पास हाल ही में 2.6 कर्नेल है तो आप उच्च परिशुद्धता ईवेंट टाइमर ( एचपीईटी ) का उपयोग कर सकते हैं। इसे प्रयोग करने के तरीके के बारे में दस्तावेज़ीकरण / hpet.txt देखें । यह समाधान प्लेटफॉर्म पर निर्भर है और मेरा विश्वास है कि यह केवल नए x86 सिस्टम पर उपलब्ध है। एचपीईटी में कम से कम एक 10 मेगाहर्ट्ज टाइमर है, इसलिए इसे आपकी आवश्यकताओं को आसानी से फिट करना चाहिए।

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


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

बेशक, जब तक कि आपके प्रोग्राम को दूसरे में लाखों बार चलाने में सक्षम होने की आवश्यकता नहीं होती है, तो शायद यह तेजी से पर्याप्त हो सकता है यदि आप मिलीसेकेंड चलने वाले समय को माप नहीं सकते हैं


कुछ और जानकारी के लिए इस प्रश्न को देखें

ऐसी चीज़ों के लिए मैंने कुछ का उपयोग किया है gettimeofday () यह सेकंड और माइक्रोसकंड्स के साथ एक संरचना प्रदान करता है। इसे कोड से पहले कॉल करें, और फिर से तो बस टाइमरबब का उपयोग करके दो स्ट्रक्चर्स घटाएं, और आप इसे टीवी_यूसेक फ़ील्ड से सेकंड में लेते समय प्राप्त कर सकते हैं।


यदि आप इस स्तर के समय के समाधान की तलाश कर रहे हैं, तो आप शायद कुछ माइक्रो-ऑप्टिमाइजेशन करने की कोशिश कर रहे हैं। अगर ऐसा मामला है, तो आपको पीएपीआई को देखना चाहिए। न केवल यह दीवार-घड़ी और आभासी (प्रक्रिया केवल) समय की जानकारी प्रदान करता है, यह CPU इवेंट काउंटर तक पहुंच प्रदान करता है, जो कि जब आप प्रदर्शन को बेहतर बनाने की कोशिश कर रहे हैं तो अनिवार्य हो सकता है

http://icl.cs.utk.edu/papi/


मुझे लगता है कि मैं कर्नल पैच को ढूंढ रहा था जो मैं ढूंढ रहा था। इसे यहां पोस्ट करना इसलिए मैं इस लिंक को नहीं भूल सकता:

http://user.it.uu.se/~mikpe/linux/perfctr/ http://sourceforge.net/projects/perfctr/

संपादित करें: यह मेरे उद्देश्यों के लिए काम करता है, हालांकि बहुत उपयोगकर्ता के अनुकूल नहीं है





high-resolution