.. כותרת: System Buffer Tuning - TCP ו-Network Performance Optimization .. שבלול: כוונון מערכת-חיץ .. תאריך: 2026-02-02 10:00:00 UTC .. תגיות: רשת, ביצועים, כוונון, tcp, מאגרים .. קטגוריה: מאמרים .. קישור: .. תיאור: הבנה ואופטימיזציה של מאגרי מערכת לפתרון בעיות ביצועי TCP, לעתים קרובות מאובחנים בטעות כבעיות רשת .. סוג: טקסט

כוונון מאגר מערכת: האשם החבוי מאחורי "בעיות רשת"

תקציר מנהלים

מהנדסי רשת נתקלים לעתים קרובות במצבים שבהם חלונות TCP או ביצועי יישום מואשמים בתשתית הרשת. לאחר ביצוע לכידות מנות נרחבות, tcpdumps וניתוח רשת, צוואר הבקבוק האמיתי מתגלה לעתים קרובות: NIC (כרטיס ממשק רשת) מותש או מאגרים ברמת מערכת ההפעלה במערכות הלקוח או השרת.

מאמר זה מספק תצורות חיץ מדור קודם (בערך 2009) והן נוכחיות (2025-2026) עבור Linux, Windows ו-macOS, יחד עם טכניקות אבחון לזיהוי מיצוי מאגר לפני שהיא הופכת לבעיה קריטית.

תסמינים נפוצים של תשישות מאגר

הבנת הבעיה

מנגנון קנה המידה של חלון TCP

TCP משתמש במנגנון בקרת זרימה שבו המקלט מפרסם "גודל חלון" המציין כמה נתונים הוא יכול לקבל. כאשר מאגרי מערכת מתמלאים, החלון הזה מתכווץ לאפס, מה שמאלץ את השולח להמתין. זו מופיעה כבעיית רשת אך היא למעשה בעיית משאב מארח.

איפה חשובים חוצצים

פקודות אבחון

אבחון לינוקס

# Check current TCP buffer settings
sysctl net.ipv4.tcp_rmem
sysctl net.ipv4.tcp_wmem
sysctl net.core.rmem_max
sysctl net.core.wmem_max

# 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"

אבחון של Windows

# 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

כוונון מאגר לינוקס

הגדרות לינוקס מדור קודם (בערך 2009)

פָּרָמֶטֶר ערך מדור קודם (2009) תֵאוּר
net.core.rmem_default 124928 (122KB) גודל מאגר שקע קבלת ברירת מחדל
net.core.rmem_max 131071 (128KB) גודל מאגר שקע קבלה מקסימלי
net.core.wmem_default 124928 (122KB) גודל חיץ שקע שליחת ברירת מחדל
net.core.wmem_max 131071 (128KB) גודל חיץ מרבי של שקע שליחה
net.ipv4.tcp_rmem 4096 87380 174760 מאגר קליטה של ​​TCP: min, ברירת מחדל, מקסימום (בבתים)
net.ipv4.tcp_wmem 4096 16384 131072 מאגר שליחה של TCP: min, ברירת מחדל, מקסימום (בבתים)
net.ipv4.tcp_mem 196608 262144 393216 דפי זיכרון TCP: נמוך, לחץ, גבוה
net.core.netdev_max_backlog 1000 מקסימום מנות בתור קלט
net.core.optmem_max 10240 (10KB) גודל חיץ נלווה מקסימלי לכל שקע

הגדרות לינוקס נוכחיות (2025-2026)

פָּרָמֶטֶר ערך מומלץ נוכחי תֵאוּר
net.core.rmem_default 16777216 (16MB) גודל מאגר שקע קבלת ברירת מחדל
net.core.rmem_max 134217728 (128MB) גודל מאגר שקע קבלה מקסימלי
net.core.wmem_default 16777216 (16MB) גודל חיץ שקע שליחת ברירת מחדל
net.core.wmem_max 134217728 (128MB) גודל חיץ מרבי של שקע שליחה
net.ipv4.tcp_rmem 4096 87380 134217728 מאגר קליטה של ​​TCP: דקה, ברירת מחדל, מקסימום (128MB מקסימום)
net.ipv4.tcp_wmem 4096 65536 134217728 מאגר שליחה של TCP: דקה, ברירת מחדל, מקסימום (128MB מקסימום)
net.ipv4.tcp_mem 8388608 12582912 16777216 דפי זיכרון TCP: נמוך, לחץ, גבוה (מערכת 64GB)
net.core.netdev_max_backlog 250000 מקסימום מנות בתור קלט (10GbE+)
net.core.optmem_max 65536 (64KB) גודל חיץ נלווה מקסימלי לכל שקע
net.ipv4.tcp_congestion_control bbr השתמש בקרת גודש BBR (אלגוריתם של גוגל)
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 נמצאים בדפי זיכרון (בדרך כלל 4KB). גדלי מאגר גדולים יכולים לגרום ללחץ זיכרון חמור:

כוונון מאגר של Windows

הגדרות Windows מדור קודם (בערך 2009 - Windows Vista/7/Server 2008)

פָּרָמֶטֶר ערך מדור קודם (2009) מִקוּם
TcpWindowSize 65535 (64KB) רישום: HKLM\System\CurrentControlSet\Services\Tcpip\Parameters
Tcp1323Opts 0 (מושבת) קנה המידה של חלון מושבת כברירת מחדל
DefaultReceiveWindow 8192 (8KB) חלון קבלת ברירת מחדל
DefaultSendWindow 8192 (8KB) חלון שליחה כברירת מחדל
GlobalMaxTcpWindowSize 65535 (64KB) גודל חלון TCP מקסימלי
TcpNumConnections 16777214 מקסימום חיבורי TCP

הגדרות Windows נוכחיות (Windows 10/11/Server 2019-2025)

Windows מודרני משתמש ב-כוונון אוטומטי של חלון קבלהתכונה, אשר מתאימה באופן דינמי את מאגרי הקבלה בהתבסס על תנאי הרשת.

תכונה הגדרה מומלצת נוכחית תֵאוּר
רמת כוונון אוטומטי רגיל (או ניסיוני מאוד עבור 10GbE+) התאמת חלון קבלה דינמית
קבלה צדדית (RSS) מופעל הפצת עיבוד רשת בין מעבדים
הורדת ארובה אוטומטי (או מושבת ב-NIC מודרניים) הורדת TCP לחומרת NIC
NetDMA נָכֶה גישה ישירה לזיכרון (הוצא משימוש)
פרמטרים גלובליים של TCP ראה פקודות למטה הגדרות TCP כלל המערכת
ספק עומס CUBIC (או NewReno fallback) אלגוריתם בקרת גודש TCP

פקודות תצורה של Windows

# 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 (256KB) גודל מאגר שקע מקסימלי
net.inet.tcp.sendspace 32768 (32KB) מאגר שליחה של TCP כברירת מחדל
net.inet.tcp.recvspace 32768 (32KB) מאגר קבלה של TCP כברירת מחדל
net.inet.tcp.autorcvbufmax 131072 (128KB) מאגר קליטה מכוונן אוטומטי
net.inet.tcp.autosndbufmax 131072 (128KB) מאגר שליחה מכוונן אוטומטי מרבי
net.inet.tcp.rfc1323 0 (מושבת) שינוי קנה המידה של חלונות TCP

הגדרות macOS נוכחיות (macOS 12-15 Monterey דרך Sequoia)

פָּרָמֶטֶר ערך מומלץ נוכחי תֵאוּר
kern.ipc.maxsockbuf 8388608 (8MB) גודל מאגר שקע מקסימלי
net.inet.tcp.sendspace 131072 (128KB) מאגר שליחה של TCP כברירת מחדל
net.inet.tcp.recvspace 131072 (128KB) מאגר קבלה של TCP כברירת מחדל
net.inet.tcp.autorcvbufmax 16777216 (16MB) מאגר קליטה מכוונן אוטומטי
net.inet.tcp.autosndbufmax 16777216 (16MB) מאגר שליחה מכוונן אוטומטי מרבי
net.inet.tcp.rfc1323 1 (מופעל) אפשר שינוי קנה מידה של חלונות TCP
net.inet.tcp.sack 1 (מופעל) אפשר הכרה סלקטיבית
net.inet.tcp.mssdflt 1440 ברירת המחדל של גודל פלח מקסימלי של TCP
net.inet.tcp.delayed_ack 3 התנהגות ACK מושהית

יישום תצורת macOS

# 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'

ניתוח Wireshark

חפש את האינדיקטורים הבאים של בעיות חיץ:

ניטור מערכת

# 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 מגה-בייט מאגרים שמרניים, טיפול בהשהייה משתנה

טעויות ומלכודות נפוצות

טעויות שיש להימנע מהן

פתרון תקלות זרימת עבודה

  1. קבע קו בסיס:מדידת ביצועים נוכחיים עם iperf3 או כלים דומים
  2. לכידת מנות:השתמש ב-tcpdump/Wireshark כדי לזהות התנהגות של חלון TCP
  3. בדוק את הנתונים הסטטיסטיים של המערכת:חפש נפילות, תשישות חיץ, שידורים חוזרים
  4. חשב BDP:קבע גדלי חיץ אופטימליים תיאורטית
  5. החל שינויים מצטברים:אל תשנה הכל בבת אחת
  6. בדוק ואמת:מדידת שיפור ביצועים בפועל
  7. מעקב לאורך זמן:ודא שההגדרות נשארות אופטימליות בעומסים משתנים

הפניות וקריאה נוספת

מַסְקָנָה

מיצוי מאגר היא גורם שורש שכיח לבעיות ביצועים שנראות קשורות לרשת. על ידי הבנת ההתפתחות של גודל מאגר ממגבלות 128KB של 2009 ליכולות 128MB של היום, מהנדסי רשת יכולים לזהות ולפתור בעיות אלה במהירות.

נקודות טייק אווי מרכזיות:

זכור: "בעיית רשת" שנחשפת על ידי ניתוח מנות כדי להראות TCP אפס חלונות היא למעשה בעיה במשאבי המערכת המארחת. עם כוונון חיץ נכון, תוכל לבטל אבחנות שווא אלו ולהשיג ביצועים מיטביים.


עדכון אחרון: 2 בפברואר 2026

מחבר: הצוות הטכני של Baud9600