Takéjádro procesoru, coreZákladní

Definice

Procesorové jádro je samostatná výpočetní část CPU, která načítá a vykonává instrukce programu. Vícejádrový procesor obsahuje několik takových jednotek, takže může paralelně zpracovávat více úloh nebo vláken. Skutečné zrychlení závisí na softwaru, operačním systému, sdílených zdrojích a tom, zda práce jde rozdělit.

Kategorie: Počítačová architekturaAktualizováno

Co je uvnitř jednoho jádra

Procesorové jádro je výpočetní část CPU, která umí samostatně načítat instrukce, dekódovat je a provádět operace nad daty. Jádro má řídicí logiku, registry, aritmeticko-logické jednotky a přístup ke cache. Některé zdroje jsou vlastní jednomu jádru, jiné sdílí celý čip, například větší poslední úroveň cache nebo řadič paměti.

Moderní jádro není jen jednoduchá kalkulačka pro jednu instrukci za druhou. Procesor se snaží udržet své části vytížené: předpovídá větvení, připravuje instrukce dopředu a může některé nezávislé operace zpracovat paralelně uvnitř jednoho jádra. Programátor však obvykle neřídí tyto detaily přímo. Programátor spíš rozhoduje, kolik práce pošle do vláken, procesů nebo úloh, které operační systém rozmisťuje na dostupná jádra.

Fyzické jádro, logické CPU a vlákna

Fyzické jádro je skutečná hardwarová jednotka na čipu. Logické CPU je jednotka, kterou vidí operační systém jako plánovatelný cíl. Technologie jako SMT nebo Intel Hyper-Threading mohou z jednoho fyzického jádra vystavit dvě logická CPU, aby se lépe využily chvíle, kdy jedno vlákno čeká na data z paměti.

Vlákno není totéž co jádro. Vlákno je část běžícího programu, zatímco jádro je hardware, na kterém může vlákno běžet. Osm logických CPU proto neznamená osm plných fyzických jader. U výpočtů náročných na celé aritmetické jednotky bývá přínos SMT menší než u úloh, které často čekají na paměť, síť nebo disk.

Proč více jader nezrychlí každý program

Více jader pomáhá jen tehdy, když se práce dá rozdělit. Kompilace projektu, zpracování mnoha obrázků nebo obsluha nezávislých HTTP požadavků se paralelizují poměrně dobře. Jedno sériové vlákno JavaScriptu nebo úsek programu zamčený jedním mutexem ale poběží převážně na jednom jádře, i když má stroj další volná jádra.

Škálování brzdí také sdílené zdroje. Vlákna mohou soupeřit o cache, paměťovou propustnost, zámky, databázová spojení nebo síť. U serverů se proto sleduje nejen procento vytížení CPU, ale také run queue, latence, počet kontextových přepnutí a čekání na I/O. Nízké vytížení jader nemusí znamenat, že systém má velkou rezervu.

Dopad na servery, kontejnery a databáze

V produkci bývá důležitější dostupná kapacita než marketingové číslo v parametrech procesoru. Cloudová instance, virtuální stroj nebo kontejner může vidět jiný počet CPU, než kolik reálně smí dlouhodobě využívat. Kvóty CPU v orchestrátoru mohou způsobit throttling: aplikace dostane čas na procesoru jen po omezenou část periody.

Databáze, aplikační servery a fronty úloh často nastavují počet workerů podle počtu jader. Příliš málo workerů nechává kapacitu ležet ladem, příliš mnoho workerů zvyšuje režii plánování a soutěž o paměť. Správné nastavení proto vychází z měření konkrétní zátěže, ne pouze z výpisu počtu procesorů.

Příklady z praxe

  1. Build vedle lokální databáze

    Vývojář spustí paralelní build na notebooku se čtyřmi fyzickými jádry a osmi logickými CPU. Build se s volbou -j8 sice rozběhne naplno, ale lokální databáze a IDE začnou reagovat pomalu. Omezení počtu paralelních úloh na čtyři nechá část kapacity systému pro interaktivní práci.

    make -j4
    # místo automatického -j8 na notebooku se 4 fyzickými jádry a SMT
  2. Kontejner s limitem půl CPU

    Aplikace běží v Kubernetes kontejneru, který vidí osm logických CPU hostitele, ale má limit půl CPU. Runtime podle viditelných CPU založí osm workerů a procesy se pak často přepínají. Nastavení workerů podle CPU kvóty sníží režii a stabilizuje latenci.

    resources:
      limits:
        cpu: "500m"
    # aplikace má plánovat workery podle kvóty, ne jen podle viditelných CPU

Časté omyly

MýtusOsmijádrový procesor je vždy dvakrát rychlejší než čtyřjádrový.
Ve skutečnostiVýkon neroste lineárně jen podle počtu jader. Rozhoduje výkon jednoho jádra, paměť, chlazení, sdílené zdroje a hlavně schopnost softwaru rozdělit práci.
MýtusLogické procesory jsou totéž co fyzická jádra.
Ve skutečnostiLogické procesory jsou plánovatelné jednotky viditelné pro operační systém. Dvě logická CPU mohou sdílet jedno fyzické jádro, takže jejich společný výkon nebývá stejný jako výkon dvou samostatných jader.
MýtusKontejner má k dispozici všechna jádra, která v systému vidí.
Ve skutečnostiKontejner může vidět mnoho CPU hostitele, ale orchestrátor mu může nastavit menší kvótu. Aplikace by proto měla při volbě počtu workerů zohlednit limity prostředí.

Časté dotazy

Proč správce úloh ukazuje víc procesorů než má počítač jader?
Správce úloh často ukazuje logická CPU, ne jen fyzická jádra. Jedno fyzické jádro může díky SMT vystupovat jako dvě plánovatelné jednotky, takže čtyřjádrový procesor může v systému vypadat jako osm procesorů. Logická CPU sdílejí část hardwaru fyzického jádra, a proto obvykle nepřidávají stejný výkon jako další skutečné jádro.
Zrychlí více procesorových jader každý program?
Procesorové jádro pomůže při paralelní práci, ale rychlost jednoho vlákna závisí hlavně na výkonu konkrétního jádra a na chování programu. Jednovláknový skript, starší desktopová aplikace nebo úzké hrdlo v zámku může využít převážně jedno jádro. Vícejádrový procesor se projeví víc u serverů, buildů, renderingu, analytiky nebo více současných aplikací.
Kolik procesorových jader potřebuje webová aplikace?
Webová aplikace obvykle potřebuje tolik jader, kolik odpovídá počtu současných požadavků, typu práce a latenci závislostí. API čekající hlavně na databázi může škálovat jinak než služba komprimující obrázky nebo počítající doporučení. Rozumný postup je měřit p95 latenci, CPU throttling, fronty požadavků a vytížení databáze při realistické zátěži.
Ovlivňuje procesorové jádro spotřebu energie?
Spotřeba energie souvisí s počtem aktivních jader, frekvencí, napětím a typem zátěže. Moderní procesory umějí nečinná jádra uspávat a aktivní jádra zrychlovat, pokud to dovolí teplotní a napájecí limity. Více jader tedy nemusí vždy znamenat vyšší okamžitou spotřebu, ale dlouhodobě paralelní výpočet často spotřebuje více energie za jednotku času.

Zdroje

  1. Multi-core processor(otevře se v novém okně)Wikipedia
  2. How CPU topology info is exported via sysfs(otevře se v novém okně)The Linux Kernel documentation
  3. Processor Groups(otevře se v novém okně)Microsoft Learn
  4. Resource Management for Pods and Containers(otevře se v novém okně)Kubernetes

Související pojmy

Potřebujete to vyřešit v praxi?

Poradíme, jak na to ve vašem projektu

Vysvětlit pojem je jedna věc, navrhnout kolem něj funkční řešení druhá. Ozvěte se a probereme, co dává smysl u vás.