Portál AbcLinuxu, 30. října 2025 15:54
V našem seriálu jsme se dostali na závěr. Zbývá nám již poslední kapitola, která se bude zabývat správou výpočetních zdrojů. V dnešním díle se zaměříme na Linux-VServer, v příštím probereme stejnou problematiku u OpenVZ.
Velmi důležitou součástí administrace virtuálních serverů je správa výpočetních zdrojů. Dovoluje změnit limity či upravit přidělení například virtuální paměti serveru, a to i za běhu. Můžeme tedy dynamicky snížit i zvýšit přidělené množství zdroje. Podobnou úpravu v takové míře nejrozšířenější paravirtualizační nástroj XEN neumožňuje.
Linux-VServer i OpenVZ nabízejí utility pro změnu měkkých a tvrdých limitů výpočetních zdrojů, kde tvrdý limit je horním mantinelem rozsahu nastavení měkkého limitu. Tvrdý (hard) limit bývá nastaven z vně virtuálního serveru, měkký (soft) limit je umožněno změnit i privilegovaným procesům příslušného serveru.
Linux-VServer rozšiřuje přidělování výpočetních zdrojů z procesů na celé kontexty. Mechanismus vychází z limitů, které můžeme nastavit ve standardním linuxovém prostředí.
V následující tabulce je uveden seznam standardních linuxových výpočetních zdrojů. Sloupce mají tento význam:
proc-fs – označení užívané v /proc/virtual/*/limitulimit – přepínač pro utilitu ulimit| ID | Jméno | proc-fs | ulimit | jednotka | popis |
| 0 | CPU | -t | ms | Čas CPU | |
| 1 | FSIZE | -f | KiB | Maximální velikost souboru | |
| 2 | DATA | -d | KiB | Maximální velikost datového segmentu | |
| 3 | STACK | -s | KiB | Maximální velikost zásobníku | |
| 4 | CORE | -c | KiB | Maximální velikost souboru core | |
| 5 | RSS | RSS | -m | page | Maximální Resident set size |
| 6 | NPROC | PROC | -u | 1 | Maximální počet procesů |
| 7 | NOFILE | FILES | -n | 1 | Maximální počet otevřených souborů |
| 8 | MEMLOCK | VML | -l | page | Maximální locked-in-memory adresový prostor |
| 9 | AS | VM | -v | page | Maximální adresový prostor |
| 10 | LOCKS | LOCKS | -x | 1 | Maximální počet držených souborových zámků |
| 11 | SIGPENDING | -i | 1 | Maximální počet čekajících signálů | |
| 12 | MSGQUEUE | MSGQ | -q | Byte | Maximum bajtů v POSIX mqueues |
| 13 | NICE | 1 | Maximální možná hodnota nice prio | ||
| 14 | RTPRIO | -r | 1 | Maximální realtime priorita |
Linux-VServer rozšiřuje jádro o limity uvedené v následující tabulce:
| ID | Jméno | proc-fs | jednotka | popis |
| 15 | NSOCK | SOCK | 1 | Maximální počet otevřených soketů |
| 16 | OPENFD | OFD | 1 | Maximální počet otevřených FD |
| 17 | ANON | ANON | page | Maximální velikost anonymous memory |
| 18 | SHMEM | SHM | page | Maximální velikost sdílené paměti |
| 19 | SEMARY | SEMA | 1 | Maximální počet polí semaforů |
| 20 | NSEMS | SEMS | 1 | Maximální počet semaforů |
| 21 | DENTRY | DENT | 1 | Maximální počet struktur dentry |
Rozlišují se dva typy limitů. Hard limit nastaví hranici, kterou z pohledu virtuálního serveru nelze překonat. Soft limit je hranice nižší nebo rovná hard limitu a pouze privilegované procesy (s povolenou CAP_SYS_RESOURCE capability) jsou oprávněny tento limit změnit.
Linuxové limity (vycházející z SVr4, 4.3BSD, POSIX.1-2001) pro virtuální prostředí můžeme měnit v konfiguraci virtuálního serveru. Vytvoříme odpovídající soubor v adresáři /etc/vservers/<vserver-name>/rlimits. Možné limity jsou: cpu, fsize, data, stack, core, rss, nproc, nofile, memlock, as a locks. Ostatní limity v současných verzích systému není možné upravit. Každý soubor omezuje právě jeden z těchto zdrojů. Může se však vyskytovat ve čtyřech podobách:
Namísto konkrétní hodnoty je možné použít speciální slovo inf, které značí neomezený zdroj.
U běžcích kontextů pro změnu limitů využijeme utilitu vlimit. Její základní syntax je následující:
# vlimit -c xid [-a] [[-H|M|S] --resource value]
Přepínač -c označuje kontextové číslo, přepínač -a vypíše všechny dostupné limity, přepínač -H označuje hard limit, -S soft limit a -M minimální garantovanou hodnotu zdroje. --resource značí zdroj a value jeho hodnotu.
Zdroje, které je možné nastavit utilitou vlimit jsou: cpu, fsize, data, stack, core, rss, nproc, nofile, memlock, as, locks, msgqueue, nsock, openfd, anon, shmem, semary, nsems a dentry.
Linuxové limity SIGPENDING, NICE a RTPRIO nelze pro kontexty omezit.
Pro správnou funkčnost paměťových limitů je nutné, aby měl kontext statické číslo.
Paměťových limitů se týkají zdroje as a rss. Resident Set Size (rss) je počet stránek, které jsou k dispozici v RAM. Address Space (as) je celkový počet stránek, které jsou namapovány v každém procesu kontextu.
Pokud virtuální server přesáhne hard limit rss, OOM killer vybere a zabije proces. Soft limit rss je zobrazen jako maximální dostupná paměť. Po překročení hard limitu as není žádný proces zabit, systém pouze ohlásí chybu. Soft limit as není v současné implementaci využit.
Pro správné zobrazování volné paměti z pohledu kontextu musíme vložit do souboru /etc/vservers/<name_of_kontext>/flags řádek virt_mem.
Rozdílný význam mají hard a soft limit při zvýšení jejich hodnoty. Zvýšíme-li limit rss nad původně zvolenou hodnotu jako hard, je rozdíl vrácen ke swap. Pokud jej zvýšíme jako soft limit, je paměť navrácena k volné RAM.
Probrali jsme konfiguraci limitů hardwarových zdrojů u Linux-VServeru. Mezi jeho nesporné výhody patří fakt, že vychází z původních limitů, které jsou již v Linuxu obsaženy. V příštím díle se podíváme do nepříliš průhledného světa OpenVZ. Tento systém totiž zavádí zcela nové pojmy a postupy, což může nadělat mnoha uživatelům vrásky.
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.