2017-01-03 5 views
0

Ich möchte feststellen, wie viele Anweisungen ein Core benötigt, um einen Prozess zu beenden. Gibt es eine Möglichkeit, das festzustellen? In einem Mikrocontroller können Sie also die Befehlsgröße von Funktionen bestimmen, ich möchte das Gleiche in Linux tun. Danke im Voraus.Bestimmung der Befehlsgröße eines Prozesses/eines Funktionsaufrufs in Linux

EDIT: [gelöst] meisten geeignet, um meine Anwendungen war nur

perf stat -p <pid> 

und

perf stat <command> 
+0

Wie viele Anweisungen würde es dauern, dieses Assemblerprogramm zu beenden: 'jmp $'? –

Antwort

2

Es gibt verschiedene Möglichkeiten, das zu tun:

[]$ readelf -s /usr/lib64/libc.so.6|grep usleep 
    1542: 00000000000f9090 57 FUNC GLOBAL DEFAULT 12 [email protected]@GLIBC_2.2.5 
    1560: 0000000000000000  0 FILE LOCAL DEFAULT ABS usleep.c 
    7073: 00000000000f9090 57 FUNC GLOBAL DEFAULT 12 usleep 

[]$ objdump -t /usr/lib64/libc.so.6|grep usleep 
0000000000000000 l df *ABS* 0000000000000000    usleep.c 
00000000000f9090 g  F .text 0000000000000039    usleep 

[]$ nm -S /usr/lib64/libc.so.6|grep usleep 
00000000000f9090 0000000000000039 T usleep 

Die Größe ist in allen Fällen 0x39 (57) Bytes.

Wenn Sie die Anzahl der Befehle einer gegebenen Funktion möchten, können Sie immer noch verwenden objdump:

[]$ objdump -d /usr/lib64/libc.so.6 | perl -ne 'BEGIN { $/="\n\n" }; print if $_ =~ /usleep/;' 

... wird die Demontage Liste. Für die genaue Anzahl der Anweisung müssen Sie die Linie subtrahieren zählen:

[]$ echo $(objdump -d /lib32/libc.so.6 | perl -ne 'BEGIN { $/="\n\n" }; print if $_ =~ /usleep/;'|wc -l)-2| bc -l 

Für eine dynamische Lösung können Sie perf stat verwenden:

[]$ perf stat uptime 
10:57:28 up 21 days, 10:30, 4 users, load average: 2.00, 1.98, 2.16 

Performance counter stats for 'uptime': 

      0.719094  task-clock (msec)   # 0.802 CPUs utilized   
       0  context-switches   # 0.000 K/sec     
       0  cpu-migrations   # 0.000 K/sec     
       123  page-faults    # 0.171 M/sec     
     2,297,093  cycles     # 3.194 GHz      
    <not supported>  stalled-cycles-frontend 
    <not supported>  stalled-cycles-backend 
     1,985,122  instructions    # 0.86 insns per cycle   
      389,193  branches     # 541.227 M/sec     
      15,847  branch-misses    # 4.07% of all branches   

     0.000896079 seconds time elapsed 

Wenn Sie einen Befehl ein paar Mal laufen werden Sie sehr wahrscheinlich, dass die Werte zwischen Läufen schwanken. Daher ist dies keine exakte Wissenschaft.

+0

Hallo, danke für deine Antwort. Täusche ich mich oder die Größe sollte keine Einheit sein? Ich meine, ich möchte die Instruktionszählung erhalten. Ist das möglich? – mozcelikors

+0

Entschuldigung. Ich habe meine Antwort erweitert. – FrodeTennebo

+0

Vielen Dank. Eine weitere Sache bitte, für Python oder andere Apps, die von Terminal über einen Befehl ausgeführt wird, wie finde ich die Befehlsanzahl wissen Sie? Danke .. – mozcelikors

Verwandte Themen