emacs - दुर्भावनापूर्ण इमेक्स लिस्प के प्रोफाइलिंग के लिए टिप्स?




profiling elisp (3)

मैं एमैक्स को बहुत पसंद करता हूं I हाल ही में, मैंने अपने .emacs कॉन्फ़िगरेशन को कुछ जोड़ दिया है जो कि छिटपुट रूप से 100% पर मेरी सीपीयू खिसकाता है, लेकिन मैं वास्तव में नहीं जानता कि यह क्या है।

अगर मैं सीजी को कई बार दबाता हूं, अंत में मुझे मिनीबफर से एक संदेश मिल जाएगा जो मुझसे पूछता है कि क्या मैं अपनी फाइलों को स्वत: सहेजना चाहता हूं और अगर मैं पूरी तरह से एमएएमएसी को रद्द करना चाहता हूं अगर मैं नहीं कहता और सीजी दबाकर रखता हूं, अंत में मैं ईएमएक्स को सामान्य रूप से चलाने के लिए वापस मिल सकता हूं। एक घंटे या बाद में यह फिर से होगा

मैं उस तरह जा रहा हूं जैसे मैं हूं, मैंने हाल में जो कुछ भी जोड़ा है, उस पर टिप्पणी करते हुए, emacs को पुनरारंभ करते हुए, अपराधी को कम करने की कोशिश कर रहा था, लेकिन यह धीमी गति से चल रहा है

क्या कोई तरीका है कि मैं एएमएसीएस को प्रत्यक्ष रूप से पता कर सकता हूं कि सीपीयू को किस प्रकार फंटा हुआ है?


आपने कोशिश की है: 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 जब यह फ्रीज दिखाई देता है। ऐसा करने का एक आसान तरीका हो सकता है .........


यह आपके प्रश्न का उत्तर नहीं है, कड़ाई से बोल रहा है, लेकिन टिप्पणी-आउट-और-रीस्टार्ट करने की बजाय, आप ईकैक्स को -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 थ्रू का इस्तेमाल कर सकते हैं) तो प्रोफ़फ़ेलर आपको इस समस्या का विस्तार करने में मदद कर सकता है।







dot-emacs