OpenVPN:n liikennelaskurit ja levyn I/O: kolme eri lukua
Rajapinnan tavut, prosessin merkkilaskurit ja levylle kirjoitukset mittaavat eri työtä. Vertaa niitä ennen kuin mitoitat levyt tunnelin tilavuuden perusteella.
Kuljeta suuri tiedosto tunnelin läpi, niin rajapinnan laskuri kasvaa tiedoston koon verran. Mikään siinä luvussa ei tarkoita, että sama tilavuus saavutti levyn. Näissä keskusteluissa verrataan kolmea eri mittausta, ja ne vastaavat kolmeen eri kysymykseen: kuinka paljon liikennettä ylitti verkkokerroksen, kuinka monta tavua prosessi luki ja kirjoitti järjestelmäkutsujen kautta, ja kuinka paljon työtä saavutti tallennuskerroksen.
Ensimmäisen vertaaminen kolmanteen on tavallinen virhe, ja se tuottaa joko kummitusmaisen levyn ongelman tai kapasiteettisuunnitelman, joka jättää huomiotta kirjoitukset, joita todella tapahtuu. Ne kolme ovat erotettavissa, ja jokaisella on oikea käyttötarkoitus.
Kolme lukua, jotka sekoitetaan
Rajapinnan laskurit kuvaavat liikennettä, jota käsitellään verkkokerroksella. Ne ovat oikea luku kaistanleveydelle, tunnelin koolle ja laskutusmalleille, jotka hinnoittelevat siirron.
Prosessin merkkilaskurit kuvaavat tavuja, jotka siirrettiin luku- ja kirjoituskutsujen kautta millä tahansa kuvaajalla, mukaan lukien putket, päätteet ja merkkipohjaiset laitteet. Ne ovat oikea luku kysymykseen siitä, kuinka kiireinen prosessi on järjestelmäkutsun rajalla, eivätkä ne ole tallennuslasku.
Tallennuslaskurit kuvaavat tavuja, jotka ydin yritti siirtää lohkolaitteeseen tai siitä. Ne ovat oikea luku kapasiteetin suunnitteluun, sillä varauksella että ydin dokumentoi omat kirjanpitonsa rajat: välimuistiin tallennetut lukemiset eivät muutu tallennuslukemisiksi, ja myöhemmin peruttu kirjoitus ei muutu valmiiksi laitakirjoitukseksi.
| 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 |
Miksi tiedostokuvaaja ei ole levylle kirjoitus
Käyttäjäavaruuden VPN vaihtaa paketteja ytimen kanssa TUN-laitteen kautta, joka on merkkipohjainen laite eikä tavallinen tiedosto. Siitä lukeminen luovuttaa paketin; siihen kirjoittaminen ruiskuttaa paketin. Tallennusta varten ei valmistella yhtään tiedoston sisällön sivua, eikä mukana ole yhtään tiedostojärjestelmän polkua.
Siksi kiireinen tunneli voi näyttää valtavia merkkilaskureita lähes ilman tallennuslaskureita. Prosessi todella siirsi ne tavut, eikä ydin todella tarvinnut levyä siihen.
cat /proc/$(pgrep -n openvpn)/io
ip -s link show tun0
Lue ensimmäinen tuloste kumulatiivisena prosessin käynnistymisestä, ei nopeutena. Toinen antaa saman liikenteen rajapintanäkymän. Suuri ero näiden kahden välillä on odotettavissa, eikä se osoita vuotoa, jonoa tai väärää kokoonpanoa.
Mistä tavut todella tulevat
Pysyvällä tulosteella on oma budjettinsa, ja sitä ohjaavat toiminnot, eivät hyötykuorma. Yksityiskohtainen lokitaso, usein muuttuva asiakasluettelo tai tiheässä silmukassa toistuva virhe voivat tuottaa merkittäviä kirjoituksia, kun tunneli kuljettaa hyvin vähän.
Tilatiedosto on välein uudelleenkirjoitettava tilannekuva, joten sen hinta riippuu välistä ja siitä, kuinka monta tietuetta se sisältää. Se ei ole jokaisen asiakkaan liikenteen juokseva kopio, ja välin lyhentäminen muuttaa kirjoitusmäärää muuttamatta liikennemäärää.
Omistajuus merkitsee, kun etsit niitä kirjoituksia. Jos palvelu luovuttaa viestit lokidaemonille, päiväkirjan tai lokitiedoston kirjoittaa se daemon, ja tavut näkyvät daemonin kirjanpidossa eivätkä VPN-prosessin omissa laskureissa. Pelkän VPN-prosessin katsominen ei selitä levyn toimintaa eikä sen puuttumista.
Muut tekijät on helppo jättää huomaamatta: varmenteiden ja kokoonpanon lukeminen käynnistyksessä, omia tietueitaan kirjoittavat koukut, kirjanpitoliitännäiset, kaatumisdumpit ja saman isännän riippumattomat työkuormat. Mitään niistä ei pitäisi arvioida rinnastamalla tunnelin liikennettä kirjoitettuihin tavuihin.
Jokaisen laskurin lukeminen oikein
Kolme yksityiskohtaa ratkaisee, tarkoittaako vertailu jotain. Prosessin identiteetti on tärkeä, koska uudelleenkäynnistetty palvelu nollaa laskurinsa. Aikaväli on tärkeä, koska kumulatiivinen luku ja sekuntikohtainen kaavio ovat eri mittauksia. Ja yksikkö on tärkeä, koska lokitiedoston nykyinen koko ei sekään ole nopeus.
grep -E 'rchar|wchar|read_bytes|write_bytes' /proc/$(pgrep -n openvpn)/io
du -sh /var/log/openvpn 2>/dev/null
journalctl --disk-usage
Jos epäilet todellisia hyötykuorman kirjoituksia, etsi komponentti, jonka tehtävä on tallentaa hyötykuormaa: paketinkaappaus työkalu, runkoja välimuistiin tallentava välityspalvelin, arkistoiva liitännäinen. Ne tuottavat tallennusliikennettä, joka skaalautuu sen mukaan, mitä niiltä pyydetään tallentaa, ja ne kuuluvat erilliseen säilytystä ja käyttöoikeutta koskevaan politiikkapäätökseen.
Kapasiteetin mitoitus oikealla luvulla
Mitoita pakettipolku verkkoluvuilla: läpäisykyky, salauskäsittely ja muistin liike. Mitoita tallennus niillä havaittavuusvalinnoilla, jotka todella teit: lokitaso, säilytys, tilaväli ja mikä tahansa tarkoituksella käytössä oleva kaappaus.
Näiden kahden budjetin erillään pitäminen helpottaa myös tapahtumien lukemista. Täysi levy vaatimattomalla tunneliliikenteellä osoittaa lokeihin, kaappauksiin tai johonkin riippumattomaan, eikä rajapinnan laskuri selitä sitä koskaan. Kyllästynyt linkki hiljaisella lokilla osoittaa toiseen suuntaan.
Vertailu, joka kannattaa tehdä, on samanlaisten mittausten välillä. Rajapinnan tavut rajapinnan tavuja vastaan ajan myötä kertovat polusta. Tallennuskirjoitukset tallennuskapasiteettia vastaan kertovat säilytyksestä. Ristivertailu, liikenne levyä vastaan, vain näyttää merkitykselliseltä eikä ole sitä koskaan.