/ / Môže Unixový časový príkaz prekážať spustenému programu? - bash, unix, čas, dacapo

Môže unixový časový príkaz zasahovať do bežiaceho programu? - bash, unix, čas, dacapo

z túto odpoveď na príkaze Time Unix dostanem základnú myšlienkuako funguje čas. Vidlica nový proces a vykonanie príkazu v tomto novom procese. Stretol som sa však so správaním, ktorému nie som schopný porozumieť.

Snažím sa vyprofilovať lusearch, referenčná hodnota Porovnávacia sada DaCapo. Chcem ho spustiť s rôznymi konfiguráciami (počet vlákien a počet iterácií), ignorovať výstup benchmarku a použiť čas zaznamenávať reálny, používateľský a systémový čas. Pri veľkej väčšine konfigurácií môj skript funguje dobre, spúšťa test a zaznamenáva čas.

S jednou konkrétnou konfiguráciou (veľká množina údajov,dve vlákna a desať iterácií), referenčná hodnota niekedy nedosiahne ukončenie (80% prípadov, z takmer 100 predbežných). Toto je príkaz, ktorý používam na jeho spustenie:

(time -p java -jar DaCapo.jar lusearch -s large -t 2 -i 10
>/dev/null 2>/dev/null) 2>&1 | awk "{print $2 $4 $6}" > timed &

Ak však nepripravím čas, testovacie obdobie sa na 100% zastaví (tiež asi v 100 predbežných prípadoch):

(java -jar DaCapo.jar lusearch -s large -t 2 -i 10 >/dev/null 2>/dev/null)

Toto správanie sa deje iba s touto referenčnou hodnotou -a s touto konfiguráciou -, zatiaľ čo v prípade, že by bol profil nejakého iného benchmarku alebo by sa použil iný počet vlákien alebo iný počet iterácií, nevidím, aby sa dialo to isté. Myslím, že by to malo súvisieť s niečím, čo je čas zásah do referenčnej hodnoty.

Nechápem, ako by fork + exec mohol zmeniťreferenčné správanie. Je niečo konkrétne, čo to môže spôsobiť? Napríklad: využíva čas nejaký zdroj, ktorý chce použiť aj benchmark? Robím pri zavádzaní benchmarku niečo zlé?

odpovede:

1 pre odpoveď č. 1

„Nedosahuje ukončenie“ je dosť vágne. Zmeškáte akékoľvek chybové správy, pretože posielate všetko na /dev/null. Je nemožné dať jednoznačnú odpoveď bez toho, aby ste vedeli čokoľvek o tom, čo tento program robí, žiadne chybové správy, spätná väzba.

Jediný skutočný rozdiel, na ktorý si myslím, je, že ho v druhom prípade nepodkladám. Bash s určitými kombináciami rúrok a presmerovaní nepresmerováva /dev/null implicitne stdinovať na pozadí. Je možné, že niektorá časť programu je na to citlivá. Pozri môj vitríny pre niektoré príklady, kde je výslovné presmerovaniepožadovaný. Bash tu úplne nenásleduje POSIX a líši sa od všetkých ostatných shellov určitými kombináciami asynchrónnych zoznamov, rúrok a presmerovaní.

Vážne pochybujem, že to má niečo spoločné time. Ak tu nedostanete lepšiu odpoveď, môžete sa opýtať na zoznam pomocných programov, ale bez lepších informácií sa im lepšie nedarí.