Portál AbcLinuxu, 1. května 2025 19:37
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/*/limit
ulimit
– 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.