یک فایل بزرگ را از تونل عبور دهید و شمارنده رابط به اندازه حجم فایل بالا می‌رود. هیچ چیز در آن عدد به این معنا نیست که همان حجم به دیسک رسیده است. در این بحث‌ها سه اندازه‌گیری متفاوت با هم مقایسه می‌شوند و به سه پرسش متفاوت پاسخ می‌دهند: چه مقدار ترافیک از یک لایه شبکه گذشته است، یک فرایند چه تعداد بایت را از طریق فراخوان‌های سیستمی خوانده و نوشته است، و چه مقدار کار به لایه ذخیره‌سازی رسیده است.

مقایسه اولی با سومی اشتباه معمول است و یا یک مشکل دیسک خیالی می‌سازد یا طرح ظرفیتی که نوشتن‌های واقعی را نادیده می‌گیرد. این سه از هم جدا شدنی‌اند و هر یک کاربرد درست خود را دارد.

سه عددی که با هم اشتباه می‌شوند

شمارنده‌های رابط، ترافیکی را توصیف می‌کنند که در یک لایه شبکه پردازش می‌شود. آن‌ها عدد درست برای پهنای باند، اندازه تونل و مدل‌های صورت‌حسابی‌اند که برای عبور قیمت می‌گذارند.

شمارنده‌های نویسه فرایند، بایت‌هایی را توصیف می‌کنند که از طریق فراخوان‌های خواندن و نوشتن روی هر توصیفگر جابه‌جا شده‌اند، از جمله لوله‌ها، پایانه‌ها و دستگاه‌های نویسه. آن‌ها عدد درست برای پرسیدن این‌اند که یک فرایند در مرز فراخوان سیستمی چقدر مشغول است، و صورت‌حساب ذخیره‌سازی نیستند.

شمارنده‌های ذخیره‌سازی، بایت‌هایی را توصیف می‌کنند که هسته تلاش کرده آن‌ها را به یک دستگاه بلوکی یا از آن منتقل کند. آن‌ها عدد درست برای برنامه‌ریزی ظرفیت‌اند، با این شرط که هسته محدودیت‌های حسابداری خودش را مستند می‌کند: خواندن‌های نهان‌شده به خواندن ذخیره‌سازی تبدیل نمی‌شوند، و نوشتنی که بعداً لغو شود به نوشتن کامل‌شده روی دستگاه تبدیل نمی‌شود.

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

اگر به نوشتن واقعی بار مفید مشکوک هستید، به دنبال مؤلفه‌ای بگردید که کارش ذخیره بار مفید است: ابزار ضبط بسته، پروکسی‌ای که بدنه‌ها را نهان می‌کند، افزونه‌ای که بایگانی می‌کند. این‌ها ترافیک ذخیره‌سازی تولید می‌کنند که با آنچه از آن‌ها خواسته می‌شود ثبت کنند مقیاس می‌گیرد، و به تصمیم سیاستی جداگانه‌ای درباره نگهداری و دسترسی تعلق دارند.

برنامه‌ریزی ظرفیت با عدد درست

مسیر بسته را با اعداد شبکه اندازه بگیرید: توان عملیاتی، پردازش رمزنگاری و جابه‌جایی حافظه. ذخیره‌سازی را با انتخاب‌های رصدپذیری که واقعاً انجام داده‌اید اندازه بگیرید: سطح گزارش، نگهداری، فاصله وضعیت، و هر ضبطی که آگاهانه فعال شده است.

جدا نگه داشتن این دو بودجه خواندن رخدادها را هم آسان‌تر می‌کند. دیسک پر با ترافیک تونل میانه به گزارش‌ها، ضبط‌ها یا چیزی نامرتبط اشاره می‌کند، و شمارنده رابط هرگز آن را توضیح نخواهد داد. پیوند اشباع‌شده با گزارش آرام به سمت دیگر اشاره می‌کند.

مقایسه‌ای که ارزش انجام دادن دارد میان اندازه‌گیری‌های هم‌نوع است. بایت‌های رابط در برابر بایت‌های رابط در طول زمان از مسیر می‌گوید. نوشتن‌های ذخیره‌سازی در برابر ظرفیت ذخیره‌سازی از نگهداری می‌گوید. مقایسه متقاطع، ترافیک در برابر دیسک، فقط معنادار به نظر می‌رسد و هرگز نیست.

مقالات مرتبط