Performance Tuning of RHEL

Podle blogu to vypadá, že jenom obrážím konference. Tentokrát to byl DevConf, který organizují kluci a holky z Red Hatu. V sobotu jsem začal s Larrym Woodmanem a laděním výkonu RHELu.

Larry začal představením novinek v tuned. Je to nástroj na nastavování parametrů kernelu (většinou přes sysctl) pro určitý typ využití počítače. Tyto možnosti jsou dané profily, které umí dědičnost, takže když si chci udělat nový profil, který se podobá hotovému, tak nadefinuju jenom jeden parametr. Stejně tak můžu víc profilu nakombinovat k účelu, který potřebuju.

Joe a Larry se asi už delší dobu zabývájí tím jak vyladit výkon NUMA (Non Uniform Memory Access) architektur. Jedná se typicky o více procesorové servery, kde předávání paměti na druhý uzel (procesor) znamená že se zneplatní cache a data se znovu se tahají z nadřazené cache nebo z hlavní paměti. Typicky se to děje, když programy přeskakují mezi procesory. Potom je to pekelně pomalé. Co se s tím dá dělat? Nástrojem numastat můžeme zjistit jestli se něco takového na daném RHELu vůbec děje. Nástrojem numctl se dá programu nastavit, že má bežet na nějakém konkrétním uzlu. Za zmínku stojí, že DMA má mapovanou paměť vždy na nultý NUMA uzel .

Pak pánové povídali o tom jak se používá paměť a swap. Standardní chování linuxového jádra je takové, že do paměti se ukládá všecho co se čte z disku, ale uvolňuje se to až když není volná žádná další paměť. Agresivita uvolňování paměti se dá ovlivnit buď nastavením swappiness. Pak je to ovlivněné třemi hladinami (wattermarks): high, low, min.

echo "$NUM" "/proc/sys/vm/min_free_kbytes"

Daemon kswapd potom podle těchto tří hladin uvolňuje paměť. Když nastavíme nižší hodnotu, tak bude mít systém vyšší propustnost, a když nastavíme vyšší hodnotu, tak bude mít zase rychlejší odezvy.

K nastavení paměti patří taky něco čemu se říká huge pages. Architektura x86_64 podporuje stránky 4k, 2m a 1g. RHEL 7 podporuje tzv. transparentní huge pages (t.j. uživatel nemusí nic dělat). Problém samozřejmě může být ve fragmentaci paměti, takže nemusí být možné alokovat, tak velký souvislý kus paměti, takže může být lepší si huge page alokovat hned po nastartování systému.

A co nastavení procesoru? V procesoru se dají nastavit tzv. C-states. Když toho procesor nemá moc na práci, tak se může přepnout do úsporného režimu.

cpupower idle-info

Pro zkrácení latencí je dobré, aby se program nepřesouval mezi procesory.  V tuned se k tomu objevil nový profil “cpu_partitioning”. Nejprve přepneme na tento profil a potom pomocí dalších nástrojů připneme aplikace k jednomu z jáder.  Pomocí programu “tuna” potom můžeme sledovat jak moc aplikace zlobí..

tuned-adm profile cpu_partitioning; reboot;
isolcpus
taskset -c 1,2,3,4, app

Pro ladění výkonu kernel poskytuje nástroj perf, který se dá používat například s flame charts.

Jednotlivé procesy se dají přiřadit do tzv. control groups, přičemž se dá jednotlivým CGroups omezit třeba paměť nebo nastavit priorita. V RHEL 6 najdeme CGroups v /etc/cgconfig, v RHEL 7 se ovládají přes systemd a /sys/fs/cgroup.

U souborových systémů můžeme nastavovat jak často se data z cache skutečně zapisují na disk (reclaim parameters, reclaim ratio, dirty background ratio).

Pokud máte pocit, že se ztratilo spoustu věcí v překladu, tak to možné je.. Ostatně si můžete sami poslechnout orginál na youtube..

Facebooktwittergoogle_plusredditpinterestlinkedin

2 thoughts on “Performance Tuning of RHEL”

  1. You should see original talk at youtube or you can use google translate. (-; My English skills and how I understand the topic just decreases amount of useful information in article. (-;

Comments are closed.