پرش به محتویات

عملکرد

عوامل زیر از دلایل رایج گلوگاه در سرعت انتقال داده هستند:

  • کیفیت اتصال بین دستگاه شما و سرور
  • قدرت پردازشی CPU، کارت شبکه و غیره
  • اندازه بافرهای سیستم
  • اندازه پنجره دریافت کنترل جریان
  • اولویت فرآیند

شایان ذکر است که QUIC، به عنوان یک پروتکل بسیار جدیدتر و پیچیده‌تر که در فضای کاربر اجرا می‌شود، ذاتاً به قدرت پردازشی بیشتری نسبت به پیاده‌سازی بالغ و بسیار بهینه‌شده TCP در سطح هسته نیاز دارد. اگر می‌خواهید به سرعت‌های انتقال بالا دست پیدا کنید، نباید سرور خود را روی سخت‌افزار کم‌توان مانند Raspberry Pi یا VPS بسیار ارزان با محدودیت CPU میزبانی کنید.

در حالی که دو مورد اول خارج از حوصله این مستندات است، سه مورد آخر قابل بهینه‌سازی برای بهبود عملکرد هستند.

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

Linux

# Set both buffers to 16 MB
sysctl -w net.core.rmem_max=16777216
sysctl -w net.core.wmem_max=16777216

BSD/macOS

sysctl -w kern.ipc.maxsockbuf=20971520
sysctl -w net.inet.udp.recvspace=16777216
# UDP send buffer doesn't exist on BSD, so there's no "sendspace" to set

اندازه پنجره دریافت کنترل جریان

Hysteria پارامترهای پنجره دریافت کنترل جریان QUIC زیر را هم در پیکربندی کلاینت و هم سرور دارد:

quic:
  initStreamReceiveWindow: 26843545 # (1)!
  maxStreamReceiveWindow: 26843545 # (2)!
  initConnReceiveWindow: 67108864 # (3)!
  maxConnReceiveWindow: 67108864 # (4)!
  1. اندازه اولیه پنجره دریافت برای هر جریان. این مقدار داده‌ای است که می‌تواند قبل از اینکه فرستنده منتظر مصرف داده توسط گیرنده بماند، دریافت شود. مقدار پیش‌فرض ۸ مگابایت است.
  2. مکانیزم تنظیم خودکار اندازه پنجره دریافت وجود دارد که در صورت نیاز اندازه پنجره را افزایش می‌دهد، اما از این مقدار تجاوز نمی‌کند. مقدار پیش‌فرض ۸ مگابایت است.
  3. اندازه اولیه پنجره دریافت برای اتصال. این مجموع اندازه پنجره دریافت برای تمام جریان‌ها است. مقدار پیش‌فرض ۲۰ مگابایت است.
  4. مکانیزم تنظیم خودکار اندازه پنجره دریافت وجود دارد که در صورت نیاز اندازه پنجره را افزایش می‌دهد، اما از این مقدار تجاوز نمی‌کند. مقدار پیش‌فرض ۲۰ مگابایت است.

می‌توانید این مقادیر را اگر برای مورد استفاده شما کم هستند افزایش دهید، یا اگر نیاز به صرفه‌جویی در حافظه دارید کاهش دهید. ما اکیداً توصیه می‌کنیم نسبت پنجره دریافت جریان به اتصال را نزدیک به ۲/۵ نگه دارید. این کار از اشغال کل اتصال توسط یک یا دو جریان مسدود شده جلوگیری می‌کند.

اولویت فرآیند

در دستگاه‌هایی با منابع محدود CPU، بار بالا می‌تواند باعث لرزش تأخیر شود. این مشکل با افزایش اولویت فرآیند قابل کاهش است.

systemd

برای Linux.

فایل /etc/systemd/system/hysteria-server.service.d/priority.conf را ایجاد کنید و محتوای زیر را اضافه کنید:

[Service]
CPUSchedulingPolicy=rr
CPUSchedulingPriority=99

فایل‌های پیکربندی systemd را بارگذاری مجدد کرده و سرویس را با دستورات زیر ری‌استارت کنید:

systemctl daemon-reload
systemctl restart hysteria-server.service

chrt

برای Linux و FreeBSD. در FreeBSD باید util-linux را نصب کنید و بالاترین اولویت به جای ۹۹، عدد ۳۱ است.

# Execute after each service start
chrt -r 99 $(pidof hysteria)

# Or, use the following command to start the service
chrt -r 99 hysteria server -c /path/to/config.yaml