გაატარეთ დიდი ფაილი ტუნელში და ინტერფეისის მრიცხველი ფაილის ზომით გაიზრდება. ამ რიცხვში არაფერი ნიშნავს, რომ იგივე მოცულობამ დისკს მიაღწია. ამ საუბრებში სამი განსხვავებული გაზომვა შედარებულია და ისინი სამ განსხვავებულ კითხვას პასუხობენ: რამდენმა ტრაფიკმა გადაკვეთა ქსელური ფენა, რამდენი ბაიტი წაიკითხა და ჩაწერა პროცესმა სისტემური გამოძახებებით, და რამდენმა სამუშაომ მიაღწია შენახვის ფენას.

პირველის მესამესთან შედარება ჩვეულებრივი შეცდომაა და ის ან მოჩვენებით დისკურ პრობლემას ქმნის, ან სიმძლავრის გეგმას, რომელიც უგულებელყოფს რეალურად მომხდარ ჩაწერებს. სამივე განცალკევებადია და თითოეულს სწორი გამოყენება აქვს.

სამი რიცხვი, რომლებიც ერევა

ინტერფეისის მრიცხველები აღწერენ ტრაფიკს, რომელიც ქსელურ ფენაზე მუშავდება. ისინი სწორი რიცხვია გამტარობისთვის, ტუნელის ზომისთვის და სატრანზიტო გადასახადის მოდელებისთვის.

პროცესის სიმბოლოთა მრიცხველები აღწერენ ბაიტებს, რომლებიც გადატანილია ნებისმიერ დესკრიპტორზე კითხვისა და ჩაწერის გამოძახებებით, მათ შორის მილები, ტერმინალები და სიმბოლური მოწყობილობები. ისინი სწორი რიცხვია კითხვისთვის, რამდენად დაკავებულია პროცესი სისტემური გამოძახების საზღვარზე, და ისინი შენახვის ანგარიში არ არის.

შენახვის მრიცხველები აღწერენ ბაიტებს, რომლებიც ბირთვმა სცადა ბლოკურ მოწყობილობაში ან იქიდან გადაეტანა. ისინი სწორი რიცხვია სიმძლავრის დაგეგმვისთვის, იმ დათქმით, რომ ბირთვი ადასტურებს თავისივე აღრიცხვის საზღვრებს: ქეშირებული კითხვები შენახვის კითხვებად არ იქცევა, და მოგვიანებით გაუქმებული ჩაწერა დასრულებულ მოწყობილობის ჩაწერად არ იქცევა.

MeasurementQuestion it answers
Interface bytesHow much traffic crossed this layer
rchar and wcharHow much data the process moved through system calls
read_bytes and write_bytesHow much work reached the storage layer

რატომ არ არის ფაილის დესკრიპტორი დისკზე ჩაწერა

მომხმარებლის სივრცის VPN ბირთვთან პაკეტებს TUN მოწყობილობის მეშვეობით ცვლის, რომელიც სიმბოლური მოწყობილობაა და არა ჩვეულებრივი ფაილი. მისგან კითხვა პაკეტს გადასცემს; მასში ჩაწერა პაკეტს უშვებს. შენახვისთვის მომზადებული ფაილის შიგთავსის გვერდი არ არსებობს და ფაილური სისტემის ბილიკი არ მონაწილეობს.

ამიტომ დაკავებულმა ტუნელმა შეიძლება უზარმაზარი სიმბოლოთა მრიცხველები აჩვენოს თითქმის შენახვის მრიცხველების გარეშე. პროცესმა ნამდვილად გადაიტანა ის ბაიტები და ბირთვს ნამდვილად არ სჭირდებოდა დისკი ამისთვის.

cat /proc/$(pgrep -n openvpn)/io
ip -s link show tun0

პირველი გამოსავალი წაიკითხეთ როგორც პროცესის დაწყებიდან დაგროვილი, და არა როგორც სიჩქარე. მეორე იმავე ტრაფიკის ინტერფეისურ ხედს იძლევა. მათ შორის დიდი სხვაობა მოსალოდნელია და არ მიუთითებს გაჟონვაზე, რიგზე ან არასწორ კონფიგურაციაზე.

საიდან მოდის ბაიტები სინამდვილეში

მუდმივ გამოსავალს საკუთარი ბიუჯეტი აქვს და მას ოპერაციები მართავენ, არა დატვირთვა. დეტალური ჟურნალის დონე, ხშირად ცვალებადი კლიენტების სია ან ვიწრო ციკლში განმეორებადი შეცდომა შეიძლება მნიშვნელოვანი ჩაწერები შექმნას, სანამ ტუნელი ძალიან ცოტას გადააქვს.

სტატუსის ფაილი ინტერვალით გადაწერილი კადრია, ამიტომ მისი ღირებულება დამოკიდებულია ინტერვალზე და იმაზე, რამდენ ჩანაწერს შეიცავს. ის ყოველი კლიენტის ტრაფიკის მიმდინარე ასლი არ არის და ინტერვალის შემცირება ჩაწერის მოცულობას ცვლის ტრაფიკის მოცულობის შეცვლის გარეშე.

მესაკუთრებას მნიშვნელობა აქვს, როცა ამ ჩაწერებს ეძებთ. თუ სერვისი შეტყობინებებს ჟურნალის დემონს გადასცემს, ჟურნალი ან ჟურნალის ფაილი სწორედ იმ დემონს უწერია და ბაიტები დემონის აღრიცხვაში ჩნდება და არა VPN პროცესის საკუთარ მრიცხველებში. მხოლოდ VPN პროცესზე ყურება ვერ ხსნის ვერც დისკის აქტივობას და ვერც მის არქონას.

სხვა წვლილის მქონეები ადვილად გამორჩენია: სერტიფიკატებისა და კონფიგურაციის კითხვა გაშვებისას, საკუთარი ჩანაწერების მწერი კაუჭები, აღრიცხვის დანამატები, ავარიული დამპები და იმავე ჰოსტზე დაუკავშირებელი დატვირთვები. არცერთი მათგანი არ უნდა შეფასდეს ტუნელის ტრაფიკის ჩაწერილ ბაიტებთან გათანაბრებით.

თითოეული მრიცხველის სწორად კითხვა

სამი დეტალი განსაზღვრავს, აქვს თუ არა შედარებას აზრი. პროცესის იდენტობა მნიშვნელოვანია, რადგან გადატვირთული სერვისი თავის მრიცხველებს ნულამდე აყენებს. დროის ინტერვალი მნიშვნელოვანია, რადგან დაგროვილი რიცხვი და წამში გრაფიკი სხვადასხვა გაზომვაა. და ერთეული მნიშვნელოვანია, რადგან ჟურნალის ფაილის მიმდინარე ზომაც სიჩქარე არ არის.

grep -E 'rchar|wchar|read_bytes|write_bytes' /proc/$(pgrep -n openvpn)/io
du -sh /var/log/openvpn 2>/dev/null
journalctl --disk-usage

თუ ეჭვი გაქვთ რეალურ დატვირთვის ჩაწერებზე, მოძებნეთ კომპონენტი, რომლის საქმეც დატვირთვის შენახვაა: პაკეტების აღების ხელსაწყო, სხეულებს ქეშირებადი პროქსი, არქივირებადი დანამატი. ისინი ქმნიან შენახვის ტრაფიკს, რომელიც იზრდება იმის მიხედვით, თუ რის ჩაწერას სთხოვენ, და ისინი ცალკე პოლიტიკურ გადაწყვეტილებას განეკუთვნება შენარჩუნებისა და წვდომის შესახებ.

სიმძლავრის დაგეგმვა სწორი რიცხვით

გაზომეთ პაკეტის ბილიკი ქსელური რიცხვებით: გამტარუნარიანობა, კრიპტოგრაფიული დამუშავება და მეხსიერების მოძრაობა. გაზომეთ შენახვა იმ დაკვირვებადობის არჩევანით, რომელიც ნამდვილად გააკეთეთ: ჟურნალის დონე, შენარჩუნება, სტატუსის ინტერვალი და ნებისმიერი განზრახ ჩართული აღება.

ამ ორი ბიუჯეტის განცალკევება ინციდენტების წაკითხვასაც აადვილებს. სავსე დისკი ზომიერი ტუნელური ტრაფიკით მიუთითებს ჟურნალებზე, აღებებზე ან რაღაც დაუკავშირებელზე და ინტერფეისის მრიცხველი ამას ვერასოდეს ხსნის. გაჯერებული კავშირი წყნარი ჟურნალით საპირისპირო მიმართულებაზე მიუთითებს.

შედარება, რომლის გაკეთებაც ღირს, ერთი და იმავე ტიპის გაზომვებს შორისაა. ინტერფეისის ბაიტები ინტერფეისის ბაიტების წინააღმდეგ დროში გიყვებიან ბილიკზე. შენახვის ჩაწერები შენახვის სიმძლავრის წინააღმდეგ გიყვებიან შენარჩუნებაზე. ჯვარედინი შედარება, ტრაფიკი დისკის წინააღმდეგ, მხოლოდ შინაარსიანად გამოიყურება და არასოდეს არის.

დაკავშირებული სტატიები