Zdravim,
potreboval bych poradit, jestli existuje software (benchmark), ktery by dokazal sledovat beh jineho softwaru, a vyhodnotit, kde lezi limity hardwaru ci nastaveni. Nejlepe nezavisly na platforme. Cilem je ziskat informaci, jakou cast hardware je potreba posilit.
Obecně
profiler, který ukáže kolik času aplikace tráví v které metodě. Profiler sice sám ovlivní dobu běhu, ale může pomoci najít úzké hrdlo.
Dále může pomoci program
spustit na pronajatém serveru, jiném systému, jiném hardware. Pro porovnání. Pronajatý server má výhodu, že si parametry můžete nadiktovat a že je můžete měnit. Ale je potřeba trochu znát vlastnosti daného pronajatého serveru (nedávno se tu řešila např. nevhodnost AWS pro běh Postgres). Někdo pronajímá i bare metal servery, to je možná v daném případě vhodnější. Otázka je, zda vám takový server pronajmou krátkodobě a za kolik.
Software uklada pri zpracovavani hodne malych souboru (~1 milion za 10 minut). Je ve stavajicim stavu limitujici rychlost zapisu na disk a nebo je to v software? Ma se poridit NVMe?
Software nasledne male soubory prohledava, spojuje, zobrazuje. Je limitem pamet? Nebo rychlost cteni/zapis na disk?
Tak to bude asi nejdřív náročné na IOPS a v druhé fázi na CPU nebo RAM.
Software natahuje data z disku na zobrazeni, zabere 20 GB RAM z 64 GB, a pak se (treba zrovna dnes) zasekne. Co mu chybi, kdyz procesor volny je, pamet volna je, disk pracuje na 10% schopnosti?
Software pouziva paralelni procesovani - az do kolika extra vlaken existuje realny prinos?
Pokud je program zaseklý a nevidíte ani přetížení disku, ani zaplnění ram a ani vytížení CPU - ani v userspace (proces programu) ani systemspace (kernel), pak
program buď na něco čeká (síť, zámky na disku...) nebo
hnije synchronizace mezi vlákny (která se blokují...). Pak
nepomůže hrát si s hardware, je potřeba nejdříve
dosáhnout plného vytížení počítače a ideálně vyváženého - IO, RAM, CPU.
Pokud má program nějaké nastavení, kde můžete nastavit, aby program využíval jen jedno vlákno, tak bych program
spustil jen v jednom vlákně a sledoval výkon na jádro. Pak vlákna přidával a sledoval, zda roste propustnost, zda příliš neklesá výkon na jádro a zda dochází k saturaci počítače (CPU, RAM, IO).
Někdy program
odvozuje počet vláken od počtu jader CPU, takže pokud nemá program odpovídající nastavení počtu jader, zkusil bych stejným způsobem omezovat jádra CPU (spuštěním ve virtuálce, nastavením afinity procesu k jádru anebo hardwarovým vypnutím jader). Pokud program používá systémová vlákna, uvidíte je ve výpisu procesů operačního systému, z toho můžete odvodit, jak se ve vztahu k vláknům chová (porovnáváte počet jader CPU vs počet vláken). Pokud program používá vlastní vlákna, budete muset hledat způsob, jak je zobrazit (zde vlákno programu neodpovídá vláknu procesu v operačním systému, pak tedy záleží taky kolik procesů program spouští atd.).
Měl byste uvést co to je za program, v jakém jazyce, v jakém frameworku, zda má nějaké nastavení a zda lze kontaktovat výrobce nebo programátora, který za ním stojí. Plus všechny další okolnosti jako zda využívá program současně nějakou databázi apod.