GNU/Linux >> Znalost Linux >  >> Linux

3 tipy pro zlepšení výkonu procesů v Linuxu s prioritou a afinitou

[ Poznámka editora:V některých prostředích existují známá omezení připínání CPU, takže si před pokračováním v tomto návodu přečtěte podrobnosti o svém prostředí. ]

Na CPU běží všechny aplikace a nejlepší bude, když pochopíte, jak to funguje a jak můžete vyladit využití CPU, abyste zvýšili výkon svých aplikací.

Moderní systémy mají obvykle více procesorů a jader, které plánovač jádra sdílí mezi veškerým spuštěným softwarem. Normálně se tedy nestaráte o to, který CPU/jádro vaše aplikace nebo proces běží, pokud běží.

Existuje několik způsobů, jak získat více CPU a zajistit, aby vaše aplikace fungovala lépe a fungovala efektivněji. Jedním ze způsobů je použití prioritního ladění pomocí nice /renice příkaz.

[ Také by se vám mohlo líbit: Centrální procesorová jednotka (CPU):Její součásti a funkce ]

Druhým způsobem je svázat aplikaci s jedním nebo více CPU, což se nazývá „připnutí CPU“ nebo „afinita CPU“. Navázání aplikace na konkrétní CPU nebo CPU způsobí, že všechna vlákna nebo podřízené procesy související s aplikací běží na definovaných CPU/CPU. Tímto způsobem omezení procesu/aplikace na jeden nebo více CPU vede k většímu „zahřátí mezipaměti“ nebo „zásahům do mezipaměti“, čímž se zvýší celkový výkon. První výhodou afinity CPU je optimalizace výkonu mezipaměti. Druhou výhodou afinity CPU je, že pokud více vláken přistupuje ke stejným datům, má smysl je všechny provozovat na stejném procesoru – což nám pomáhá minimalizovat vynechání mezipaměti.

Metoda 1 – ladění priority

Změna priority procesu pomocí nice příkaz. Toto je možná nejběžnější známý způsob, jak zlepšit využití procesoru aplikací/procesem.

Unix vždy poskytoval nice() systémové volání pro úpravu priority procesu, které nastavuje příjemnost hodnota. Kladné nice hodnoty mají za následek nižší prioritu procesu (hezčí ) a záporné hodnoty – které může nastavit pouze superuživatel (root) – mají za následek vyšší prioritu.

nice hodnota je i dnes užitečná pro úpravu priority procesu. Vaším úkolem je identifikovat práci s nízkou prioritou, která může zahrnovat monitorovací agenty a plánované zálohy, které upravíte tak, aby začínaly s nice hodnota. Můžete také provést analýzu, abyste ověřili, že ladění je účinné a že latence plánovače zůstává nízká pro práci s vysokou prioritou.

Jak to funguje?

Každému procesu je přidělena určitá doba, po kterou běží na CPU. Skutečná doba, po kterou proces běží na CPU, se nazývá virtuální runtime  procesu. Mimochodem, CPU má tendenci se chovat jako otec a má ve zvyku dělit čas rovnoměrně mezi všechny děti (procesy).

Celkový čas, který proces stráví „na CPU“, je virtuální doba běhu procesu. Operační systém (OS) uchovává záznam tohoto virtuálního běhového prostředí a snaží se všem procesům ve frontě běhu poskytnout stejný čas.

nicerenice nástroje manipulují s tímto virtuálním runtime.

Když krmíte kladné hodnoty pomocí renice /nice příkazy, například - renice +10 PID ručně přidáváte do procesu další virtuální runtime. OS se domnívá, že proces zabral více času virtuálního běhu než jiné procesy ve frontě běhu. Takže v dalším cyklu dává CPU procesu méně času. Proces končí pozdě, protože nyní po renice „na CPU“ zbývá méně času příkaz.

Ale když nakrmíte záporné hodnoty pomocí renice /nice příkazy, například - renice -10 PID , ručně zkracujete virtuální dobu běhu procesu. OS se domnívá, že proces nemá dostatek času „na CPU“ než ostatní procesy ve frontě běhu. V dalším cyklu tedy CPU dává tomuto procesu více času „na CPU“ ve srovnání s jinými procesy ve frontě běhu. Proces skončí rychle.

Metoda 2 – proces vazby

Proces může být vázán na jeden nebo více CPU, což může zvýšit jeho výkon zlepšením teploty mezipaměti nebo zásahy do mezipaměti a místo paměti . V Linuxu se to provádí pomocí taskset příkaz, který může používat masku CPU nebo rozsahy pro nastavení afinity CPU.

Pomocí taskset , zavázali jste proces 6197 tak, aby běžel pouze na CPU 1. To povede k většímu zahřívání mezipaměti/zásahům do mezipaměti. Jiné procesy mohou také běžet na CPU 1, ale proces běží pouze na CPU 1 a CPU 2. Tato konfigurace není trvalá. Pokud se server restartuje nebo se proces restartuje, PID se změní. Tato konfigurace je tedy ztracena.

Lepší způsob je použít „drop-in“ soubor.

Metoda 3 – afinita k procesoru prostřednictvím souboru drop-in

Podle Wikipedie Afinita procesoru nebo Připnutí CPU nebo „afinita mezipaměti“, umožňuje navázání a zrušení vazby procesu nebo vlákna k jednotce centrálního procesoru (CPU) nebo řadě CPU, takže proces nebo vlákno bude probíhat pouze na určeném CPU nebo CPU, nikoli na jakémkoli CPU. .

Normálně je to jádro, které určuje CPU, které proces běží. Pokaždé, když plánovač přeplánuje proces, může přejít na kterýkoli z dostupných CPU. I když je to pro většinu úloh v pořádku, někdy je žádoucí omezit, které CPU (procesory) smí proces spustit. Například omezení procesu náročného na paměť pouze na jeden nebo dva CPU zvyšuje pravděpodobnost zásahu do mezipaměti, čímž se zvyšuje celkový výkon.

Jak to funguje?

Na tomto obrázku máte tři aplikace:X, Y a Z. Výchozí chování plánovače je použití všech dostupných procesorů ke spouštění vláken aplikací X, Y a Z. Pomocí výchozího nastavení můžete vidět, že Dojde k velkému počtu vynechání mezipaměti, protože aplikace je rozprostřena na všech CPU. Což vede k menšímu počtu zásahů do mezipaměti a většímu počtu chyb ve vyrovnávací paměti.

Když jsou aplikace připnuty ke konkrétním procesorům, jsou nuceny běžet na konkrétních procesorech, takže mezipaměť CPU využívají efektivněji – více kódu na stejném procesoru. Výsledkem je větší zahřátí mezipaměti/zásahy do mezipaměti, a tedy lepší výkon aplikace.

Chcete-li prozkoumat, jak můžete využít připnutí CPU/afinitu CPU k navázání procesu na určité procesory, připněte sshd proces na CPU 0.

Zkontrolujte aktuální stav sshd servis. Kontrolujete, ke kterému CPU se váže.

Podle taskset příkazové manuálové stránky, hodnota f znamená "jakýkoli CPU." Pro sshd tedy není nakonfigurováno žádné připínání CPU ani vazba službu.

Svažte sshd služba CPU 0 – vytvoření drop-in soubor, který budete používat k ovládání chování sshd servis. Soubor drop-in ovládá mnoho věcí souvisejících s procesem, ale v současnosti se omezujete na připínání/afinitu CPU.

Můžete vidět, jak taskset příkaz zobrazuje CPU jako „1“, což podle taskset manuálová stránka je první dostupný procesor.

Soubor drop-in můžete dále potvrdit kontrolou stavu sshd službu.

Zabalit

Můžete použít buď nice  nebo renice změnit prioritu procesu. Obojí nicerenice příkazy mohou manipulovat s „virtuálním runtime“ procesu. Na základě hodnot tedy proces tráví více nebo méně času na CPU.

Proces můžete svázat/připnout k jednomu nebo více CPU. To zvyšuje šance na více zahřátí mezipaměti/zásahů do mezipaměti, což má za následek mnohem lepší výkon. Můžete použít taskset nástroj příkazového řádku pro tento účel. Účinek je ale pouze dočasný. Pokud chcete, aby byla konfigurace trvalá, musíte použít soubor „drop-in“.

[ Bezplatný online kurz:Technický přehled Red Hat Enterprise Linux. ]


Linux
  1. Nejlepších 5 podcastů pro novinky a tipy pro Linux

  2. Tipy a triky pro použití CUPS pro tisk s Linuxem

  3. 5 tipů, jak začít se zabezpečením serveru Linux

  1. Tipy pro příkazový řádek Linuxu pro zvýšení produktivity

  2. Jak nastavit afinitu CPU pro proces z C nebo C++ v Linuxu?

  3. Načíst využití CPU a paměti jedním procesem v Linuxu?

  1. 3 tipy pro tisk s Linuxem

  2. Nástroje a tipy s otevřeným zdrojovým kódem pro zlepšení výkonu počítače se systémem Linux

  3. Linux – Jak omezit proces na jedno jádro CPU v Linuxu?