Kaunter trafik OpenVPN lawan I/O cakera: tiga nombor berbeza
Bait antara muka, kaunter aksara proses dan tulisan storan mengukur kerja yang berbeza. Bandingkan sebelum menetapkan saiz cakera daripada isipadu terowong.
Bawa fail besar melalui terowong dan kaunter antara muka naik sebanyak saiz fail itu. Tiada apa dalam nombor itu bermakna isipadu yang sama sampai ke cakera. Tiga ukuran berbeza dibandingkan dalam perbincangan ini, dan ketiganya menjawab tiga soalan berbeza: berapa banyak trafik melintasi lapisan rangkaian, berapa bait yang dibaca dan ditulis oleh proses melalui panggilan sistem, dan berapa banyak kerja yang sampai ke lapisan storan.
Membandingkan yang pertama dengan yang ketiga ialah kesilapan lazim, dan ia menghasilkan sama ada masalah cakera hantu atau pelan kapasiti yang mengabaikan tulisan yang benar-benar berlaku. Ketiganya boleh dipisahkan, dan setiap satu mempunyai penggunaan yang betul.
Tiga nombor yang dikelirukan
Kaunter antara muka menerangkan trafik yang dikendalikan pada lapisan rangkaian. Ia adalah nombor yang betul untuk lebar jalur, untuk saiz terowong dan untuk model pengebilan yang meletakkan harga pada transit.
Kaunter aksara proses menerangkan bait yang dipindahkan melalui panggilan baca dan tulis pada mana-mana deskriptor, termasuk paip, terminal dan peranti aksara. Ia adalah nombor yang betul untuk bertanya berapa sibuk sesuatu proses pada sempadan panggilan sistem, dan ia bukan bil storan.
Kaunter storan menerangkan bait yang cuba dipindahkan oleh kernel ke atau dari peranti blok. Ia adalah nombor yang betul untuk perancangan kapasiti, dengan syarat kernel mendokumenkan had perakaunannya sendiri: bacaan yang dicache tidak menjadi bacaan storan, dan tulisan yang kemudiannya dibatalkan tidak menjadi tulisan peranti yang selesai.
| 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 |
Mengapa deskriptor fail bukan tulisan cakera
VPN ruang pengguna bertukar paket dengan kernel melalui peranti TUN, yang merupakan peranti aksara dan bukan fail biasa. Membacanya menyerahkan satu paket; menulisnya menyuntik satu paket. Tiada halaman kandungan fail yang disediakan untuk storan, dan tiada laluan sistem fail terlibat.
Sebab itulah terowong yang sibuk boleh menunjukkan kaunter aksara yang sangat besar dengan hampir tiada kaunter storan. Proses itu benar-benar memindahkan bait tersebut, dan kernel benar-benar tidak memerlukan cakera untuk berbuat demikian.
cat /proc/$(pgrep -n openvpn)/io
ip -s link show tun0
Baca keluaran pertama sebagai terkumpul sejak proses bermula, bukan sebagai kadar. Yang kedua memberikan pandangan antara muka bagi trafik yang sama. Jurang besar antara keduanya dijangka dan tidak menunjukkan kebocoran, baris gilir atau salah konfigurasi.
Dari mana bait itu sebenarnya datang
Keluaran berterusan mempunyai bajetnya sendiri, dan ia digerakkan oleh operasi dan bukan oleh muatan. Tahap log yang berjela, senarai klien yang sering berubah, atau ralat yang berulang dalam gelung ketat boleh menghasilkan tulisan yang besar sementara terowong membawa sangat sedikit.
Fail status ialah syot kilat yang ditulis semula pada selang tertentu, jadi kosnya bergantung pada selang dan pada berapa banyak rekod yang terkandung di dalamnya. Ia bukan salinan berjalan trafik setiap klien, dan memendekkan selang mengubah isipadu tulisan tanpa mengubah isipadu trafik.
Pemilikan penting apabila anda mencari tulisan itu. Jika perkhidmatan menyerahkan mesej kepada daemon log, jurnal atau fail log ditulis oleh daemon itu, dan bait muncul dalam perakaunan daemon itu dan bukan dalam kaunter proses VPN sendiri. Melihat hanya proses VPN tidak menjelaskan aktiviti cakera mahupun ketiadaannya.
Penyumbang lain mudah terlepas pandang: bacaan sijil dan konfigurasi semasa permulaan, cangkuk yang menulis rekod sendiri, pemalam perakaunan, longgokan ranap dan beban kerja tidak berkaitan pada hos yang sama. Tiada satu pun daripadanya patut dianggarkan dengan menyamakan trafik terowong dengan bait yang ditulis.
Membaca setiap kaunter dengan betul
Tiga butiran menentukan sama ada sesuatu perbandingan bermakna. Identiti proses penting, kerana perkhidmatan yang dimulakan semula menetapkan semula kauntornya. Selang masa penting, kerana angka terkumpul dan carta sesaat ialah ukuran yang berbeza. Dan unit penting, kerana saiz semasa fail log juga bukan kadar.
grep -E 'rchar|wchar|read_bytes|write_bytes' /proc/$(pgrep -n openvpn)/io
du -sh /var/log/openvpn 2>/dev/null
journalctl --disk-usage
Jika anda mengesyaki tulisan muatan sebenar, cari komponen yang tugasnya menyimpan muatan: alat tangkap paket, proksi yang menyimpan isi dalam cache, pemalam yang mengarkibkan. Semuanya menghasilkan trafik storan yang berskala dengan apa yang diminta untuk direkodkan, dan ia tergolong dalam keputusan dasar berasingan tentang penyimpanan dan akses.
Merancang kapasiti dengan nombor yang betul
Ukur laluan paket dengan angka rangkaian: daya pemprosesan, pemprosesan kriptografi dan pergerakan memori. Ukur storan dengan pilihan kebolehcerapan yang benar-benar anda buat: tahap log, penyimpanan, selang status dan sebarang tangkapan yang sengaja diaktifkan.
Mengasingkan kedua-dua bajet itu juga memudahkan pembacaan insiden. Cakera penuh dengan trafik terowong yang sederhana menunjuk kepada log, tangkapan atau sesuatu yang tidak berkaitan, dan kaunter antara muka tidak akan pernah menjelaskannya. Pautan tepu dengan log yang senyap menunjuk ke arah sebaliknya.
Perbandingan yang berbaloi dibuat ialah antara ukuran jenis yang sama. Bait antara muka lawan bait antara muka sepanjang masa memberitahu anda tentang laluan. Tulisan storan lawan kapasiti storan memberitahu anda tentang penyimpanan. Perbandingan silang, trafik lawan cakera, hanya kelihatan bermakna dan tidak pernah begitu.