Števci prometa OpenVPN proti diskovnemu I/O: tri različna števila
Bajti vmesnika, znakovni števci procesa in zapisi na disk merijo različno delo. Primerjajte jih, preden velikost diskov določite po prostornini tunela.
Pošljite veliko datoteko skozi tunel in števec vmesnika se dvigne za velikost datoteke. Nič v tej številki ne pomeni, da je ista prostornina dosegla disk. V teh razpravah primerjajo tri različne meritve in odgovarjajo na tri različna vprašanja: koliko prometa je prečkalo omrežni sloj, koliko bajtov je proces prebral in zapisal s sistemskimi klici in koliko dela je doseglo sloj shranjevanja.
Primerjati prvo s tretjo je običajna napaka in ustvari bodisi fantomsko težavo z diskom bodisi načrt zmogljivosti, ki ignorira zapise, ki se res zgodijo. Vse tri je mogoče ločiti in vsaka ima pravilno uporabo.
Tri števila, ki se zamešajo
Števci vmesnika opisujejo promet, ki se obdeluje na omrežnem sloju. So prava številka za pasovno širino, za velikost tunela in za modele obračunavanja, ki določajo ceno tranzita.
Znakovni števci procesa opisujejo bajte, premaknjene s klici branja in pisanja na katerem koli deskriptorju, vključno s cevmi, terminali in znakovnimi napravami. So prava številka za vprašanje, kako zaseden je proces na meji sistemskega klica, in niso diskovni račun.
Števci shranjevanja opisujejo bajte, ki jih je jedro poskusilo premakniti v bločno napravo ali iz nje. So prava številka za načrtovanje zmogljivosti, s pridržkom, da jedro dokumentira lastne meje obračunavanja: branja iz predpomnilnika ne postanejo branja iz shrambe in zapis, ki je pozneje preklican, ne postane dokončan zapis na napravo.
| Measurement | Question it answers |
|---|---|
| Interface bytes | How much traffic crossed this layer |
rchar and wchar | How much data the process moved through system calls |
read_bytes and write_bytes | How much work reached the storage layer |
Zakaj deskriptor datoteke ni zapis na disk
VPN v uporabniškem prostoru izmenjuje pakete z jedrom prek naprave TUN, ki je znakovna naprava in ne običajna datoteka. Branje iz nje preda paket; pisanje vanjo vstavi paket. Nobena stran vsebine datoteke se ne pripravlja za shranjevanje in nobena pot datotečnega sistema ni vpletena.
Zato lahko zaseden tunel kaže ogromne znakovne števce skoraj brez števcev shranjevanja. Proces je te bajte res premaknil in jedro res ni potrebovalo diska, da bi to storilo.
cat /proc/$(pgrep -n openvpn)/io
ip -s link show tun0
Prvi izhod berite kot kumulativnega od zagona procesa, ne kot hitrost. Drugi daje pogled vmesnika na isti promet. Velika razlika med njima je pričakovana in ne kaže na uhajanje, čakalno vrsto ali napačno konfiguracijo.
Od kod bajti v resnici prihajajo
Trajni izhod ima svoj proračun in vodijo ga operacije, ne koristni tovor. Podroben nivo dnevnika, seznam odjemalcev, ki se pogosto spreminja, ali napaka, ki se ponavlja v tesni zanki, lahko ustvarijo precejšnje zapise, medtem ko tunel prenaša zelo malo.
Statusna datoteka je posnetek, ki se prepisuje v intervalu, zato so njeni stroški odvisni od intervala in od števila zapisov v njej. Ni tekoča kopija prometa vsakega odjemalca in skrajšanje intervala spremeni obseg pisanja, ne da bi spremenilo obseg prometa.
Lastništvo je pomembno, ko iščete te zapise. Če storitev predaja sporočila demonu za beleženje, dnevnik ali datoteko piše ta demon in bajti se pojavijo v njegovem obračunu, ne v lastnih števcih procesa VPN. Gledanje samo na proces VPN ne pojasni ne diskovne dejavnosti ne njene odsotnosti.
Druge prispevke je lahko spregledati: branje potrdil in konfiguracije ob zagonu, kavlji, ki pišejo lastne zapise, vtičniki za obračunavanje, izpisi ob sesutju in nepovezane delovne obremenitve na istem gostitelju. Nobenega od njih ne bi smeli oceniti z enačenjem prometa tunela z zapisanimi bajti.
Pravilno branje vsakega števca
Tri podrobnosti odločajo, ali primerjava kaj pomeni. Identiteta procesa je pomembna, ker znova zagnana storitev ponastavi svoje števce. Časovni interval je pomemben, ker sta kumulativno število in grafikon na sekundo različni meritvi. In enota je pomembna, ker tudi trenutna velikost dnevniške datoteke ni hitrost.
grep -E 'rchar|wchar|read_bytes|write_bytes' /proc/$(pgrep -n openvpn)/io
du -sh /var/log/openvpn 2>/dev/null
journalctl --disk-usage
Če sumite na resnične zapise koristnega tovora, poiščite komponento, katere naloga je shranjevati tovor: orodje za zajemanje paketov, posrednik, ki predpomni telesa, vtičnik, ki arhivira. Ti ustvarjajo promet v shrambo, ki se povečuje s tem, kar naj bi zabeležili, in spadajo k ločeni politični odločitvi o hrambi in dostopu.
Načrtovanje zmogljivosti s pravo številko
Razsežnost poti paketov določite z omrežnimi števili: prepustnost, kriptografsko obdelavo in gibanje pomnilnika. Razsežnost shrambe določite z izbirami opazljivosti, ki ste jih res sprejeli: nivo dnevnika, hramba, statusni interval in vsako namerno omogočeno zajemanje.
Ločevanje teh dveh proračunov olajša tudi branje incidentov. Poln disk ob skromnem prometu tunela kaže na dnevnike, zajemanja ali kaj nepovezanega, in števec vmesnika tega ne bo nikoli pojasnil. Nasičena povezava s tihim dnevnikom kaže v drugo smer.
Primerjava, ki se je vredno lotiti, je med meritvami iste vrste. Bajti vmesnika proti bajtom vmesnika skozi čas vam povedo o poti. Zapisi v shrambo proti zmogljivosti shrambe vam povedo o hrambi. Navzkrižna primerjava, promet proti disku, le izgleda smiselna in nikoli ni.