System Buffer Tuning - TCP and Network Performance Optimization
تشخيصات ويندوز
# 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
- الذاكرة لكل اتصال:يمكن لكل اتصال استخدام ما يصل إلى 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)
ضبط المخزن المؤقت لنظام التشغيل 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
اختبار الأداء والتحقق من صحته
أدوات لاختبار أداء المخزن المؤقت
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 أفضل بكثير من الخوارزميات القديمة
استكشاف أخطاء سير العمل وإصلاحها
- تحديد خط الأساس:قم بقياس الأداء الحالي باستخدام iperf3 أو أدوات مشابهة
- التقاط الحزم:استخدم tcpdump/Wireshark لتحديد سلوك نافذة TCP
- التحقق من إحصائيات النظام:ابحث عن قطرات، واستنفاد المخزن المؤقت، وإعادة الإرسال
- حساب BDP:تحديد أحجام المخزن المؤقت الأمثل من الناحية النظرية
- تطبيق التغييرات المتزايدة:لا تغير كل شيء دفعة واحدة
- الاختبار والتحقق من صحة:قياس التحسن الفعلي في الأداء
- مراقبة مع مرور الوقت:تأكد من أن الإعدادات تظل مثالية في ظل أحمال مختلفة
المراجع ومزيد من القراءة
- 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