Spotřeba serveru
⏳ Doba čtení: ~12 min (1501 slov)- Snižování spotřeby domácího Proxmox serveru
Snižování spotřeby domácího Proxmox serveru
Můj domácí server Zalman (osazený 48 GB RAM a grafikou NVIDIA GTX 1070 Ti) odebírá při běhu naprázdno zhruba 70 W. Na stroj, který běží 24/7 a zajišťuje virtualizaci pod Proxmoxem, je to očekávatelná hodnota. Nicméně pro typické domácí nasazení, kdy od půlnoci do odpoledne není server potřeba, je zbytečné pálit elektřinu. Rozhodl jsem se proto spotřebu optimalizovat, jak na úrovni běhového idle stavu, tak chytrou automatizací vypínání.
Pořídili jsme chytrou zásuvku Meross s měřením spotřeby, která umožnujě vypnout/zapnout na dálku přes internet.
Namřená spotřeba pří běhu na prázdno se pohybuje mezi 60-70W. Za celý den tak zásuvka naměřila spotřebu 1.433 kWh.
Chytré vypínání a zapínání pomocí Home Assistant
Vypínat server “natvrdo” časovačem je poukázka na zničený souborový systém.
Plán automatizace:
- Softwarové vypnutí: O půlnoci se na Proxmoxu spustí cron job (
shutdown -h now), který bezpečně ukončí všechny kontejnery a systém. Spotřeba klesne z 60 W na jednotky wattů. - Bezpečné odpojení napájení: Home Assistant sleduje spotřebu na zásuvce. Jakmile klesne pod 5 W na dobu delší než 2 minuty, zásuvka odpojí přívod proudu. Tím se eliminuje riziko “tvrdého” vypnutí, pokud by se systém někdy vypínal déle.
- Automatické probuzení: Při detekci mého příchodu domů (např. připojení na Wi-Fi nebo geolokace) Home Assistant zásuvku sepne.
- Automatický start (BIOS): Aby server po příchodu proudu rovnou najel, je nutné v BIOSu základní desky nastavit volbu Restore on AC Power Loss (nebo obdobnou) na hodnotu Power On.
Zápis do plánovače úloh (cron)
Spusťil jsem v terminálu:
crontab -e
Na konec souboru jsem přidal následující řádek. Z důvodu spolehlivosti je v cronu vždy lepší uvádět absolutní cestu k binárce:
# Shutdown server at midnight to save power
0 0 * * * /sbin/shutdown -h now
Integrace se Smart Things (Samsung)
Bohužel zásuvka není zas tak chytrá. Je možné ji propojit s SmartThings (Samsung), zde se však zásuvka objěví jen jako vypínač a lezle z ní vyčítat odběr.
Na mém Galaxy S21 Ultra mohu nastavit zapínání nativně, protože SmartThings i samotné systémové rutiny jsou integrované hluboko v systému a nevyžadují běh dalších aplikací třetích stran na pozadí.
Pro propojení Meross a SmartThings jsem v aplikaci SmartThings přidal nové zařízení a vybral možnost přidání přes partnerské značky. Vyhledal jsem službu Meross, přihlasil jsem se svými údaji a chytrou zásuvka se připojila.
Konfigurace rutiny v telefonu MOhu využít buď přímo aplikaci SmartThings, nebo ještě lépe nativní systémovou aplikaci Režimy a rutiny (Modes and Routines) v nastavení Samsungu:
- If: zvolím “Síť Wi-Fi” a vyberu naší domácí síť (podmínka “připojeno”), případně “Místo” a nastav rádius.
- Then: Vyberu “Ovládání zařízení”, najdu naší Meross zásuvku a nastav akci na zapnutí.
Na desce ještě musím povolit funkci “Restore on AC Power Loss”, aby se server po příchodu proudu rovnou najel. V opačném případě by se po zapnutí zásuvky server nerozběhl a musel bych ho startovat ručně.
Tento geniální plán má však jeden háček a to, že nemám způsob automativkého vypínání zásuvky. Pro zatím se spokojím jen s tím se cron server o půlnoci vypne a já ho ručně zapnu až příjdu z práce domů (nebo si jej pustí Erika).
Snížení idle spotřeby běžícího Proxmoxu
Proxmox je z výroby laděn na maximální výkon. Pomocí několika úprav lze idle spotřebu srazit o dalších zhruba 10 až 20 W.
Změna CPU Governoru
Výchozí režim performance nedovolí procesoru maximálně podtaktovat. Přepnutím na powersave ušetříte cenné watty.
Instalace a nastavení:
apt install linux-cpupower
cpupower frequency-set -g powersave
Pomocí tohoto příkazu se úsporný režim rovnou na všechna dostupná jádra procesoru.
Trvalé nastavení po startu
Spuštte crontab -e a na další řádek (hned pod pravidlo pro shutdown) přidejte spuštění při bootu:
@reboot /usr/bin/cpupower frequency-set -g powersave
Při každém dalším startu Zalmanu si tak cron automaticky sáhne na procesor a srazí ho do úsporného režimu.
Pro ověření aktuálního stavu procesoru lze použít příkaz:
cpupower frequency-info
Povolení ASPM (Active-State Power Management)
ASPM řídí spotřebu na PCIe linkách. V Linuxu bývá často vypnuté. Zapnutí se provádí v parametrech jádra:
- Otevřete
/etc/default/grub. - Na řádek
GRUB_CMDLINE_LINUX_DEFAULTpřidejtepcie_aspm=force. - Spusťte
update-gruba restartujte server.
P-States grafické karty
GTX 1070 Ti by měla v nečinnosti padat do stavu P8 (spotřeba cca 10 W). Zkontrolujte to příkazem nvidia-smi. Pokud karta visí ve stavu P0 i v idle, na vině může být připojený “dummy plug” nebo špatně uspaný kontejner (např. pro Sunshine/Moonlight).
V mém případě kdy mám nakonfigurovaný passhrough grafiky do Bazzite VM, karta nelze řídit z Proxmoxu. Při spuštění kontejneru tak paradoxně dojde ke snížení spotřeby o cca 10 W, protože karta se přepne do úsporného režimu P8 (nic nehraju). Při vypnutí kontejneru se karta vrátí do stavu P0 a spotřeba se zvýší.
BIOS a periferie
Další doporučení je vypnout vše, co server nepotřebuje: integrovanou zvukovou kartu (HD Audio), sériové porty a nepoužívané SATA řadiče. Pro hloubkovou diagnostiku sběrnic a odhalení komponent bez aktivního power managementu lze použít utilitu powertop.
Uspávání disků a úskalí ZFS
Uspávání (spindown) rotačních disků je kapitolou sama pro sebe.
- ZFS pooly: U mého pole (3x 3TB v RAIDZ1) je uspávání prakticky nemožné. ZFS je enterprise systém, který neustále zapisuje transakční logy a metadata.
- MergerFS a ext4/NTFS: Datové disky spojené přes MergerFS uspávat lze. MergerFS nestripuje data, takže probudí jen ten disk, ze kterého se reálně čte.
Konfigurace uspání přes hdparm
Pro dvojici 2,5” disků (s NTFS filesystémem spojených přes MergerFS), u kterých neřeším opotřebení hlaviček, nastavuji agresivní uspání po 5 minutách nečinnosti.
ls -l /dev/disk/by-id/ | grep ata | grep -v part
lrwxrwxrwx 1 root root 9 Aug 29 12:38 ata-HFS128G39TND-N210A_EJ7BN46861170B82R -> ../../sdb
lrwxrwxrwx 1 root root 9 Aug 29 12:38 ata-HUA723030ALA640_MK0361YHGNP0VD -> ../../sdc
lrwxrwxrwx 1 root root 9 Aug 29 12:38 ata-ST3000VX015-3CV10G_ZW61AGJ0 -> ../../sde
lrwxrwxrwx 1 root root 9 Aug 29 12:38 ata-ST33000651AS_Z290M60D -> ../../sdf
lrwxrwxrwx 1 root root 9 Aug 29 12:38 ata-TOSHIBA_MQ01ABD100_178NC5D7T -> ../../sdd
lrwxrwxrwx 1 root root 9 Aug 29 12:38 ata-TOSHIBA_MQ04ABF100_601GPGWET -> ../../sda
V souboru /etc/hdparm.conf použijte přesné identifikátory disků, aby konfigurace přežila restart:
# Disky MergerFS (NTFS)
/dev/disk/by-id/ata-TOSHIBA_MQ04ABF100_601GPGWET {
spindown_time = 60
}
/dev/disk/by-id/ata-TOSHIBA_MQ01ABD100_178NC5D7T {
spindown_time = 60
}
(Poznámka: Hodnota 60 znamená 60 x 5 sekund = 5 minut).
Pokud by disky příkazy z hdparmu ignorovaly, spolehlivější a agresivnější alternativou je systémový démon hd-idle.
Okamžité vynucení stavu standby Abys rovnou změřil dopad na celkovou spotřebu a nemusel čekat, pošli oba disky do spánku manuálně těmito příkazy:
hdparm -y /dev/disk/by-id/ata-TOSHIBA_MQ04ABF100_601GPGWET
hdparm -y /dev/disk/by-id/ata-TOSHIBA_MQ01ABD100_178NC5D7T
U 2.5” disků není rozdíl tak dramatický jako u velkých 3.5” ploten.
- Běžící 2.5” disk si v idle bere zhruba 1,5 až 2 W.
- Uspaný 2.5” disk klesne pod 0,5 W.
Do budoucna plánuji pořídit jeden velký 8TB disk formátovaný čistě na ext4, na který budu posílat data přes bind mount do Docker kontejnerů. Stávající NTFS disky půjdou o dům dál, jelikož NTFS s sebou na Linuxu nese nepříjemnou režii FUSE ovladače ntfs-3g (formátovat je nechci, jejich nový možná bude za NTFS a filmy rád). Ten při větším čtení zatěžuje CPU a zbytečně ho budí do vyšších energetických stavů, což je přesně to, čeho se chceme u úsporného serveru vyvarovat.
Závěr
Spotřebu jsem tak v IDLE snížil z 70 W na 54 W. Pokud se Zalman vypne o půlnoci a zapnu jej až v 17:00, tak poběží jen 7 hodin denně místo 24.
| Provedení | Spotřeba | Spotřeba za den |
|---|---|---|
| Zalman IDLE (performance) | 70 W | 1.68 kWh |
| Zalman IDLE (powersave) | 68 W | 1.632 kWh |
| Bazzite IDLE (GPU P8) | 60 W | 1.433 kWh |
| Bazzite IDLE (powersave + GPU P8) | 55 W | 1.320 kWh |
| Disky uspány (MergerFS) | 53 W | 1.272 kWh |
| Vypínání na většinu dne | 53 W | 0.370 kWh |
Při nastavování automatického vypíná vedl čas přesně o půlnoci k nečekanému chování. Server se vypl jen z části Proxmox se vypl ale HW se úspěšně neukončil a stroj zůstal bežet se spotřebou 40W. Pravděpodobně se byjí rutiny spuštěné Debianem o půlnoci. Řešením je nastavit vypínání na 23:50, aby se joby nestihly překrýt.