Linux:
Linuxové jádro má pro tuto věc skvělou implementaci a má mnoho funkcí/nastavení určených ke správě prostředků pro běžící proces (přes CPU guvernéry, sysctl nebo cgroup), v takové situaci je vyladění těchto nastavení spolu s úpravou swapu (je-li požadováno) doporučeno, v zásadě přizpůsobíte výchozí provozní režim vašemu spotřebiči.
Benchmark, zátěžové testy a situační analýza po aplikaci změn jsou nutností zejména na produkčních serverech. Zvýšení výkonu může být velmi důležité, když se nastavení jádra přizpůsobí potřebnému použití, na druhou stranu to vyžaduje testování a dobré pochopení různých nastavení, což je pro správce časově náročné.
Linux používá guvernory k vyrovnávání zátěže CPU zdrojů mezi běžící aplikací, k dispozici je mnoho guvernorů; v závislosti na jádře vašeho distra nemusí být některý guvernér k dispozici (je možné provést přebudování jádra a přidat chybějící nebo neodchozí guvernéry). můžete zkontrolovat, jaký je aktuální guvernér, změnit jej a co je v tomto případě důležitější, vyladit jeho nastavení.
Další dokumentace:čtení, průvodce, podobná otázka, frekvenční škálování, výběr regulátoru, regulátoru výkonu a cpufreq.
SysCtl:
Sysctl je nástroj pro zkoumání a změnu parametrů jádra za běhu, úpravy lze provést trvale pomocí konfiguračního souboru /etc/sysctl.conf
, toto je důležitá část této odpovědi, protože mnoho nastavení jádra lze změnit pomocí Sysctl, úplný seznam dostupných nastavení lze zobrazit příkazem sysctl -a
, podrobnosti jsou k dispozici v tomto a tomto článku.
Cgroup:
Jádro poskytuje funkci:control groups, které se v této příručce nazývají kratším názvem cgroups. Cgroups umožňují alokovat prostředky, jako je čas CPU, systémová paměť, šířka pásma sítě nebo kombinace těchto prostředků, mezi uživatelem definované skupiny úloh (procesů) běžících v systému. Můžete monitorovat cgroups, které konfigurujete, odepřít cgroups přístup k určitým zdrojům a dokonce své cgroups dynamicky překonfigurovat na běžícím systému. Službu cgconfig (control group config) lze nakonfigurovat tak, aby se spouštěla při startu a obnovila vaše předdefinované cgroups, čímž je udrží trvalé i po restartu.
Zdroj, další čtení a otázka k věci.
Ram:
To může být užitečné, pokud má systém omezené množství paměti RAM. Swap systém lze upravit podle procesu nebo pomocí nastavení swappiness. V případě potřeby lze zdroje (ram) omezit na proces pomocí ulimit (používá se také k omezení jiných zdrojů).
Disk:
Nastavení diskových I/O (I/O Scheduler) lze změnit, stejně jako velikost clusteru.
Alternativy:
Jiné nástroje jako nice, cpulimit, cpuset, taskset nebo ulimit lze použít jako alternativu.
Nejlepší odpovědí na to je "vysát to a vidět"... proveďte nějaké zátěžové testy a uvidíte, co dává nejlepší výsledky. Je to proto, že velmi drobné nuance v chování vašich vláken mohou způsobit rozdíly ve výkonu.
Následující z velké části založené na mé vlastní zkušenosti...
Kde začít?
Schopnost Linuxu zabránit hladovění vláken je docela dobrá. Nemusí to nutně znamenat, že každé vlákno získá rovnoměrný podíl na koláči, ale všechna vlákna získají alespoň nějaký koláč. Pokud máte dvě vlákna, která bojují o čas procesoru... řekněme, že jedno se snaží využít 100 % CPU a druhé se snaží využít pouze 10 %... pak se nedivte, že se to vyrovná na 91 % a 9 % nebo někde jinde. kolem toho.
Celkový výkon se může snížit tam, kde je konkrétní zdroj těžký více než předplaceno. To platí zejména pro disk IO na rotujících pevných discích. Hlava se musí fyzicky pohybovat (hledat) mezi místy na disku a neustále oscilace mezi různými soubory může způsobit výrazné zpomalení. Tento efekt je však často poměrně malý, pokud je jedno vlákno silně vázáno IO a jiné by chtělo udělat trochu IO.
Tyto dvě věci dohromady znamenají, že je často lepší být o 20 % více než upsaní než 20 % méně. Jinými slovy, nevyhrazujte si čas procesoru pro vlákna, která se nesnaží příliš zatěžovat procesor.
Např.:Pokud máte vlákna vázaná na CPU a měli jste vlákna IO vázaná na disku a máte 8 jader a 1 pevný disk, pak začněte s 8 vláken vázaných na CPU a jedno vlákno vázané IO pevného disku. 7 a 1 mohou nechat jádro většinu času nečinné. 8 a 1 téměř jistě nebudou hladovět HD vlákno, což znamená, že plně využijete HD i CPU.
Nebezpečí krátkých vláken
Jen si dejte pozor, že Linux se může potýkat s hodně krátkotrvajících vláken. To je zjevnější u záměrných pokusů poškodit systém. Ale neustále vznikající vlákna/procesy mohou přimět Linux, aby se choval špatně.
Ve své otázce jste popsali vyhrazená pracovní vlákna, která zní jako vlákna s dlouhou životností. To zní jako správný přístup.
The London Bus Effect
Čekáte půl hodiny na autobus a pak přijede 5 najednou. To se děje proto, že cestující nastupující do předního autobusu jej zpomalují. Nedostatek cestujících v pozdějších autobusech je zrychluje, což způsobuje hromadný efekt.
Stejný problém může existovat u vláken, zejména u vláken, která bojují o zdroje. Pokud máte vlákna, která se předvídatelně střídají mezi úkoly, například čtením z jednoho disku a zápisem na druhý, pak mohou mít tendenci se shlukovat, spíše než se náhodně rozptýlit, jak byste očekávali. Takže jeden zdroj může zpomalit používání jiného. Z tohoto důvodu může být někdy lepší úkoly vlákna dále rozdělit.
cgroups
Vyhnu se přílišným podrobnostem. Ale měl bych zmínit, že Linux má schopnost zvanou „cgroups“, která vám umožňuje seskupovat procesy a omezovat jejich společné zdroje. To může být velmi užitečné při dalším ladění výkonu.
Zde je o nich krátká diskuze. Ale doporučil bych vám, abyste strávili trochu času na Googlu, abyste viděli jejich plné schopnosti, protože vám mohou z dlouhodobého hlediska pomoci.