emacs - दुर्भावनापूर्ण इमेक्स लिस्प के प्रोफाइलिंग के लिए टिप्स?
profiling elisp (3)
आपने कोशिश की है: Options->Enter debugger on Quit/Cg
? (यह emacs22 पर है)
यदि आपको emacs की शुरूआत डिबग करने की आवश्यकता है: emacs -q --no-site-file
, अपने site-start.el
(या site-start.el
या जो भी) पर जाएं, मेनू आइटम Options->Enter debugger on Quit/Cg
, और फिर मेनू आइटम Emacs-Lisp->Evaluate buffer
और Cg
Emacs-Lisp->Evaluate buffer
जब यह फ्रीज दिखाई देता है। ऐसा करने का एक आसान तरीका हो सकता है .........
मैं एमैक्स को बहुत पसंद करता हूं I हाल ही में, मैंने अपने .emacs कॉन्फ़िगरेशन को कुछ जोड़ दिया है जो कि छिटपुट रूप से 100% पर मेरी सीपीयू खिसकाता है, लेकिन मैं वास्तव में नहीं जानता कि यह क्या है।
अगर मैं सीजी को कई बार दबाता हूं, अंत में मुझे मिनीबफर से एक संदेश मिल जाएगा जो मुझसे पूछता है कि क्या मैं अपनी फाइलों को स्वत: सहेजना चाहता हूं और अगर मैं पूरी तरह से एमएएमएसी को रद्द करना चाहता हूं अगर मैं नहीं कहता और सीजी दबाकर रखता हूं, अंत में मैं ईएमएक्स को सामान्य रूप से चलाने के लिए वापस मिल सकता हूं। एक घंटे या बाद में यह फिर से होगा
मैं उस तरह जा रहा हूं जैसे मैं हूं, मैंने हाल में जो कुछ भी जोड़ा है, उस पर टिप्पणी करते हुए, emacs को पुनरारंभ करते हुए, अपराधी को कम करने की कोशिश कर रहा था, लेकिन यह धीमी गति से चल रहा है
क्या कोई तरीका है कि मैं एएमएसीएस को प्रत्यक्ष रूप से पता कर सकता हूं कि सीपीयू को किस प्रकार फंटा हुआ है?
यह आपके प्रश्न का उत्तर नहीं है, कड़ाई से बोल रहा है, लेकिन टिप्पणी-आउट-और-रीस्टार्ट करने की बजाय, आप ईकैक्स को -q
विकल्प के साथ शुरू कर सकते हैं, अपने .Emacs को बफ़र में लोड कर सकते हैं और अपने प्रत्येक सेक्सप्रोग्राफ़ को मूल्यांकन कर सकते हैं अपराधी को ट्रैक करने के लिए सीएक्स सीई
debug-on-quit
ऑफ़ सेट debug-on-quit
का सुझाव ताकि आप यह पता कर सकें कि एएमएसीएस क्या कर रहा है, यह एक अच्छा है आप इस बारे में एक नमूने के साथ नमूनाकरण रूपरेखा के एक रूप के रूप में सोच सकते हैं: अक्सर एक एकल नमूना आपको ज़रूरत है
अद्यतन: संस्करण 24.3 के साथ शुरू, Emacs में दो profilers शामिल हैं। Profiler.el में एक (नया) नमूनाकरण प्रोफ़ाइलर है, और elp.el
में एक (पुराने) इंस्ट्रूमेंटिंग प्रोफाइलर है
नमूनाकरण प्रोफाइलर यहाँ प्रलेखित है । यह उपयोग करने के लिए बहुत सरल है:
प्रोफ़ाइलिंग शुरू करने के लिए, टाइप करें
Mx profiler-start
आप प्रोसेसर उपयोग, मेमोरी उपयोग या दोनों के द्वारा प्रोफ़ाइल चुन सकते हैं। कुछ काम करने के बाद, प्रोफ़ाइल के लिए चुने गए प्रत्येक संसाधन के लिए सारांश बफ़र प्रदर्शित करने के लिएMx profiler-report
टाइप करें। जब आप प्रोफाइलिंग समाप्त कर लें, तो टाइप करेंMx profiler-stop
यहां cpu+mem
प्रोफाइलर सत्र से कुछ उदाहरण का उत्पादन किया गया है, जिसे मैं पर्फॉर्सेज / एमैक्स एकीकरण के साथ रखता हूं जो कि मैं बनाए रखता हूं। मैंने यह progn
लिए कि CPU समय और मेमोरी का उपयोग किस तरह से आ रहा है, मैंने सर्वोच्च कार्य ( progn
) का विस्तार किया है ।
Function Bytes %
- progn 26,715,850 29%
- let 26,715,850 29%
- while 26,715,850 29%
- let 26,715,850 29%
- cond 26,715,850 29%
- insert 26,715,850 29%
+ c-after-change 26,713,770 29%
+ p4-file-revision-annotate-links 2,080 0%
+ let 20,431,797 22%
+ call-interactively 12,767,261 14%
+ save-current-buffer 10,005,836 11%
+ while 8,337,166 9%
+ p4-annotate-internal 5,964,974 6%
+ p4-annotate 2,821,034 3%
+ let* 2,089,810 2%
आप देख सकते हैं कि अपराधी c-after-change
, इसलिए ऐसा लगता है कि मैं इस कोड के आस inhibit-modification-hooks
स्थानीय स्तर पर बाध्यकारी inhibit-modification-hooks
द्वारा बहुत सारे CPU समय और स्मृति को बचा सकता हूं।
आप एमैक्स लिस्प प्रोफाइलर का भी उपयोग कर सकते हैं। यह बजाय दस्तावेज़ीकृत है: विवरण के लिए आपको elp.el
में टिप्पणियां elp.el
, लेकिन मूलतः आप elp.el
elp-instrument-package
को चलाने के लिए एक उपसर्ग के साथ सभी फ़ंक्शन के लिए प्रोफाइलिंग चालू करना चाहते हैं, और फिर elp-results
परिणामों को देखने के लिए
Mx elp-instrument-package RET c- RET
c Mx elp-instrument-package RET c- RET
टाइप करने के बाद, 4,000 लाइनें सी टाइप करने के बाद, और फिर elp elp-results
(और कॉल गिनती के अनुसार क्रमबद्ध करने के लिए elp-sort-by-function
टू elp-sort-by-function
का उपयोग करके) के बाद कुछ विशिष्ट आउटपुट दिए गए हैं:
Function Name Call Count Elapsed Time Average Time
============================= ========== ============ ============
c-skip-comments-and-strings 107 0.0 0.0
c-valid-offset 78 0.0 0.0
c-set-offset 68 0.031 0.0004558823
c-end-of-macro 52 0.0 0.0
c-neutralize-CPP-line 52 0.0 0.0
c-font-lock-invalid-string 20 0.0 0.0
c-set-style-1 19 0.031 0.0016315789
...
आपके विशेष मामले में प्रोफाइलर तुरंत मदद नहीं करता है, क्योंकि आपको नहीं पता कि कौन से पैकेज दोष में है लेकिन अगर आप अनुमान लगा सकते हैं (या इसे सुनिश्चित करने के लिए debug-on-quit
थ्रू का इस्तेमाल कर सकते हैं) तो प्रोफ़फ़ेलर आपको इस समस्या का विस्तार करने में मदद कर सकता है।