System Buffer Tuning - TCP and Network Performance Optimization

# Check NIC ring buffer sizes ethtool -g eth0 # Monitor socket buffer usage ss -tm # Check for TCP zero window events tcpdump -i any 'tcp[tcpflags] & tcp-push != 0' -vv # Check network statistics for buffer issues netstat -s | grep -i "buffer\|queue\|drop"

تشخيصات ويندوز

# Check TCP parameters
netsh interface tcp show global

# View network adapter buffer settings
Get-NetAdapterAdvancedProperty -Name "Ethernet" | Where-Object {$_.DisplayName -like "*buffer*"}

# Monitor TCP statistics
netstat -s -p tcp

# Check receive window auto-tuning
netsh interface tcp show global | findstr "Receive Window"

تشخيصات نظام التشغيل MacOS

# Check current buffer settings
sysctl kern.ipc.maxsockbuf
sysctl net.inet.tcp.sendspace
sysctl net.inet.tcp.recvspace

# View network statistics
netstat -s -p tcp

# Monitor socket buffers
netstat -an -p tcp

ضبط المخزن المؤقت لينكس

إعدادات Linux القديمة (حوالي 2009)

المعلمة القيمة التراثية (2009) وصف
net.core.rmem_default 124928 (122 كيلو بايت) حجم المخزن المؤقت لمأخذ التوصيل الافتراضي
net.core.rmem_max 131071 (128 كيلو بايت) الحد الأقصى لحجم المخزن المؤقت لمأخذ التوصيل
net.core.wmem_default 124928 (122 كيلو بايت) حجم المخزن المؤقت لمأخذ الإرسال الافتراضي
net.core.wmem_max 131071 (128 كيلو بايت) الحد الأقصى لحجم المخزن المؤقت لمأخذ الإرسال
net.ipv4.tcp_rmem 4096 87380 174760 المخزن المؤقت لاستقبال TCP: الحد الأدنى، الافتراضي، الحد الأقصى (بالبايت)
net.ipv4.tcp_wmem 4096 16384 131072 المخزن المؤقت لإرسال TCP: الحد الأدنى، الافتراضي، الحد الأقصى (بالبايت)
net.ipv4.tcp_mem 196608 262144 393216 صفحات ذاكرة TCP: منخفض، ضغط، مرتفع
net.core.netdev_max_backlog 1000 الحد الأقصى للحزم في قائمة انتظار الإدخال
net.core.optmem_max 10240 (10 كيلو بايت) الحد الأقصى لحجم المخزن المؤقت الإضافي لكل مقبس

إعدادات Linux الحالية (2025-2026)

المعلمة القيمة الموصى بها الحالية وصف
net.core.rmem_default 16777216 (16 ميجابايت) حجم المخزن المؤقت لمأخذ التوصيل الافتراضي
net.core.rmem_max 134217728 (128 ميجابايت) الحد الأقصى لحجم المخزن المؤقت لمأخذ التوصيل
net.core.wmem_default 16777216 (16 ميجابايت) حجم المخزن المؤقت لمأخذ الإرسال الافتراضي
net.core.wmem_max 134217728 (128 ميجابايت) الحد الأقصى لحجم المخزن المؤقت لمأخذ الإرسال
net.ipv4.tcp_rmem 4096 87380 134217728 المخزن المؤقت لاستقبال TCP: الحد الأدنى، الافتراضي، الحد الأقصى (128 ميجابايت كحد أقصى)
net.ipv4.tcp_wmem 4096 65536 134217728 المخزن المؤقت لإرسال TCP: الحد الأدنى، الافتراضي، الحد الأقصى (128 ميجابايت كحد أقصى)
net.ipv4.tcp_mem 8388608 12582912 16777216 صفحات ذاكرة TCP: منخفض، ضغط، مرتفع (نظام 64 جيجابايت)
net.core.netdev_max_backlog 250000 الحد الأقصى للحزم في قائمة انتظار الإدخال (10 جيجابت +)
net.core.optmem_max 65536 (64 كيلو بايت) الحد الأقصى لحجم المخزن المؤقت الإضافي لكل مقبس
net.ipv4.tcp_congestion_control bbr استخدم التحكم في ازدحام BBR (خوارزمية Google)
net.ipv4.tcp_window_scaling 1 تمكين تحجيم نافذة TCP (RFC 1323)
net.ipv4.tcp_timestamps 1 تمكين الطوابع الزمنية لـ TCP للحصول على تقدير RTT أفضل
net.ipv4.tcp_sack 1 تمكين الإقرار الانتقائي
net.ipv4.tcp_no_metrics_save 1 تعطيل التخزين المؤقت لمقاييس TCP

تطبيق تكوين لينكس

أضف هذه الإعدادات إلى/etc/sysctl.confأو إنشاء ملف جديد/etc/sysctl.d/99-network-tuning.conf:

# Network Buffer Tuning for High-Performance Applications
# Optimized for 10GbE+ networks with RTT up to 300ms

# Core socket buffer settings
net.core.rmem_default = 16777216
net.core.rmem_max = 134217728
net.core.wmem_default = 16777216
net.core.wmem_max = 134217728

# TCP buffer settings
net.ipv4.tcp_rmem = 4096 87380 134217728
net.ipv4.tcp_wmem = 4096 65536 134217728
net.ipv4.tcp_mem = 8388608 12582912 16777216

# Device buffer settings
net.core.netdev_max_backlog = 250000
net.core.netdev_budget = 50000
net.core.netdev_budget_usecs = 5000
net.core.optmem_max = 65536

# TCP optimizations
net.ipv4.tcp_congestion_control = bbr
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_timestamps = 1
net.ipv4.tcp_sack = 1
net.ipv4.tcp_no_metrics_save = 1
net.ipv4.tcp_moderate_rcvbuf = 1

# Apply with: sysctl -p /etc/sysctl.d/99-network-tuning.conf

ضبط المخزن المؤقت الدائري لـ NIC

# Check current ring buffer sizes
ethtool -g eth0

# Set maximum ring buffer sizes (adjust based on NIC capabilities)
ethtool -G eth0 rx 4096 tx 4096

# Make persistent by adding to /etc/network/interfaces or systemd service
تحذير بالغ الأهمية - استهلاك الذاكرة:توجد قيم tcp_mem في صفحات الذاكرة (عادةً 4 كيلو بايت). يمكن أن تسبب أحجام المخزن المؤقت الكبيرة ضغطًا شديدًا على الذاكرة:
  • الذاكرة لكل اتصال:يمكن لكل اتصال استخدام ما يصل إلى rmem_max + wmem_max (256 ميجا بايت مع مخازن مؤقتة 128 ميجا بايت)
  • إجمالي تأثير النظام:1000 اتصال × 256 ميجا بايت = 256 جيجا بايت استخدام محتمل
  • تقدير آمن:يجب ألا يتجاوز الحد الأقصى للاتصالات المتزامنة × 256 ميجابايت 50% من ذاكرة الوصول العشوائي للنظام
  • مثال:يجب أن يحد الخادم سعة 64 جيجابايت من الحد الأقصى للاتصالات إلى 125 اتصالًا متزامنًا عالي الإنتاجية مع مخازن مؤقتة تبلغ سعتها 128 ميجابايت
  • توصية للخوادم ذات ذاكرة الوصول العشوائي (RAM) التي تقل عن 16 جيجابايت:قم بتقليل المخازن المؤقتة إلى 16-32 ميجابايت كحد أقصى واضبط tcp_mem بشكل متناسب

ضبط المخزن المؤقت ويندوز

إعدادات Windows القديمة (حوالي 2009 - Windows Vista/7/Server 2008)

المعلمة القيمة التراثية (2009) موقع
TcpWindowSize 65535 (64 كيلو بايت) التسجيل: HKLM\System\CurrentControlSet\Services\Tcpip\Parameters
Tcp1323أوبتس 0 (معطل) تم تعطيل تحجيم النافذة بشكل افتراضي
DefaultReceiveWindow 8192 (8 كيلو بايت) نافذة الاستلام الافتراضية
DefaultSendWindow 8192 (8 كيلو بايت) نافذة الإرسال الافتراضية
GlobalMaxTcpWindowSize 65535 (64 كيلو بايت) الحد الأقصى لحجم نافذة TCP
TcpNumConnections 16777214 الحد الأقصى لاتصالات TCP

إعدادات Windows الحالية (Windows 10/11/Server 2019-2025)

يستخدم نظام Windows الحديثتلقي الضبط التلقائي للنافذةالميزة، التي تقوم بضبط المخازن المؤقتة للتلقي ديناميكيًا بناءً على ظروف الشبكة.

ميزة الإعداد الموصى به الحالي وصف
مستوى الضبط التلقائي عادي (أو تجريبي للغاية لـ 10GbE+) تعديل نافذة الاستلام الديناميكي
تحجيم جانب الاستقبال (RSS) ممكن توزيع معالجة الشبكة عبر وحدات المعالجة المركزية (CPUs).
تفريغ المدخنة تلقائي (أو معطل في بطاقات NIC الحديثة) إلغاء تحميل TCP إلى أجهزة NIC
NetDMA عاجز الوصول المباشر إلى الذاكرة (مهمل)
معلمات TCP العالمية انظر الأوامر أدناه إعدادات TCP على مستوى النظام
مزود الازدحام مكعب (أو احتياطي NewReno) خوارزمية التحكم في ازدحام TCP

أوامر تكوين ويندوز

# Check current auto-tuning level
netsh interface tcp show global

# Enable auto-tuning (normal mode - default for most scenarios)
netsh interface tcp set global autotuninglevel=normal

# For high-bandwidth, high-latency networks (10GbE+, data center environments)
netsh interface tcp set global autotuninglevel=experimental

# For conservative tuning (if experimental causes issues)
netsh interface tcp set global autotuninglevel=restricted

# For very conservative tuning (not recommended for high-performance networks)
netsh interface tcp set global autotuninglevel=highlyrestricted

# Enable CUBIC congestion provider (Windows Server 2022/Windows 11+ only)
netsh interface tcp set supplemental template=Internet congestionprovider=cubic

# Note: Windows 10 and Server 2019 use Compound TCP or NewReno by default
# CUBIC is not available on these older versions

# Enable Receive-Side Scaling (RSS)
netsh interface tcp set global rss=enabled

# Set chimney offload (automatic is recommended)
netsh interface tcp set global chimney=automatic

# Disable NetDMA (recommended for modern systems)
netsh interface tcp set global netdma=disabled

# Enable Direct Cache Access (if supported)
netsh interface tcp set global dca=enabled

# Enable ECN (Explicit Congestion Notification)
netsh interface tcp set global ecncapability=enabled

# Set initial congestion window to 10 (RFC 6928)
netsh interface tcp set global initialRto=3000

إعدادات المخزن المؤقت لـ NIC المتقدمة (عبر إدارة الأجهزة أو PowerShell)

# View current adapter settings
Get-NetAdapterAdvancedProperty -Name "Ethernet"

# Increase receive buffers (adjust based on NIC)
Set-NetAdapterAdvancedProperty -Name "Ethernet" -DisplayName "Receive Buffers" -DisplayValue 2048

# Increase transmit buffers
Set-NetAdapterAdvancedProperty -Name "Ethernet" -DisplayName "Transmit Buffers" -DisplayValue 2048

# Enable Jumbo Frames (if network supports it)
Set-NetAdapterAdvancedProperty -Name "Ethernet" -DisplayName "Jumbo Packet" -DisplayValue 9014

# Enable Large Send Offload (LSO)
Set-NetAdapterAdvancedProperty -Name "Ethernet" -DisplayName "Large Send Offload V2 (IPv4)" -DisplayValue Enabled
Set-NetAdapterAdvancedProperty -Name "Ethernet" -DisplayName "Large Send Offload V2 (IPv6)" -DisplayValue Enabled

تعديلات التسجيل (متقدمة - استخدمها بحذر)

# These settings are typically NOT needed on Windows 10/11 due to auto-tuning
# Only modify if auto-tuning is disabled or problematic

# Registry path: HKLM\System\CurrentControlSet\Services\Tcpip\Parameters

# Maximum TCP window size (if auto-tuning disabled)
# TcpWindowSize = 16777216 (16MB) - REG_DWORD

# Enable window scaling (enabled by default on modern Windows)
# Tcp1323Opts = 3 - REG_DWORD

# Number of TCP Timed Wait Delay
# TcpTimedWaitDelay = 30 - REG_DWORD (default 240)
تحذير:في نظام التشغيل Windows الحديث (10/11/Server 2019+)، تجنب تعديلات التسجيل اليدوية ما لم يتسبب الضبط التلقائي في حدوث مشكلات. تتفوق خوارزميات الضبط التلقائي عمومًا على الإعدادات الثابتة.

ضبط المخزن المؤقت لنظام التشغيل MacOS

إعدادات macOS القديمة (حوالي 2009 - Mac OS X 10.5/10.6)

المعلمة القيمة التراثية (2009) وصف
kern.ipc.maxsockbuf 262144 (256 كيلو بايت) الحد الأقصى لحجم المخزن المؤقت للمأخذ
net.inet.tcp.sendspace 32768 (32 كيلو بايت) المخزن المؤقت الافتراضي لإرسال TCP
net.inet.tcp.recvspace 32768 (32 كيلو بايت) المخزن المؤقت لتلقي TCP الافتراضي
net.inet.tcp.autorcvbufmax 131072 (128 كيلو بايت) الحد الأقصى لمخزن الاستقبال المؤقت الذي تم ضبطه تلقائيًا
net.inet.tcp.autosndbufmax 131072 (128 كيلو بايت) الحد الأقصى لمخزن الإرسال المؤقت المضبوط تلقائيًا
net.inet.tcp.rfc1323 0 (معطل) تحجيم نافذة TCP

إعدادات macOS الحالية (macOS 12-15 Monterey حتى Sequoia)

المعلمة القيمة الموصى بها الحالية وصف
kern.ipc.maxsockbuf 8388608 (8 ميجابايت) الحد الأقصى لحجم المخزن المؤقت للمأخذ
net.inet.tcp.sendspace 131072 (128 كيلو بايت) المخزن المؤقت الافتراضي لإرسال TCP
net.inet.tcp.recvspace 131072 (128 كيلو بايت) المخزن المؤقت لتلقي TCP الافتراضي
net.inet.tcp.autorcvbufmax 16777216 (16 ميجابايت) الحد الأقصى لمخزن الاستقبال المؤقت الذي تم ضبطه تلقائيًا
net.inet.tcp.autosndbufmax 16777216 (16 ميجابايت) الحد الأقصى لمخزن الإرسال المؤقت المضبوط تلقائيًا
net.inet.tcp.rfc1323 1 (ممكّن) تمكين تحجيم نافذة TCP
net.inet.tcp.sack 1 (ممكّن) تمكين الإقرار الانتقائي
net.inet.tcp.mssdflt 1440 الحد الأقصى لحجم مقطع TCP الافتراضي
net.inet.tcp.delayed_ack 3 تأخر سلوك ACK

تطبيق تكوين ماك

# Check current settings
sysctl kern.ipc.maxsockbuf
sysctl net.inet.tcp.sendspace
sysctl net.inet.tcp.recvspace
sysctl net.inet.tcp.autorcvbufmax
sysctl net.inet.tcp.autosndbufmax

# Apply settings temporarily (until reboot)
sudo sysctl -w kern.ipc.maxsockbuf=8388608
sudo sysctl -w net.inet.tcp.sendspace=131072
sudo sysctl -w net.inet.tcp.recvspace=131072
sudo sysctl -w net.inet.tcp.autorcvbufmax=16777216
sudo sysctl -w net.inet.tcp.autosndbufmax=16777216
sudo sysctl -w net.inet.tcp.rfc1323=1
sudo sysctl -w net.inet.tcp.sack=1

# Make settings persistent (create /etc/sysctl.conf)
sudo tee /etc/sysctl.conf <<EOF
kern.ipc.maxsockbuf=8388608
net.inet.tcp.sendspace=131072
net.inet.tcp.recvspace=131072
net.inet.tcp.autorcvbufmax=16777216
net.inet.tcp.autosndbufmax=16777216
net.inet.tcp.rfc1323=1
net.inet.tcp.sack=1
net.inet.tcp.mssdflt=1440
net.inet.tcp.delayed_ack=3
EOF

# Note: On recent macOS versions, /etc/sysctl.conf may not be read automatically
# Use a LaunchDaemon to apply settings at boot

إنشاء LaunchDaemon للإعدادات المستمرة

# Create /Library/LaunchDaemons/com.local.sysctl.plist
sudo tee /Library/LaunchDaemons/com.local.sysctl.plist <<EOF
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.local.sysctl</string>
    <key>ProgramArguments</key>
    <array>
        <string>/usr/sbin/sysctl</string>
        <string>-w</string>
        <string>kern.ipc.maxsockbuf=8388608</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
</dict>
</plist>
EOF

sudo chmod 644 /Library/LaunchDaemons/com.local.sysctl.plist
sudo launchctl load /Library/LaunchDaemons/com.local.sysctl.plist
تحذير:يخضع نظام التشغيل macOS Ventura (13) والإصدارات الأحدث لقيود حماية تكامل النظام (SIP). قد لا تكون بعض معلمات النواة قابلة للتعديل حتى باستخدام sudo. إعدادات الاختبار في بيئتك المحددة.

اختبار الأداء والتحقق من صحته

أدوات لاختبار أداء المخزن المؤقت

iperf3 - اختبار أداء الشبكة

# Server side
iperf3 -s

# Client side - test TCP throughput
iperf3 -c server_ip -t 60 -i 5 -w 16M

# Test with multiple parallel streams
iperf3 -c server_ip -P 10 -t 60

# Test UDP performance
iperf3 -c server_ip -u -b 1000M -t 60

tcpdump - التقاط أحجام نوافذ TCP

# Capture and display TCP window sizes
tcpdump -i any -n 'tcp' -vv | grep -i window

# Save capture for Wireshark analysis
tcpdump -i any -w /tmp/capture.pcap 'tcp port 443'

تحليل ويرشارك

ابحث عن مؤشرات مشكلات المخزن المؤقت هذه:

  • رسائل نافذة TCP صفر
  • حزم تحديث نافذة TCP
  • نافذة TCP الإخطارات الكاملة
  • معدلات إعادة إرسال عالية مع RTT منخفضة

مراقبة النظام

# Linux - Monitor network buffer statistics
watch -n 1 'cat /proc/net/sockstat'
watch -n 1 'ss -tm | grep -i mem'

# Check for drops
netstat -s | grep -i drop

# Windows - Monitor TCP statistics
netstat -e 1

# macOS - Monitor network statistics
netstat -s -p tcp

حساب منتج تأخير عرض النطاق الترددي (BDP).

لتحديد أحجام المخزن المؤقت الأمثل لشبكتك، قم بحساب منتج تأخير عرض النطاق الترددي:

BDP = Bandwidth (bits/sec) × RTT (seconds)

Example for 10 Gigabit Ethernet with 50ms RTT:
BDP = 10,000,000,000 × 0.050 = 500,000,000 bits = 62.5 MB

Buffer Size = BDP × 2 (for bidirectional traffic and headroom)
Buffer Size = 62.5 MB × 2 = 125 MB

This is why modern settings recommend 128MB maximum buffers.

توصيات خاصة بعبء العمل

نوع عبء العمل حجم المخزن المؤقت الموصى به المعلمات الرئيسية
خادم الويب (زمن الوصول المنخفض) 4-16 ميجابايت مخازن مؤقتة أقل، اتصالات أكثر، استجابة سريعة
خادم قاعدة البيانات 16-32 ميجابايت مخازن مؤقتة معتدلة، وإنتاجية متسقة
نقل الملفات / النسخ الاحتياطي 64-128 ميجابايت الحد الأقصى للمخازن المؤقتة، وأولوية الإنتاجية العالية
بث الفيديو 32-64 ميجابايت مخازن كبيرة، ومعدل تسليم ثابت
HPC / مركز البيانات 128-256 ميجابايت الحد الأقصى من المخازن المؤقتة، والتحكم المتخصص في الازدحام
لاسلكي / موبايل 2-8 ميجا بايت المخازن المؤقتة المحافظة، ومعالجة الكمون المتغير

الأخطاء والمزالق الشائعة

أخطاء يجب تجنبها

  • الإفراط في التخزين المؤقت:قد تؤدي المخازن المؤقتة الكبيرة جدًا إلى حدوث تضخم في المخزن المؤقت، مما يؤدي إلى زيادة زمن الوصول
  • تجاهل قيود الذاكرة:تتضاعف المخازن المؤقتة الكبيرة بعدد الاتصالات؛ يحتاج الخادم الذي يحتوي على 10000 اتصال ومخازن مؤقتة تبلغ 128 ميجابايت إلى 1.25 تيرابايت من ذاكرة الوصول العشوائي
  • تعطيل الضبط التلقائي بدون سبب:عادةً ما يكون الضبط التلقائي لنظام التشغيل الحديث أفضل من الإعدادات الثابتة
  • عدم الاختبار بعد التغييرات:تحقق دائمًا من صحة تحسينات الأداء من خلال أعباء العمل الحقيقية
  • نسيان المخازن المؤقتة لبطاقة NIC:يمكن أن يحدث استنفاد المخزن المؤقت الحلقي بشكل مستقل عن المخازن المؤقتة للمأخذ
  • إعدادات غير متناسقة:يجب أن يكون لدى العميل والخادم تكوينات مخزن مؤقت متوافقة
  • تجاهل السيطرة على الازدحام:تعد BBR و CUBIC أفضل بكثير من الخوارزميات القديمة

استكشاف أخطاء سير العمل وإصلاحها

  1. تحديد خط الأساس:قم بقياس الأداء الحالي باستخدام iperf3 أو أدوات مشابهة
  2. التقاط الحزم:استخدم tcpdump/Wireshark لتحديد سلوك نافذة TCP
  3. التحقق من إحصائيات النظام:ابحث عن قطرات، واستنفاد المخزن المؤقت، وإعادة الإرسال
  4. حساب BDP:تحديد أحجام المخزن المؤقت الأمثل من الناحية النظرية
  5. تطبيق التغييرات المتزايدة:لا تغير كل شيء دفعة واحدة
  6. الاختبار والتحقق من صحة:قياس التحسن الفعلي في الأداء
  7. مراقبة مع مرور الوقت:تأكد من أن الإعدادات تظل مثالية في ظل أحمال مختلفة

المراجع ومزيد من القراءة

  • RFC 1323 - ملحقات TCP للأداء العالي (تحجيم النافذة)
  • RFC 2018 - خيارات الإقرار الانتقائي لـ TCP
  • RFC 6928 - زيادة النافذة الأولية لـ TCP
  • RFC 8312 - خوارزمية التحكم في الازدحام المكعب
  • التحكم في ازدحام BBR (جوجل) - https://research.google/pubs/pub45646/
  • وثائق Linux Kernel - شبكة الاتصال/ip-sysctl.txt
  • دليل ضبط أداء Windows TCP/IP (مايكروسوفت)
  • دليل ضبط شبكة ESnet - https://fasterdata.es.net/

خاتمة

يعد استنفاد المخزن المؤقت سببًا أساسيًا شائعًا لمشكلات الأداء التي يبدو أنها مرتبطة بالشبكة. ومن خلال فهم تطور حجم المخزن المؤقت من حدود 128 كيلو بايت في عام 2009 إلى إمكانيات اليوم البالغة 128 ميجابايت، يستطيع مهندسو الشبكات التعرف على هذه المشكلات وحلها بسرعة.

الوجبات الرئيسية:

  • تحتاج الأنظمة الحديثة إلى مخازن مؤقتة أكبر بكثير من التكوينات القديمة (2009).
  • قم دائمًا بحساب BDP لظروف الشبكة المحددة الخاصة بك
  • استخدم ميزات الضبط التلقائي لنظام التشغيل عند توفرها (Windows وLinux الحديث)
  • مراقبة واختبار للتحقق من صحة التغييرات
  • ضع في اعتبارك المتطلبات الخاصة بعبء العمل عند الضبط

تذكر: "مشكلة الشبكة" التي كشف عنها تحليل الحزمة لإظهار عدم وجود نوافذ لـ TCP هي في الواقع مشكلة في موارد النظام المضيف. ومن خلال ضبط المخزن المؤقت المناسب، يمكنك التخلص من هذه التشخيصات الخاطئة وتحقيق الأداء الأمثل.


آخر تحديث: 2 فبراير 2026

المؤلف: الفريق الفني Baud9600