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