#network_time
🚀 چطور ترافیک بالا CPU رو از پا در نمیآره؟
تا حالا شده فکر کنی وقتی یه فایل خیلی حجیم رو توی شبکه میفرستی، CPU باید تکتک اون packetهای ریز رو آماده کنه و Headerهاشون رو بسازه؟ اگه اینطوری بود، با بالا رفتن سرعت شبکه، مصرف CPU به شدت بالا میرفت. برای حل این مشکل از مکانیزمهای offload مثل TSO، GSO و GRO استفاده میکنیم که وظیفه segmentation رو از دوش CPU برمیدارن.
نکته اصلی اینجاست که در حالت عادی، kernel باید یه payload بزرگ رو بر اساس MTU به قطعات کوچیکتر تقسیم کنه و برای هر کدوم checksum و header جداگانه محاسبه کنه. اما با TSO، kernel یه packet خیلی بزرگ رو با یه Header اولیه به NIC میسپره و خودِ سختافزار کارت شبکه وظیفه داره اون رو به segmentهای کوچیکتر تقسیم کنه و Headerهای جدید رو اضافه کنه. اگه کارت شبکه از این قابلیت پشتیبانی نکنه، GSO توی خودِ kernel این کار رو با کمترین هزینه انجام میده تا تقسیمبندی رو تا آخرین لحظه عقب بندازه. از اون طرف، وقتی دادهها میرسن، GRO برعکس عمل میکنه؛ یعنی چند تا packet کوچیک که مال یه flow هستن رو با هم ترکیب میکنه تا kernel مجبور نباشه برای هر کدوم جداگانه پردازش انجام بده.
نتیجهش اینه که تعداد interruptهایی که به CPU میرسه خیلی کم میشه و پردازش network stack خیلی سریعتر انجام میشه. اگه بخوای وضعیت این قابلیتها رو بررسی کنی، میتونی از ابزارهای مربوط به تنظیمات کارت شبکه استفاده کنی، چون توی سرورهای پرسرعت، مدیریت درست این offloadها برای حفظ performance خیلی حیاتیه.
❓ تا حالا شده با فعال بودن این offloadها توی شبکه به مشکل بخورین یا مثلا با غیرفعال کردنشون عملکرد سیستم رو بهتر کنین؟ تجربهتون رو برامون تو کامنتا بنویسین
@things_to_know_channel
Post #442
375
- ❤ 4
- 👍 1
- 🔥 1
- 👏 1