GNU/Linux >> Znalost Linux >  >> Linux

Je příkaz UNIX `time` dostatečně přesný pro benchmarky?

V dnešní době, imo, není důvod používat time pro účely benchmarkingu. Použijte perf stat namísto. Poskytuje vám mnohem užitečnější informace a může opakovat proces srovnávání libovolně zadaný čas a provádět statistiky výsledků, tj. vypočítat rozptyl a střední hodnotu. To je mnohem spolehlivější a stejně snadné použití jako time :

perf stat -r 10 -d <your app and arguments>

-r 10 spustí vaši aplikaci 10krát a provede statistiku. -d vygeneruje další data, jako například chybějící mezipaměť.

Takže zatímco time může být dostatečně spolehlivý pro dlouhotrvající aplikace, rozhodně není tak spolehlivý jako perf stat . Použijte místo toho to.

Dodatek: Pokud opravdu chcete nadále používat time , alespoň nepoužívejte příkaz bash-builtin, ale skutečný obchod v podrobném režimu:

/usr/bin/time -v <some command with arguments>

Výstupem je pak např.:

    Command being timed: "ls"
    User time (seconds): 0.00
    System time (seconds): 0.00
    Percent of CPU this job got: 0%
    Elapsed (wall clock) time (h:mm:ss or m:ss): 0:00.00
    Average shared text size (kbytes): 0
    Average unshared data size (kbytes): 0
    Average stack size (kbytes): 0
    Average total size (kbytes): 0
    Maximum resident set size (kbytes): 1968
    Average resident set size (kbytes): 0
    Major (requiring I/O) page faults: 0
    Minor (reclaiming a frame) page faults: 93
    Voluntary context switches: 1
    Involuntary context switches: 2
    Swaps: 0
    File system inputs: 8
    File system outputs: 0
    Socket messages sent: 0
    Socket messages received: 0
    Signals delivered: 0
    Page size (bytes): 4096
    Exit status: 0

Zvláště si všimněte, jak je to schopné měřit vrchol RSS, což často stačí, pokud chcete porovnat účinek opravy na špičkovou spotřebu paměti. Tj. použijte tuto hodnotu k porovnání před/po a pokud dojde k výraznému poklesu maxima RSS, pak jste udělali něco správně.


time produkuje dostatečně dobré časy pro benchmarky, které trvají déle než jednu sekundu, jinak to trvalo exec() proces může být ve srovnání s jeho dobou běhu velký.

Při srovnávání byste si však měli dávat pozor na přepínání kontextu. To znamená, že jiný proces může používat CPU, čímž soupeří o CPU s vaším benchmarkem a zvyšuje jeho dobu běhu. Abyste se vyhnuli sporům s jinými procesy, měli byste spustit benchmark takto:

sudo chrt -f 99 /usr/bin/time --verbose <benchmark>

Nebo

sudo chrt -f 99 perf stat -ddd <benchmark>

sudo chrt -f 99 spouští váš benchmark ve třídě FIFO v reálném čase s prioritou 99, díky čemuž má váš proces nejvyšší prioritu a zabraňuje přepínání kontextu (můžete změnit /etc/security/limits.conf takže nevyžaduje privilegovaný proces pro použití priorit v reálném čase).

To také dělá time nahlaste všechny dostupné statistiky, včetně počtu kontextových přepnutí, ke kterým došlo ve vašem benchmarku, což by normálně mělo být 0, jinak možná budete chtít benchmark spustit znovu.

perf stat -ddd je ještě informativnější než /usr/bin/time a zobrazuje takové informace, jako jsou instrukce za cyklus, chybějící větve a mezipaměti atd.

A je lepší deaktivovat škálování a zesílení frekvence CPU, aby frekvence CPU zůstala během benchmarku konstantní, abyste získali konzistentní výsledky.


Linux
  1. Unix Less Command:10 tipů pro efektivní navigaci

  2. Sledovat, jak dlouho trvá příkaz v UNIX/LINUX?

  3. Žádná manuálová stránka pro příkaz cd

  1. Naplánujte si úlohu pomocí příkazu Linux at

  2. Průvodce linuxovým terminálem pro začátečníky

  3. 8 tipů pro příkazový řádek Linuxu

  1. Nala:Prettier Frontend pro APT Command

  2. Najděte čas provedení příkazu nebo procesu v systému Linux

  3. Přesměrovat výstup příkazu v „příkazu času“?