OpenVPN srauto skaitikliai prieš disko I/O: trys skirtingi skaičiai
Sąsajos baitai, proceso ženklų skaitikliai ir įrašymai į diską matuoja skirtingą darbą. Palyginkite juos prieš planuodami diskus pagal tunelio tūrį.
Praleiskite didelį failą per tunelį ir sąsajos skaitiklis išaugs failo dydžiu. Niekas tame skaičiuje nereiškia, kad tas pats tūris pasiekė diską. Šiose diskusijose lyginami trys skirtingi matavimai, ir jie atsako į tris skirtingus klausimus: kiek srauto kirto tinklo sluoksnį, kiek baitų procesas perskaitė ir įrašė per sistemos iškvietimus, ir kiek darbo pasiekė saugojimo sluoksnį.
Pirmąjį lyginti su trečiuoju yra įprasta klaida, ir ji sukuria arba vaiduoklišką disko problemą, arba talpos planą, kuris nepaiso įrašymų, kurie iš tikrųjų vyksta. Visi trys yra atskiriami, ir kiekvienas turi teisingą naudojimą.
Trys skaičiai, kurie supainiojami
Sąsajos skaitikliai aprašo srautą, apdorojamą tinklo sluoksnyje. Jie yra teisingas skaičius pralaidumui, tunelio dydžiui ir atsiskaitymo modeliams, kurie įkainoja tranzitą.
Proceso ženklų skaitikliai aprašo baitus, perkeltus skaitymo ir rašymo iškvietimais bet kuriame deskriptoriuje, įskaitant vamzdžius, terminalus ir ženklų įrenginius. Jie yra teisingas skaičius klausimui, kiek procesas užimtas sistemos iškvietimo riboje, ir jie nėra saugojimo sąskaita.
Saugojimo skaitikliai aprašo baitus, kuriuos branduolys bandė perkelti į blokinį įrenginį arba iš jo. Jie yra teisingas skaičius talpos planavimui, su išlyga, kad branduolys dokumentuoja savo paties apskaitos ribas: podėlyje laikomi skaitymai netampa saugojimo skaitymais, o vėliau atšauktas įrašymas netampa užbaigtu įrenginio įrašymu.
| 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 |
Kodėl failo deskriptorius nėra įrašymas į diską
Naudotojo erdvės VPN keičiasi paketais su branduoliu per TUN įrenginį, kuris yra ženklų įrenginys, o ne įprastas failas. Skaitymas iš jo perduoda paketą; rašymas į jį įterpia paketą. Nėra jokio failo turinio puslapio, ruošiamo saugojimui, ir joks failų sistemos kelias nėra susijęs.
Štai kodėl užimtas tunelis gali rodyti didžiulius ženklų skaitiklius beveik be saugojimo skaitiklių. Procesas tikrai perkėlė tuos baitus, ir branduoliui tikrai nereikėjo disko tam atlikti.
cat /proc/$(pgrep -n openvpn)/io
ip -s link show tun0
Pirmą išvestį skaitykite kaip sukauptą nuo proceso paleidimo, o ne kaip spartą. Antroji duoda to paties srauto sąsajos vaizdą. Didelis tarpas tarp jų yra tikėtinas ir nereiškia nuotėkio, eilės ar neteisingos konfigūracijos.
Iš kur baitai iš tikrųjų ateina
Nuolatinė išvestis turi savo biudžetą, ir jį varo operacijos, o ne naudingoji apkrova. Išsamus žurnalo lygis, dažnai besikeičiantis klientų sąrašas arba klaida, kuri kartojasi ankštoje kilpoje, gali sukurti didelius įrašymus, kol tunelis neša labai mažai.
Būsenos failas yra momentinė kopija, perrašoma kas tam tikrą intervalą, todėl jo kaina priklauso nuo intervalo ir nuo įrašų skaičiaus. Tai nėra nuolatinė kiekvieno kliento srauto kopija, o intervalo sutrumpinimas keičia įrašymo apimtį nekeičiant srauto apimties.
Nuosavybė svarbi, kai ieškote tų įrašymų. Jei paslauga perduoda pranešimus žurnalų demonui, žurnalą ar žurnalo failą rašo tas demonas, ir baitai atsiranda demono apskaitoje, o ne paties VPN proceso skaitikliuose. Žiūrėjimas tik į VPN procesą nepaaiškina nei disko aktyvumo, nei jo nebuvimo.
Kitus indėlininkus lengva nepastebėti: sertifikatų ir konfigūracijos skaitymas paleidimo metu, kabliukai, rašantys savo įrašus, apskaitos papildiniai, strigties atminties išklotinės ir nesusiję darbo krūviai tame pačiame hoste. Nė vieno jų nereikėtų vertinti prilyginant tunelio srautą įrašytiems baitams.
Teisingai skaityti kiekvieną skaitiklį
Trys detalės nusprendžia, ar palyginimas ką nors reiškia. Proceso tapatybė svarbi, nes paleista iš naujo paslauga atstato savo skaitiklius. Laiko intervalas svarbus, nes sukauptas skaičius ir grafikas per sekundę yra skirtingi matavimai. Ir vienetas svarbus, nes dabartinis žurnalo failo dydis taip pat nėra sparta.
grep -E 'rchar|wchar|read_bytes|write_bytes' /proc/$(pgrep -n openvpn)/io
du -sh /var/log/openvpn 2>/dev/null
journalctl --disk-usage
Jei įtariate tikrus naudingosios apkrovos įrašymus, ieškokite komponento, kurio užduotis yra saugoti naudingąją apkrovą: paketų gaudymo įrankio, tarpinio serverio, kuris podėlyje laiko turinį, papildinio, kuris archyvuoja. Jie sukuria saugojimo srautą, kuris didėja pagal tai, ką jų prašoma įrašyti, ir priklauso atskiram politikos sprendimui dėl saugojimo trukmės ir prieigos.
Talpos planavimas su teisingu skaičiumi
Matuokite paketų kelią tinklo skaičiais: pralaidumu, kriptografiniu apdorojimu ir atminties judėjimu. Matuokite saugojimą tais stebimumo sprendimais, kuriuos iš tikrųjų priėmėte: žurnalo lygiu, saugojimo trukme, būsenos intervalu ir bet kokiu sąmoningai įjungtu gaudymu.
Šių dviejų biudžetų atskyrimas taip pat palengvina incidentų skaitymą. Pilnas diskas su kukliu tunelio srautu nurodo žurnalus, gaudymus ar ką nors nesusijusio, ir sąsajos skaitiklis to niekada nepaaiškins. Prisotintas ryšys su tyliu žurnalu nurodo priešingą pusę.
Palyginimas, kurį verta daryti, yra tarp tos pačios rūšies matavimų. Sąsajos baitai prieš sąsajos baitus laikui bėgant pasako apie kelią. Saugojimo įrašymai prieš saugojimo talpą pasako apie saugojimo trukmę. Skersinis palyginimas, srautas prieš diską, tik atrodo prasmingas ir niekada toks nėra.