Nahradili jsme LXCFS virtualizací v kernelu

Změnili jsme způsob virtualizace vybraných souborů v adresáři proc a místo LXCFS teď používáme virtualizaci na základě jmenných prostorů. LXCFS je souborový systém založený na FUSE (Filesystem in Userspace), který jsme od počátku vpsAdminOS používali k virtualizaci vybraných souborů v /proc a /sys ve VPS jakožto kontejnerech. Linux sice podporuje izolaci pomocí jmenných prostorů a limity přes cgroups, nicméně i tak by bez LXCFS ve VPS bylo možno vidět v utilitě top všechny CPU nodu, free by ukazoval využití paměti celého nodu, load average by byl vyšší než čekáte, atp. Postupem času jsme roli LXCFS zmenšovali a od kernelu 6.6.10 pro vpsAdminOS jsme ho kompletně odstranili, už není potřeba! Náš kernel nyní obsahuje patche, které vybrané soubory v /proc virtualizují na základě jmenných prostorů a limitů z cgroups. LXCFS muselo tyto hodnoty zjišťovat z userspace čtením parametrů ze /sys/fs/cgroup a k počítání load average dokonce muselo procházet všechny procesy patřící VPS přes /proc. Čtení těchto souborů zabírá sdílené zámky, což pak zdržuje ostatní přístupy. LXCFS taktéž fungovalo jen tam, kde je připojeno. Pokud sami uvnitř VPS pouštíte kontejnery, museli jste LXCFS dovnitř buď ručně bind-mountovat, a nebo uvnitř těchto kontejnerů hodnoty v /proc virtualizovány nebyly. Některé utility zjišťují stav systému pomocí systémového volání sysinfo a to pak LXCFS kompletně obešlo. sysinfo používá např. Busybox, nebo i samotná glibc. Na Alpine Linuxu, kde je ve výchozím stavu Busybox, tak příkaz uptime ukazoval load average celého nodu. Na nodech se starším kernelem se můžeme podívat, jaké soubory LXCFS v poslední fázi provozu virtualizuje: $ grep lxcfs /proc/mounts lxcfs /proc/cpuinfo fuse.lxcfs rw,nosuid,nodev,relatime,user_id=0,group_id=0,allow_other 0 0 lxcfs /proc/diskstats fuse.lxcfs rw,nosuid,nodev,relatime,user_id=0,group_id=0,allow_other 0 0 lxcfs /proc/loadavg fuse.lxcfs rw,nosuid,nodev,relatime,user_id=0,group_id=0,allow_other 0 0 lxcfs /proc/uptime fuse.lxcfs rw,nosuid,nodev,relatime,user_id=0,group_id=0,allow_other 0 0 V minulosti zde bylo také /proc/stat, /proc/meminfo, /proc/swaps a /sys/devices/system/cpu/online. Virtualizaci využití CPU z pohledu VPS na základě CFS kvót jsme tehdy do LXCFS sami dodělávali. Historicky jsme začínali s jednou instancí LXCFS pro všechny VPS v rámci jednoho nodu, to fungovalo v pohodě na nodech do 100 VPS. Když jsme přecházeli na nody se 300/600 VPS, jeden LXCFS proces už přestával stíhat. Krátce jsme spouštěli každému VPS vlastní instanci LXCFS, ale to se ukázalo jako velmi špatný nápad, neboť se pak 300/600 LXCFS procesů pralo o čtení z /proc a cgroups parametrů. Nakonec jsme přešli na model LXCFS worker procesů, kdy jedna instance obsluhovala max 50 VPS a poté se dle potřeby spouštěly další instance: [[email protected]] ~ # osctl lxcfs worker ls NAME ENABLED SIZE MAX_SIZE CPU_PACKAGE LOADAVG CFS worker.0.cpu1 true 49 50 1 true true worker.1.cpu1 true 50 50 1 true true worker.2.cpu1 true 50 50 1 true true worker.3.cpu1 true 50 50 1 true true worker.4.cpu1 true 50 50 1 true true worker.5.cpu1 true 48 50 1 true true worker.6.cpu1 true 18 50 1 true true worker.7.cpu0 true 50 50 0 true true worker.8.cpu0 true 50 50 0 true true worker.9.cpu0 true 50 50 0 true true worker.10.cpu0 true 49 50 0 true true worker.11.cpu0 true 50 50 0 true true worker.12.cpu0 true 36 50 0 true true node23/24.prg mají dva CPU sokety a tam ještě řešíme i to, aby VPS používalo LXCFS instanci na stejném soketu. Kanál na přenos dat mezi sokety má totiž omezenou propustnost, takže se snažíme VPS držet v rámci jednoho soketu. Nyní tohle všechno odpadá a LXCFS jsme z vpsAdminOS kompletně odstranili. Z VPS tak vždy uvidíte virtualizované hodnoty. Pokud uvnitř VPS sami LXCFS používáte, nic se pro vás nemění a můžete jej nadále provozovat. Naše změny vás pouze abstrahují od toho, že VPS je taky jen kontejner.

projít na článek

Microsoft Hyper-V (4) Snímky v Hyper-V

Ve čtvrtém díle o virtualizační platformě Hyper-V z dílny Microsoftu, si povíme, jak pracovat se Snímky v Hyper-V. Seriál o virtualizaci s Microsoft Hyper-V Úvod do The post Microsoft Hyper-V (4) Snímky v Hyper-V first appeared on Michal Zobec: Virtuální

projít na článek

VMware sjednotil produkty VMware Workstation a VMware Player

Společnost VMware v srpnu 2015 oznámila sjednocení svých produktů pro virtualizaci na desktopu do jedné společné řady VMware Workstation a formální ukončení VMware Player. The post VMware sjednotil produkty VMware Workstation a VMware Player first appeare

projít na článek

VMware Workstation (9): 3D akcelerace ve virtuálním stroji

Jednou z opomíjených významných funkcí ve VMware Workstation je podpora 3D akcelerace ve virtuálních strojích. Seriál o virtualizaci s VMware Workstation Pro Seriál The post VMware Workstation (9): 3D akcelerace ve virtuálním stroji first appeared on Mich

projít na článek

devcgprog: utilita pro nastavení devices cgroupv2 controlleru

Od počátku roku 2022 pracujeme na přechodu na cgroups v2. Vyžaduje to úpravy v linuxovém jádře, ale také integraci v uživatelském prostoru. Proto vznikla utilita devcgprog. V předchozím zápisku jsem psal o plánovaném přechodu na cgroups v2. Pomalu na tom

projít na článek

Novinky ve vpsAdminu: hostitelské klíče SSH, úpravy v šablonách a cgroups

Připravili jsme několik technických novinek týkajících se vpsAdminu. Můžete se podívat na otisky hostitelských klíčů SSH, spravovat změny prováděné v šablonách a začínáme přechod na nové cgroups. Otisky SSH klíčů V detailu VPS ve vpsAdminu nově najdete o

projít na článek