Linux perf kasutamine

Allikas: Imre kasutab arvutit
Mine navigeerimisribaleMine otsikasti

Sissejuhatus

TODO

Tööpõhimõte

Linux perf lahendus koosneb

  • tuuma perf tugi
  • kasutaja perf utiliit
  • abistavad skriptid perf utiliidi kasutamise lihtsustamiseks (nt execsnoop)

Kuna Ubuntu operatsioonisüsteemiga on võimalik kasutada erinevaid tuuma versioone ja perf lahenduse tuuma ja userspace osad on omavahel tihedalt seotud, siis jagatakse perf utiliiti nö per tuuma versioon sarnase versiooninumbri pakettidena, nt 2018 kevadel Ubuntu v. 16.04 jaoks

linux-tools-generic - v. 4.4.0
linux-tools-generic-hwe-16.0 - v. 4.13.0
linux-tools-generic-hwe-16.04-edge - v. 4.15.0

Paigaldamine

Linux perf nö üldosa paigaldamiseks sobib öelda

# apt-get install linux-tools-generic

mille tulemusena paigaldatakse mitmeid pakette ja tekitatakse failisüsteemi

  • programm /usr/bin/perf mida käivitab kasutaja, mis on skript ja leiab nö õige binary faili (/usr/lib/linux-tools-4.15.0-20/perf) automaatselt üles
# dpkg -S /usr/bin/perf 
linux-tools-common: /usr/bin/perf
  • perf kasutamist lihtsustavad utiliidid (alternatiiv on kopeerida githubist)
# apt-get install perf-tools-unstable

mille tulemusena tekib failisüsteemi

  • lingid ja nö pärid perf binary
# dpkg -S /usr/lib/linux-tools-4.15.0-20/perf /usr/lib/linux-tools/4.15.0-20-generic/perf
linux-tools-4.15.0-20: /usr/lib/linux-tools-4.15.0-20/perf
linux-tools-4.15.0-20-generic: /usr/lib/linux-tools/4.15.0-20-generic/perf

# ls -ld /usr/lib/linux-tools-4.15.0-20/perf /usr/lib/linux-tools/4.15.0-20-generic/perf
lrwxrwxrwx 1 root root      32 apr   24 07:56 /usr/lib/linux-tools/4.15.0-20-generic/perf -> ../../linux-tools-4.15.0-20/perf
-rwxr-xr-x 1 root root 5549944 apr   24 07:56 /usr/lib/linux-tools-4.15.0-20/perf

Kasutamine - ehe perf

Misc

# perf top -a

Kasutamine - perf-tools-unstable utiliidid

execsnoop

Execsnoop http://www.brendangregg.com/blog/2014-07-28/execsnoop-for-linux.html jälgib sellised fork'imisi mis jätkuvad exec'iga, nt käivitades nii

# execsnoop-perf 
Tracing exec()s. Ctrl-C to end.
Instrumenting sys_execve
   PID   PPID ARGS
 28288  28284 gawk -v o=1 -v opt_name=0 -v name= -v opt_duration=0 [...]
 28289  28287 cat -v trace_pipe
 28294  28275 ping moraal.ee
 ...

trace-cmd - 2025 täiendused

Nt ruutingu toimumise vaatlemine

root@pwrk-02:~# rm trace.dat

root@pwrk-02:~# trace-cmd record -e all ping -c 1 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=116 time=7.99 ms

--- 8.8.8.8 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 7.993/7.993/7.993/0.000 ms
CPU0 data recorded at offset=0x221000
    1632 bytes in size (8192 uncompressed)
CPU1 data recorded at offset=0x222000
    1135 bytes in size (4096 uncompressed)
CPU2 data recorded at offset=0x223000
    1624 bytes in size (8192 uncompressed)
CPU3 data recorded at offset=0x224000
    27557 bytes in size (172032 uncompressed)

root@pwrk-02:~# trace-cmd report | grep fib_table_
            ping-2455  [003] 63659.949601: fib_table_lookup:     table 254 oif 0 iif 1 proto 17 0.0.0.0/39450 -> 8.8.8.8/1025 tos 0 scope 0 flags 0 ==> dev enp6s19 gw 192.168.10.254/:: err 0
            ping-2455  [003] 63659.949603: fib_table_lookup:     table 254 oif 0 iif 1 proto 17 192.168.10.158/39450 -> 8.8.8.8/1025 tos 0 scope 0 flags 0 ==> dev enp6s19 gw 192.168.10.254/:: err 0
            ping-2455  [003] 63659.949675: fib_table_lookup:     table 254 oif 0 iif 1 proto 1 0.0.0.0/0 -> 8.8.8.8/0 tos 0 scope 0 flags 0 ==> dev enp6s19 gw 192.168.10.254/:: err 0
          <idle>-0     [001] 63659.957668: fib_table_lookup:     table 254 oif 0 iif 3 proto 0 8.8.8.8/0 -> 192.168.10.158/0 tos 0 scope 0 flags 0 ==> dev enp6s19 gw 0.0.0.0/:: err 0
          <idle>-0     [001] 63659.957669: fib_table_lookup:     table 254 oif 0 iif 1 proto 0 192.168.10.158/0 -> 8.8.8.8/0 tos 0 scope 0 flags 0 ==> dev enp6s19 gw 192.168.10.254/:: err 0

kus

  • esmalt kustutatakse eelmise korra trace.dat fail
  • käivitatakse trace-cmd ühe argumendina esitatud käsk, mille tegevust uuritakse
  • küsitakse fib_table osakonna tegevusi - paistab midagi mis on seotud ruutinguga, ja ruuting on kerneli element küll (st mitte user-space element)
root@pwrk-02:~# ip rule list
0:	from all lookup local
32766:	from all lookup main
32767:	from all lookup default

root@pwrk-02:~# cat /etc/iproute2/rt_tables
#
# reserved values
#
255	local
254	main
253	default
0	unspec
#
# local
#
#1	inr.ruhep

Kasulikud lisamaterjalid

Kasulikud lisamaterjalid