Portál AbcLinuxu, 27. dubna 2024 05:33

Hry s KVM 3: Thin Provisioning

8.12.2019 13:37 | Přečteno: 1690× | Bežná práca s Desktopom | poslední úprava: 1.12.2019 13:53

Thin provisioning je poskytovanie diétnych virtuálnych počítačov. Teda počítačov ktoré nespotrebujú všetky zverené prostriedky, ale len ich časť.
Takéto niečo sa dá bez problémov dosiahnuť aj v domácich podmienkach. Tak poďme na to.

Potrebné nástroje:

Pripravená farmička z predchádzajúceho dielu s dostupnými príkazmi virsh a virtímanager.
Virtuálny stroj s OS Linux

Opis prostredia:

Ako sme spomínali v predchádzajúcich dieloch, tak máme vytvorenú virtuálnu farmu na notebooku. Jednoducho povedané je to 1x Dual Core Dual Thread javiace sa ako 4x CPU, 12G RAM a jeden rotačný disk (zatiaľ, nebudeme predbiehať):

golisp@WEB:~$ virsh nodeinfo
CPU model:           x86_64
CPU(s):              4
CPU frequency:       1269 MHz
CPU socket(s):       1
Core(s) per socket:  2
Thread(s) per core:  2
NUMA cell(s):        1
Memory size:         12187152 KiB
Pozrieme si stav Virtuálnych Počítačov:
golisp@WEB:~$ virsh list --all
 Id    Name                           State
----------------------------------------------------
 2     CentOS-8                       running
 -     FreeBSD-12                     shut off

golisp@WEB:~$ virsh dominfo  CentOS-8
Id:             7
Name:           CentOS-8
UUID:           766950d8-32fc-4282-980b-0869a3f17dce
OS Type:        hvm
State:          running
CPU(s):         1
CPU time:       281.0s
Max memory:     2098176 KiB
Used memory:    2098176 KiB
Persistent:     yes
Autostart:      disable
Managed save:   no
Security model: apparmor
Security DOI:   0
Security label: libvirt-766950d8-32fc-4282-980b-0869a3f17dce (enforcing)

golisp@WEB:~$ virsh domblklist CentOS-8 --details
Type       Device     Target     Source
------------------------------------------------
file       disk       hda        /var/lib/libvirt/images/CentOS-8.qcow2
file       cdrom      hdb        -

golisp@WEB:~$ virsh shutdown CentOS-8
Domain CentOS-8 is being shutdown

Nás zaujíma VM CentOS-8 ktorá sa čerstvo vypla, a má pridelené a aj použité máličko cez 2G RAM, 1xvCPU a jeden pevný disk. Tak si ju postupne prestavíme.

Nastavenie RAM:

Obmedzenie RAM je fajn aj keď jej má človek dostatok. Občas ale človek potrebuje okresať prostriedky ktoré sa dajú využiť aj na niečo iné. Tak poďme na to.
Nastavíme si MAX RAM na presné 2G, zapneme VM a okrešeme jej za behu aktuálne použitú RAM na 1G:
golisp@WEB:~$ virsh
Welcome to virsh, the virtualization interactive terminal.

Type:  'help' for help with commands
       'quit' to quit

virsh # setmaxmem CentOS-8 2G 

virsh # start CentOS-8
Domain CentOS-8 started

virsh # setmem CentOS-8 1G 
Výslednú konfiguráciu vidíme na obrázku:

Mimochodom, práve v tej záložke sa to dá aj vyklikať.

Nastavenie CPU:

Málo kto potrebuje v domácich podmienkach obmedzovať počet virtuálnych jadier CPU pre jednotlivé VM, najmä ak ich človek zdieľa. A ak na nich človek nebeží nič náročné. Ale skúsime si to.
Nastavíme si Maximálny počet VCPU na 2, a aktuálny počet pri štarte na 1 VCPU.
virsh # shutdown CentOS-8
Domain CentOS-8 is being shutdown

virsh # setvcpus --domain CentOS-8 --maximum 2 --config

virsh # setvcpus --domain CentOS-8 --count 1 --config

Prihlásime sa do VM a skontrolujeme koľko CPU máme k dispozícii:
[golisp@CentOS-8 ~]$ grep -c ^processor /proc/cpuinfo 
1
Vidíme že máme k dispozícii práve jedno CPU, tak si pridáme ďalšie:
virsh # setvcpus --domain CentOS-8 --count 2

A zas skontrolujeme skontrolujeme koľko CPU máme k dispozícii:
[golisp@CentOS-8 ~]$ grep -c ^processor /proc/cpuinfo 
2
[golisp@CentOS-8 ~]$ dmesg | tail
[  213.643111] virbr0: port 1(virbr0-nic) entered disabled state
[  215.553130] input: spice vdagent tablet as /devices/virtual/input/input5
[  347.883123] CPU1 has been hot-added
[  347.895179] SMP alternatives: switching to SMP code
[  347.918673] x86: Booting SMP configuration:
[  347.918677] smpboot: Booting Node 0 Processor 1 APIC 0x1
[  347.930736] kvm-clock: cpu 1, msr 0:7ff2e041, secondary cpu clock
[  347.951178] KVM setup async PF for cpu 1
[  347.951185] kvm-stealtime: cpu 1, msr 7db25040
[  347.953253] Will online and init hotplugged CPU: 1
[golisp@CentOS-8 ~]$ 
Vidíme že nám to druhé CPU aj pridalo. Podobným štýlom si to CPU môžeme aj ubrať. Mimochodom, aj toto sa dá naklikať v grafike:

Nastavenie HDD:

Nastavenie Thin Provisioning využíva pri diskovom priestore technológiu známu z SSD, teda TRIM/Discard. Presnejšie povedané, hypervízor si odchytí daný HW príkaz, a namiesto predania TRIM priamo do spodnej úurovne disku nám to miesto uvoľní vo virtuálnom disku. Teda vyrazí doň dieru (hole punching). Tak si to poďme skontrolovať, nastaviť a vyskúšať:
golisp@WEB:~$ sudo sh -c 'ls -l /var/lib/libvirt/images/; du -sh /var/lib/libvirt/images/*'
[sudo] password for golisp: 
total 6569060
-rw------- 1 libvirt-qemu kvm  21478375424 Nov 21 15:50 CentOS-8.qcow2
-rw------- 1 root         root 21478375424 Nov 21 14:30 FreeBSD-12.qcow2
6.3G	/var/lib/libvirt/images/CentOS-8.qcow2
3.4M	/var/lib/libvirt/images/FreeBSD-12.qcow2
golisp@WEB:~$ virt-xml CentOS-8 --edit path=/var/lib/libvirt/images/CentOS-8.qcow2 --disk discard=unmap
Domain 'CentOS-8' defined successfully.
Changes will take effect after the next domain shutdown.

golisp@WEB:~$ virsh shutdown CentOS-8
Domain CentOS-8 is being shutdown

golisp@WEB:~$ virsh start CentOS-8
Domain CentOS-8 started

golisp@WEB:~$ ssh golisp@CentOS-8 
golisp@centos-8's password: 
Activate the web console with: systemctl enable --now cockpit.socket

Last login: Wed Nov 20 20:10:05 2019
[golisp@CentOS-8 ~]$ sudo -i
[sudo] password for golisp: 
[root@CentOS-8 ~]# time fstrim -av
/boot: 843.5 MiB (884441088 bytes) trimmed
/: 13 GiB (13953798144 bytes) trimmed

real	0m1.245s
user	0m0.000s
sys	0m0.014s

golisp@WEB:~$ sudo sh -c 'ls -l /var/lib/libvirt/images/; du -sh /var/lib/libvirt/images/*'
[sudo] password for golisp: 
total 4439304
-rw------- 1 libvirt-qemu kvm  21478375424 Nov 21 16:46 CentOS-8.qcow2
-rw------- 1 root         root 21478375424 Nov 21 14:30 FreeBSD-12.qcow2
4.3G	/var/lib/libvirt/images/CentOS-8.qcow2
3.4M	/var/lib/libvirt/images/FreeBSD-12.qcow2

Takže sme si všimli že pre VM CentOS-8 máme vytvorený 20G disk ktorý aktuálne zaberal 6.3G. Tomu disku sme nastavili aby vykonával TRIM/Discard ako Unmap, teda uvolnil nevyužité miesto. A finálne sme v tej VM spustili TRIM, čím sa nám disk za 1¼ sekundy zmenšil na 4.3G. Disk bol pomalý, rotačný.

Mimochodom moja farma beží na Ubuntu 18.04(.03), a použitá verzia balíka virt-manager zatiaľ nemá klikátko na takéto nastavenie disku:

Novšie verzie by to už mali mať.

To je na dnes všetko. Na budúce sa pozrieme ako by sme si mohli zjednodušiť prácu s touto farmičkou, a čo by sme si do nej mohli pre budúcnosť aj pridať.        

Hodnocení: 100 %

        špatnédobré        

Obrázky

Hry s KVM 3: Thin Provisioning, obrázek 1 Hry s KVM 3: Thin Provisioning, obrázek 2 Hry s KVM 3: Thin Provisioning, obrázek 3

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

Komentáře

Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře. , Tisk

Vložit další komentář

8.12.2019 14:20 Odin
Rozbalit Rozbalit vše Re: Hry s KVM 3: Thin Provisioning
Odpovědět | Sbalit | Link | Blokovat | Admin
Bla bla
k3dAR avatar 8.12.2019 14:21 k3dAR | skóre: 62
Rozbalit Rozbalit vše Re: Hry s KVM 3: Thin Provisioning
Odpovědět | Sbalit | Link | Blokovat | Admin
BTW: v Xubuntu18.04(.3) pouzivam mainline virt-mananger aktualne verze 2.2.1 a klikatno uz ma ;-)
porad nemam telo, ale uz mam hlavu... nobody
8.12.2019 17:18 Peter Golis | skóre: 64 | blog: Bežné záležitosti | Bratislava
Rozbalit Rozbalit vše Re: Hry s KVM 3: Thin Provisioning
Nie som si istý či to klikátko na discard=unmap bolo v 19.04, ale v 20.04 LTS určite bude. Od určitého veku preferujem LTS verzie. Tých 10 rokov čo som vydržal na Gentoo ma naučilo dosť, ale už nemám čas toľko kompilovať. Mám aj iné záľuby ako počítač.

I keď to večné lepenie defektov na bicykli ma tiež oberá o čas. Ale zas si môžem v prírode nazbierať bylinky, aj dnes som si zobral na krátky výjazd čaj z materinej dúšky nazbieranej tejto jari.
k3dAR avatar 8.12.2019 20:50 k3dAR | skóre: 62
Rozbalit Rozbalit vše Re: Hry s KVM 3: Thin Provisioning
zminujes nekolikrat cas, ale virt-manager 2.2.1 do 18.04 zabere mene casu, nez kolik si venoval napsani tohoto prispevku ;-)
#!/bin/sh

set -ex

VERSION="2.2.1"
PREFIX="/usr/local"

wget --continue https://virt-manager.org/download/sources/virt-manager/virt-manager-${VERSION}.tar.gz
tar xfv virt-manager-${VERSION}.tar.gz

cd virt-manager-${VERSION}
./setup.py configure --prefix=${PREFIX}
./setup.py build
./setup.py install --prefix=${PREFIX}
kdyz vynecham z casu stahnuti archivu tak: "time tentoskript" ~4s ;-)
porad nemam telo, ale uz mam hlavu... nobody
8.12.2019 21:08 Peter Golis | skóre: 64 | blog: Bežné záležitosti | Bratislava
Rozbalit Rozbalit vše Re: Hry s KVM 3: Thin Provisioning
Nejde o inštaláciu. Ide o konzistentnosť systému. Vybral som si LTS aby som to nemusel reinštalovať a ani upgradovať každých pár týždňov.

Naklikať si to nepotrebujem. Ted discard=unmap som používal ešte pred tým, ako to pridali do klikacieho virt-managera.

PS: I keď na druhú stranu, tento blog mám aj na to, aby som tieto kroky dokázal zreprodukovať. Presnejšie povedané, rovno ich reprodukujem nech mám istotu že som na niečo nezabudol. I keď nezachádzam moc do detailov.
k3dAR avatar 9.12.2019 01:06 k3dAR | skóre: 62
Rozbalit Rozbalit vše Re: Hry s KVM 3: Thin Provisioning
tak virt-manager je vrstevne "ontop", jeho povysenim nic nerozbijes, take pouzivam LTS, ale neco(co pouzivam kazdej den) nemam problem povysit z PPA (mc, byobu, xfce), nebo neco co stoji za to (libreoffice,gimp,mpv), u virt-manager bohuzel ppa padlo, takze to davam rucne, zadnej problem s tim neni...
PS: ja treba o moznosti unmap u disku netusil
porad nemam telo, ale uz mam hlavu... nobody
9.12.2019 10:53 Peter Golis | skóre: 64 | blog: Bežné záležitosti | Bratislava
Rozbalit Rozbalit vše Re: Hry s KVM 3: Thin Provisioning
Keď som sa začal hrať s touto voľbou v 16.04, tak ju nebral z xml. Vyhodil ju. Takže shrink som robil ručným spustením qemu. Ale to bolo dávno.

S tou konzistenciou som to myslel inak, pri upgrade občas ostávajú iné náväznosti ako sa vytvoria pri čistej inštalácii. Kto si má potom pamätať ako dosiahol nejakú magickú kombináciu ak robí novú inštaláciu. Na to sú už aj zápisky krátke, ak človek vyskúša cez 20 možností a nevie čo z toho mu zafungovalo. Napr. ten DNS resolving čo mám plánovaný do ďalšieho zápisku ako jeden z bodov zhrnutia.
8.12.2019 16:03 OldFrog {Ondra Nemecek} | skóre: 36 | blog: Žabákův notes | Praha
Rozbalit Rozbalit vše Re: Hry s KVM 3: Thin Provisioning
Odpovědět | Sbalit | Link | Blokovat | Admin
Eee, není to náhodou opačně, totiž že thin provisioning je přidělení více prostředků než jsou reálně k dispozici (overcommitting)? Což lze docílit například u RAM pomocí kernel samepage merging (KSM)?
-- OldFrog
8.12.2019 17:08 Peter Golis | skóre: 64 | blog: Bežné záležitosti | Bratislava
Rozbalit Rozbalit vše Re: Hry s KVM 3: Thin Provisioning
Pridelenie viac prostriedkov ako je reálne k dispozicii sa nazýva overprovisioning, a je viacero možností ako toho dosiahnuť. Najlacnejšia a najpoužívanejšia je že entita má zazmluvnenú maximálnu kapacitu, a garantovanú minimálnu kapacitu. To je známe aj z internetových prípojok.

Ten prvý link čo si sem dal ukazuje na môj typ použitia. Mám notebook s 12G RAM. Hypervízor (Linux desktop) si zožerie cca 2G, a ostane mi 10G pre VM. NASku dám garantované 4, a ostane mi 6G. Do toho si spustím 5 ďalších VM ktoré majú min 1G a max 2G. V reále sa mi tie virtuálky flákajú, a stačí im každej 1G, takže ostane 1G na zdieľanie podľa potreby. Ktorá VM ich reálne potrebuje, tá ich dostane.

Ohľadne toho druhého linku, tak metód ako deduplikovať pamäťové prostriedky sa za roky nazbieralo veľa. Jak pre RAM, tak pre disky. S RAMkou som sa zatiaľ nezaoberal.
Petr Fiedler avatar 15.12.2019 17:36 Petr Fiedler | skóre: 35 | blog: Poradna | Brno
Rozbalit Rozbalit vše Re: Hry s KVM 3: Thin Provisioning
Odpovědět | Sbalit | Link | Blokovat | Admin

Skvělé informace, díky.
Seriál sleduji i když na to teď nemám úplně čas. Určitě by mě zajímalo, jak nastavit VM, aby vůbec nemohl na síť? A taky jak nastavit, aby nemohl do systému, na kterém běží? Budu rád, když to do seriálu prosím zahrneš.

15.12.2019 19:26 Peter Golis | skóre: 64 | blog: Bežné záležitosti | Bratislava
Rozbalit Rozbalit vše Re: Hry s KVM 3: Thin Provisioning
Ja mám teraz dosť času, až mi to lezie na nervy.

Ohľadne tej siete, tak je niekoľko možností. Najjednoduchšie je odobrať sieťovku z VM. Trošku zložitejšie je vytvorenie si ďalších dvoch typov sieťových módov (Host-only a Internal) podobne ako to je od výroby preddefinované vo Virtual Boxe od firmy Innotek. A najzložitejšie je nasimulovať si kompletnú virtuálnu kabeláž cez napr. VDEv2.
Petr Fiedler avatar 15.12.2019 21:21 Petr Fiedler | skóre: 35 | blog: Poradna | Brno
Rozbalit Rozbalit vše Re: Hry s KVM 3: Thin Provisioning

Ještě jsem si uvědomil, že by mě zajímalo, jak nastavit, aby VM přístup na síť měl a jen určitá aplikace ne. Vím, že by se to řešilo přes firewall, ale nikdy jsem to nedělal. Byl bych docela rád, kdybys třeba do seriálu zahrnul, jak se to dělá.

16.12.2019 19:15 Peter Golis | skóre: 64 | blog: Bežné záležitosti | Bratislava
Rozbalit Rozbalit vše Re: Hry s KVM 3: Thin Provisioning
Nuž, zabrániť aby určitá aplikácia nemala prístup na sieť sa dá jednoducho. Človek zabezpečí že tá aplikácia bude spúšťaná pod unikátnym užívateľom (hoci aj cez SetUID), a tomu potom zareže internet.
iptables -m owner --help
Existujú aj zložitejšie riešenia, ale v rámci ceny za VM sa moc neoplatí vyhrať sa s tým ak to človek chce len na zablokovanie nejakých "domácich pokusov". Veď 20G disku stojí 1€ pri cene 50€ za 1T rotačného 2.5' disku, 4G RAM pre VM je cca 15€ (občasne) a VCPU nerátam. Tá virtuálka nebude furt žrať prostriedky, okrem tej mince za disk.

Iné by to bolo vo firemnej sfére, ale tam človek použije kontajnerizáciu.
Petr Fiedler avatar 15.12.2019 21:25 Petr Fiedler | skóre: 35 | blog: Poradna | Brno
Rozbalit Rozbalit vše Re: Hry s KVM 3: Thin Provisioning
Najjednoduchšie je odobrať sieťovku z VM.

Naprosto jednoduché :-)

Založit nové vláknoNahoru

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.