Perf- Linux-നുള്ള ഒരു പെർഫോമൻസ് മോണിറ്ററിംഗ് ആൻഡ് അനാലിസിസ് ടൂൾ


കമ്പ്യൂട്ടിംഗിലെ പ്രകടനത്തെക്കുറിച്ച് നമ്മൾ സംസാരിക്കുമ്പോൾ, ഞങ്ങളുടെ ഉറവിടങ്ങളും ഒരു നിശ്ചിത കാലയളവിൽ പൂർത്തിയാക്കാൻ അനുവദിക്കുന്ന ജോലികളും തമ്മിലുള്ള ബന്ധത്തെ ഞങ്ങൾ പരാമർശിക്കുന്നു.

കമ്പനികൾ തമ്മിലുള്ള കടുത്ത മത്സരത്തിന്റെ ഒരു ദിവസത്തിൽ, നമ്മുടെ കൈവശമുള്ളത് അതിന്റെ കഴിവിന്റെ പരമാവധി എങ്ങനെ ഉപയോഗിക്കാമെന്ന് പഠിക്കേണ്ടത് പ്രധാനമാണ്. ഹാർഡ്uവെയറിന്റെയോ സോഫ്uറ്റ്uവെയർ വിഭവങ്ങളുടെയോ പാഴാക്കൽ, അല്ലെങ്കിൽ അവ എങ്ങനെ കൂടുതൽ കാര്യക്ഷമമായി ഉപയോഗിക്കണമെന്ന് അറിയാനുള്ള കഴിവിന്റെ അഭാവം, നമ്മുടെ ഗെയിമിന്റെ മുകളിൽ ആയിരിക്കണമെങ്കിൽ താങ്ങാൻ കഴിയാത്ത ഒരു നഷ്ടമായി അവസാനിക്കുന്നു.

അതേ സമയം, നിരന്തരമായ ഉപയോഗം പരിഹരിക്കാനാകാത്ത നാശം വരുത്തുന്ന ഒരു പരിധിയിലേക്ക് നമ്മുടെ വിഭവങ്ങൾ കൊണ്ടുപോകാതിരിക്കാൻ നാം ശ്രദ്ധിക്കണം.

ഈ ലേഖനത്തിൽ, താരതമ്യേന പുതിയ ഒരു പ്രകടന വിശകലന ഉപകരണം ഞങ്ങൾ നിങ്ങളെ പരിചയപ്പെടുത്തുകയും ഹാർഡ്uവെയറും ആപ്ലിക്കേഷനുകളും ഉൾപ്പെടെ നിങ്ങളുടെ ലിനക്സ് സിസ്റ്റങ്ങൾ നിരീക്ഷിക്കാൻ ഉപയോഗിക്കാവുന്ന നുറുങ്ങുകൾ നൽകുകയും ചെയ്യും. അവ പ്രവർത്തിക്കുന്നുണ്ടെന്ന് ഉറപ്പാക്കാൻ ഇത് നിങ്ങളെ സഹായിക്കും, അതുവഴി വിഭവങ്ങളോ നിങ്ങളുടെ സ്വന്തം ഊർജ്ജമോ പാഴാക്കാതെ നിങ്ങൾക്ക് ആവശ്യമുള്ള ഫലങ്ങൾ ഉണ്ടാക്കാൻ കഴിയും.

ലിനക്സിൽ പെർഫ് അവതരിപ്പിക്കുകയും ഇൻസ്റ്റാൾ ചെയ്യുകയും ചെയ്യുന്നു

മറ്റുള്ളവയിൽ, ലിനക്സ് ഒരു പെർഫോമൻസ് മോണിറ്ററിംഗ്, അനാലിസിസ് ടൂൾ പ്രദാനം ചെയ്യുന്നു. നിങ്ങൾക്ക് ഇതിനകം പരിചിതമായ മറ്റ് അറിയപ്പെടുന്ന ഉപകരണങ്ങളിൽ നിന്ന് പെർഫിനെ വേർതിരിക്കുന്നത് എന്താണ്?

സിപിയുവിലെ പെർഫോമൻസ് മോണിറ്ററിംഗ് യൂണിറ്റിലേക്ക് പെർഫ് ആക്uസസ് നൽകുന്നു, അതിനാൽ ഹാർഡ്uവെയറിന്റെ സ്വഭാവവും അതുമായി ബന്ധപ്പെട്ട ഇവന്റുകളും സൂക്ഷ്മമായി പരിശോധിക്കാൻ ഞങ്ങളെ അനുവദിക്കുന്നു എന്നതാണ് ഉത്തരം.

കൂടാതെ, ഇതിന് സോഫ്റ്റ്uവെയർ ഇവന്റുകൾ നിരീക്ഷിക്കാനും ശേഖരിക്കുന്ന ഡാറ്റയിൽ നിന്ന് റിപ്പോർട്ടുകൾ സൃഷ്ടിക്കാനും കഴിയും.

ഇനിപ്പറയുന്നവ ഉപയോഗിച്ച് നിങ്ങൾക്ക് RPM-അടിസ്ഥാന വിതരണങ്ങളിൽ perf ഇൻസ്റ്റാൾ ചെയ്യാൻ കഴിയും:

# yum update && yum install perf     [CentOS / RHEL / Fedora]
# dnf update && dnf install perf     [Fedora 23+ releases]

ഡെബിയനിലും ഡെറിവേറ്റീവുകളിലും:

# sudo aptitude update && sudo aptitude install linux-tools-$(uname -r) linux-tools-generic

മുകളിലെ കമാൻഡിലെ uname -r യഥാർത്ഥ പതിപ്പിന് പുറമെ അധിക സ്ട്രിംഗുകൾ നൽകുന്നുവെങ്കിൽ (എന്റെ കാര്യത്തിൽ 3.2.0-23-generic), പകരം നിങ്ങൾ linux-tools-3.2.0-23 എന്ന് ടൈപ്പ് ചെയ്യേണ്ടി വന്നേക്കാം. uname എന്നതിന്റെ ഔട്ട്പുട്ട് ഉപയോഗിക്കുന്നതിന്റെ.

XEN-ന് മുകളിൽ ഒരു ഗസ്റ്റിൽ പ്രവർത്തിപ്പിക്കുമ്പോൾ perf അപൂർണ്ണമായ ഫലങ്ങൾ നൽകുന്നു എന്നതും ശ്രദ്ധിക്കേണ്ടതാണ്.

കൂടാതെ, ചില പെർഫ് കമാൻഡുകൾ ഡിഫോൾട്ടായി റൂട്ടിലേക്ക് പരിമിതപ്പെടുത്തിയിരിക്കാമെന്നത് ഓർക്കുക, ഇത് ചെയ്തുകൊണ്ട് (സിസ്റ്റം റീബൂട്ട് ചെയ്യുന്നതുവരെ) പ്രവർത്തനരഹിതമാക്കാം:

# echo 0 > /proc/sys/kernel/perf_event_paranoid

നിങ്ങൾക്ക് പാരനോയിഡ് മോഡ് ശാശ്വതമായി പ്രവർത്തനരഹിതമാക്കണമെങ്കിൽ, /etc/sysctl.conf ഫയലിൽ ഇനിപ്പറയുന്ന ക്രമീകരണം അപ്ഡേറ്റ് ചെയ്യുക.

kernel.perf_event_paranoid = 0

നിങ്ങൾ perf ഇൻസ്റ്റാൾ ചെയ്തുകഴിഞ്ഞാൽ, ലഭ്യമായ ഉപകമാൻഡുകളുടെ ഒരു ലിസ്റ്റിനായി നിങ്ങൾക്ക് അതിന്റെ മാൻ പേജ് റഫർ ചെയ്യാം (സിസ്റ്റത്തിലേക്ക് ഒരു പ്രത്യേക വിൻഡോ തുറക്കുന്ന പ്രത്യേക ഓപ്ഷനുകളായി നിങ്ങൾക്ക് സബ്uകമാൻഡുകൾ ചിന്തിക്കാം). മികച്ചതും കൂടുതൽ പൂർണ്ണവുമായ ഫലങ്ങൾക്കായി, റൂട്ട് ആയി അല്ലെങ്കിൽ സുഡോ വഴി perf ഉപയോഗിക്കുക.

perf ലിസ്റ്റ് (ഓപ്uഷനുകളില്ലാതെ) എല്ലാ പ്രതീകാത്മക ഇവന്റ് തരങ്ങളും (നീണ്ട ലിസ്റ്റ്) നൽകുന്നു. ഒരു നിർദ്ദിഷ്uട വിഭാഗത്തിൽ ലഭ്യമായ ഇവന്റുകളുടെ ലിസ്റ്റ് നിങ്ങൾക്ക് കാണണമെങ്കിൽ, വിഭാഗത്തിന്റെ പേര് ([hw|sw|cache|tracepoint|pmu|event_glob]) ശേഷം perf ലിസ്റ്റ് ഉപയോഗിക്കുക:

Linux-ൽ സോഫ്റ്റ്uവെയർ മുൻകൂട്ടി നിശ്ചയിച്ച ഇവന്റുകളുടെ ലിസ്റ്റ് പ്രദർശിപ്പിക്കുക:

# perf list sw 

perf stat ഒരു കമാൻഡ് പ്രവർത്തിപ്പിക്കുകയും അത്തരം കമാൻഡ് നടപ്പിലാക്കുന്ന സമയത്ത് Linux പ്രകടന സ്ഥിതിവിവരക്കണക്കുകൾ ശേഖരിക്കുകയും ചെയ്യുന്നു. നമ്മൾ dd പ്രവർത്തിപ്പിക്കുമ്പോൾ നമ്മുടെ സിസ്റ്റത്തിൽ എന്താണ് സംഭവിക്കുന്നത്?

# perf stat dd if=/dev/zero of=test.iso bs=10M count=1

മുകളിൽ കാണിച്ചിരിക്കുന്ന സ്ഥിതിവിവരക്കണക്കുകൾ സൂചിപ്പിക്കുന്നത്, മറ്റ് കാര്യങ്ങളിൽ:

  1. dd കമാൻഡിന്റെ നിർവ്വഹണത്തിന് 21.812281 മില്ലിസെക്കൻഡ് CPU എടുത്തു. ഈ സംഖ്യയെ താഴെയുള്ള \സെക്കൻഡ് ടൈം ലാപ്uസ്ഡ് മൂല്യം കൊണ്ട് ഹരിച്ചാൽ (23.914596 മില്ലിസെക്കൻഡ്), അത് 0.912 (സിപിയു ഉപയോഗിച്ചു) ലഭിക്കും.
  2. കമാൻഡ് എക്സിക്യൂട്ട് ചെയ്യുമ്പോൾ, 15 സന്ദർഭ-സ്വിച്ചുകൾ (പ്രോസസ് സ്വിച്ചുകൾ എന്നും അറിയപ്പെടുന്നു) സൂചിപ്പിക്കുന്നത്, CPU-കൾ ഒരു പ്രോസസ്സിൽ നിന്ന് (അല്ലെങ്കിൽ ത്രെഡ്) മറ്റൊന്നിലേക്ക് 15 തവണ സ്വിച്ച് ചെയ്തിട്ടുണ്ടെന്ന്.
  3. ഒരു 2-കോർ സിപിയുവിൽ വർക്ക്ലോഡ് കോറുകളുടെ എണ്ണത്തിൽ തുല്യമായി വിതരണം ചെയ്യപ്പെടുമ്പോൾ പ്രതീക്ഷിക്കുന്ന ഫലമാണ് 2 സിപിയു മൈഗ്രേഷനുകൾ.
    ആ സമയത്ത് (21.812281 മില്ലിസെക്കൻഡ്), ആകെ ഉപയോഗിച്ച CPU സൈക്കിളുകളുടെ എണ്ണം 62,025,623 ആയിരുന്നു, ഇത് 0.021812281 സെക്കൻഡ് കൊണ്ട് ഹരിച്ചാൽ 2.843 GHz നൽകുന്നു.
  4. സൈക്കിളുകളുടെ എണ്ണത്തെ മൊത്തം നിർദ്ദേശങ്ങളുടെ എണ്ണം കൊണ്ട് ഹരിച്ചാൽ, ഓരോ നിർദ്ദേശത്തിനും 4.9 സൈക്കിളുകൾ ലഭിക്കും, അതായത് ഓരോ നിർദ്ദേശവും പൂർത്തിയാക്കാൻ ഏകദേശം 5 CPU സൈക്കിളുകൾ എടുത്തു (ശരാശരി). CPU സൈക്കിളുകൾ പാഴാക്കുന്നതോ ദുരുപയോഗം ചെയ്യുന്നതോ ആയ ബ്രാഞ്ചുകളുടെയും ബ്രാഞ്ച്-മിസ്സുകളുടെയും എണ്ണത്തിൽ (ചുവടെ കാണുക) നമുക്ക് ഇതിനെ (ഭാഗികമായെങ്കിലും) കുറ്റപ്പെടുത്താം.
  5. കമാൻഡ് നടപ്പിലാക്കിയപ്പോൾ, ആകെ 3,552,630 ശാഖകൾ നേരിട്ടു. കോഡിലെ ഡിസിഷൻ പോയിന്റുകളുടെയും ലൂപ്പുകളുടെയും CPU-ലെവൽ പ്രാതിനിധ്യമാണിത്. കൂടുതൽ ശാഖകൾ, പ്രകടനം കുറവാണ്. ഇതിന് നഷ്ടപരിഹാരം നൽകാൻ, എല്ലാ ആധുനിക സിപിയുകളും കോഡ് എടുക്കുന്ന ഫ്ലോ പ്രവചിക്കാൻ ശ്രമിക്കുന്നു. 51,348 ബ്രാഞ്ച് മിസ്സുകൾ സൂചിപ്പിക്കുന്നത് പ്രവചന സവിശേഷത 1.45% തെറ്റായിരുന്നു എന്നാണ്.

ഒരു ആപ്ലിക്കേഷൻ പ്രവർത്തിക്കുമ്പോൾ സ്ഥിതിവിവരക്കണക്കുകൾ ശേഖരിക്കുന്നതിനും (അല്ലെങ്കിൽ മറ്റൊരു വിധത്തിൽ പറഞ്ഞാൽ, പ്രൊഫൈലിംഗ്) ഇതേ തത്ത്വം ബാധകമാണ്. ആവശ്യമുള്ള ആപ്ലിക്കേഷൻ സമാരംഭിച്ച് ന്യായമായ സമയത്തിന് ശേഷം (അത് നിങ്ങളുടേതാണ്) അത് അടയ്ക്കുക, കൂടാതെ perf സ്uക്രീനിൽ സ്ഥിതിവിവരക്കണക്കുകൾ പ്രദർശിപ്പിക്കും. ആ സ്ഥിതിവിവരക്കണക്കുകൾ വിശകലനം ചെയ്യുന്നതിലൂടെ നിങ്ങൾക്ക് സാധ്യമായ പ്രശ്നങ്ങൾ തിരിച്ചറിയാൻ കഴിയും.

പെർഫ് ടോപ്പ് ടോപ്പ് കമാൻഡിന് സമാനമാണ്, അതിൽ ഇത് ഏതാണ്ട് തത്സമയ സിസ്റ്റം പ്രൊഫൈൽ പ്രദർശിപ്പിക്കുന്നു (തത്സമയ വിശകലനം എന്നും അറിയപ്പെടുന്നു).

-a ഓപ്uഷൻ ഉപയോഗിച്ച് നിങ്ങൾ അറിയപ്പെടുന്ന എല്ലാ ഇവന്റ് തരങ്ങളും പ്രദർശിപ്പിക്കും, അതേസമയം -e ഓപ്uഷൻ നിങ്ങളെ ഒരു പ്രത്യേക ഇവന്റ് വിഭാഗം തിരഞ്ഞെടുക്കാൻ അനുവദിക്കും (പെർഫ് ലിസ്റ്റ് നൽകുന്നതുപോലെ) :

എല്ലാ സൈക്കിൾ ഇവന്റ് പ്രദർശിപ്പിക്കും.

perf top -a 

സിപിയു-ക്ലോക്കുമായി ബന്ധപ്പെട്ട എല്ലാ ഇവന്റുകളും പ്രദർശിപ്പിക്കും.

perf top -e cpu-clock 

മുകളിലുള്ള ഔട്ട്uപുട്ടിലെ ആദ്യ കോളം, ഫംഗ്uഷൻ ചിഹ്നവും പങ്കിട്ട ഒബ്uജക്uറ്റും ഉപയോഗിച്ച് ഗ്രൂപ്പുചെയ്uത റണ്ണിന്റെ തുടക്കം മുതൽ എടുത്ത സാമ്പിളുകളുടെ ശതമാനത്തെ പ്രതിനിധീകരിക്കുന്നു. മാൻ പെർഫ്-ടോപ്പിൽ കൂടുതൽ ഓപ്ഷനുകൾ ലഭ്യമാണ്.

perf റെക്കോർഡ് ഒരു കമാൻഡ് പ്രവർത്തിപ്പിക്കുകയും സ്റ്റാറ്റിസ്റ്റിക്കൽ ഡാറ്റ നിലവിലെ വർക്കിംഗ് ഡയറക്uടറിക്കുള്ളിൽ perf.data എന്ന ഫയലിലേക്ക് സംരക്ഷിക്കുകയും ചെയ്യുന്നു. ഇത് പെർഫ് സ്റ്റാറ്റിന് സമാനമായി പ്രവർത്തിക്കുന്നു.

ഒരു കമാൻഡിന് ശേഷം പെർഫ് റെക്കോർഡ് ടൈപ്പ് ചെയ്യുക:

# perf record dd if=/dev/null of=test.iso bs=10M count=1

perf റിപ്പോർട്ട് മുകളിലുള്ള perf.data-യിൽ ശേഖരിച്ച ഡാറ്റ ഒരു പ്രകടന റിപ്പോർട്ടായി ഫോർമാറ്റ് ചെയ്യുന്നു:

# sudo perf report

മുകളിലുള്ള എല്ലാ ഉപകമാൻഡുകൾക്കും ഒരു സമർപ്പിത മാൻ പേജ് ഉണ്ട്, അത് ഇനിപ്പറയുന്നതായി അഭ്യർത്ഥിക്കാനാകും:

# man perf-subcommand

ഇവിടെ സബ്uകമാൻഡ് ലിസ്റ്റ്, സ്റ്റാറ്റ്, ടോപ്പ്, റെക്കോർഡ് അല്ലെങ്കിൽ റിപ്പോർട്ട് എന്നിവയാണ്. ഏറ്റവും കൂടുതൽ ഉപയോഗിക്കുന്ന ഉപകമാൻഡുകൾ ഇവയാണ്; മറ്റുള്ളവ ഡോക്യുമെന്റേഷനിൽ പട്ടികപ്പെടുത്തിയിട്ടുണ്ട് (ലിങ്കിനായി സംഗ്രഹ വിഭാഗം കാണുക).

സംഗ്രഹം

ഈ ഗൈഡിൽ ഞങ്ങൾ നിങ്ങളെ Linux-നുള്ള പെർഫോമൻസ് മോണിറ്ററിംഗ്, അനാലിസിസ് ടൂൾ ആയ perf-ലേക്ക് പരിചയപ്പെടുത്തി. https://perf.wiki.kernel.org-ൽ പരിപാലിക്കുന്ന അതിന്റെ ഡോക്യുമെന്റേഷനുമായി പരിചയപ്പെടാൻ ഞങ്ങൾ നിങ്ങളെ വളരെയധികം പ്രോത്സാഹിപ്പിക്കുന്നു.

ഉയർന്ന ശതമാനം ഉറവിടങ്ങൾ ഉപയോഗിക്കുന്ന ആപ്ലിക്കേഷനുകൾ നിങ്ങൾ കണ്ടെത്തുകയാണെങ്കിൽ, സോഴ്uസ് കോഡ് പരിഷ്uക്കരിക്കുന്നത് പരിഗണിക്കുകയോ മറ്റ് ഇതരമാർഗങ്ങൾ ഉപയോഗിക്കുകയോ ചെയ്യാം.

ഈ ലേഖനത്തെക്കുറിച്ച് നിങ്ങൾക്ക് ചോദ്യങ്ങളോ മെച്ചപ്പെടുത്താനുള്ള നിർദ്ദേശങ്ങളോ ഉണ്ടെങ്കിൽ, ഞങ്ങൾ എല്ലാവരും ശ്രദ്ധിക്കും. ചുവടെയുള്ള അഭിപ്രായ ഫോം ഉപയോഗിച്ച് ഞങ്ങളെ ബന്ധപ്പെടാൻ മടിക്കേണ്ടതില്ല.