[linux] strace -o bestand programma, analize

Geert Stappers stappers op stappers.nl
Wo Dec 9 22:01:34 CET 2020


In-Reply-To: <20201209195111.GA4530 op bakunin.xs4all.nl>
On Wed, Dec 09, 2020 at 08:51:11PM +0100, Daniel C. von Asmuth wrote:
> Aldus schreef Paul Slootman op Fri, Dec 04, 2020 at 05:53:07PM +0100:
> > On Fri 04 Dec 2020, Daniel C. von Asmuth wrote:
> > 
> > > > >> > > > > Een manier om zoiets te onderzoeken is met het volgende commando:
> > > > >> > > > >
> > > > >> > > > >         strace -T -o trace.txt vlc
> > 
> > Ik zou er -f bijzetten, dan zie je ook alle threads en evt. geforkte
> > processen.
>  	[...]
> 
> > Hoogstewaarschijnlijk omdat een andere thread iets aan het doen is, wat
> > weten we nu niet. Daar worden zulke futex'en ook voor gebruikt: om
> > threads te synchroniseren.
> 
> Bedankt. Ik heb wat huiswerk gedaan met Harry's strace file:
> 
> 	[...]
> 14031 clone(child_stack=0x7fd26a098f30, flags=CLONE_VM|CLONE_FS|CLONE_FILES|
>       CLONE_SIGHAND|CLONE_THREAD|CLONE_SYSVSEM|CLONE_SETTLS|CLONE_PARENT_SETTID|
>       CLONE_CHILD_CLEARTID, parent_tid=[14035], tls=0x7fd26a099700, 
>       child_tidptr=0x7fd26a0999d0) = 14035 <0.000056>
> 14035 set_robust_list(0x7fd26a0999e0, 24 <unfinished ...>
> 14035 <... set_robust_list resumed>)    = 0 <0.000014>
> 14035 futex(0x5608dbe55f98, FUTEX_WAIT_PRIVATE, 0, NULL <unfinished ...>
> 14031 futex(0x5608dbe55f98, FUTEX_WAKE_PRIVATE, 1) = 1 <0.000006>
> 14035 <... futex resumed>)              = 0 <26.026223>
> 14035 gettid( <unfinished ...>
> 14035 <... gettid resumed>)             = 14035 <0.000012>
> 14035 write(2, "[\33[32;1m00005608dbe55e50\33[0m] ", 30 <unfinished ...>
> 14035 <... write resumed>)              = 30 <0.000008>
> 14035 write(2, "main playlist: \33[0;1m", 21) = 21 <0.000006>
> 14035 write(2, "playlist is empty", 17) = 17 <0.000005>
> 14035 write(2, "\33[0m\n", 5 <unfinished ...>
> 14035 <... write resumed>)              = 5 <0.000008>
> 14035 futex(0x5608dbe55f48, FUTEX_WAKE_PRIVATE, 1 <unfinished ...>
> 14035 <... futex resumed>)              = 0 <0.000021>
> 14035 futex(0x5608dbe55f9c, FUTEX_WAIT_PRIVATE, 0, NULL <unfinished ...>
> 14035 <... futex resumed>)              = 0 <188.225758>
> 14035 futex(0x5608dbe55f48, FUTEX_WAIT_PRIVATE, 2, NULL <unfinished ...>
> 14035 <... futex resumed>)              = 0 <0.000266>
> 14035 openat(AT_FDCWD, "/sys/devices/system/cpu/online", O_RDONLY|O_CLOEXEC <unfinished ...>
> 14035 <... openat resumed>)             = 31 <0.000020>
> 14035 read(31, "0-5\n", 8192)           = 4 <0.000015>
> 14035 close(31 <unfinished ...>
> 14035 <... close resumed>)              = 0 <0.000008>
> 	[...] 
> 
> Dit laat zien hoe het hoofdprogramma 14031 vlak na het opstarten een 
> nieuwe thread 14035 maakt, die vervolgens wacht op futex 0x5608dbe55f98 
> en pas na 26 seconden weer wakker wordt gekust door het hoofdprogramma 
> om daarna de tekst "main playlist: playlist is empty" naar het scherm 
> te schrijven en verder te gaan.... Veel wijzer word ik er ook niet van. 
> Daar heb je de broncode voor nodig...

Er is een tussenvorm:  debug-versie, danwel een ongestripte versie.
(strippen van labels  (niet van kledingstukken))
En is iets voor een eventueele volgende thread

 
> Voor de volledigheid: ik gebruikte de volgende commando's:
> 
> rev trace.txt >out1

Achterste voren


> cut -f 1 -d ' ' out1 >out2

Bewaar wat voor de eerste spatie staat


> rev out2 >out3

Dat weer achterste voren


> tr -d '<>' <out3 >out4

Gooi de vishaken weg


> paste out4 trace.txt >out5

Voeg samen


> sort -n out5 >out6

Sorteer nummeriek


> tail out6

Laat de staart zien


 
> Dan zie je waar de grootste wachttijden waren. 
> 
> Met vriendelijke groet,
> Daniel von Asmuth

Dank voor 'rev' en 'paste' onder de aandacht brengen.


Regards
Geert Stappers
-- 
Silence is hard to parse


Meer informatie over de Linux maillijst