Π‘ΡΡΡΠΎΡΠ½ΠΈΠ΅ΡΠΎ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ° F-Stack 2.0 Π΅ ΠΏΡΡΠ½Π°Ρ, ΡΠ°Π·Π²ΠΈΠ²Π°ΠΉΠΊΠΈ ΡΠ΅Π΄Π°ΠΊΡΠΈΡ Π½Π° ΠΌΡΠ΅ΠΆΠΎΠ²ΠΈΡ ΡΡΠ΅ΠΊ FreeBSD, ΠΏΡΠΈΠ³ΠΎΠ΄Π΅Π½ Π·Π° ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»Π½Π° ΡΠ°Π±ΠΎΡΠ° Π² ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΠΊΠΎΡΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΏΠΎΠ΄ ΡΠΎΡΠΌΠ°ΡΠ° Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°. ΠΡΠΎΠ΅ΠΊΡΡΡ Π΅ ΡΡΠ·Π΄Π°Π΄Π΅Π½ ΠΎΡ Π½Π°ΠΉ-Π³ΠΎΠ»ΡΠΌΠ°ΡΠ° ΡΠ΅Π»Π΅ΠΊΠΎΠΌΡΠ½ΠΈΠΊΠ°ΡΠΈΠΎΠ½Π½Π° ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡ Π² ΠΠΈΡΠ°ΠΉ, Tencent, ΠΈ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π² Π½Π΅ΠΉΠ½ΠΈΡΠ΅ ΠΏΡΠΎΠ΄ΡΠΊΡΠΈ ΠΈ ΡΡΠ»ΡΠ³ΠΈ. ΠΠΎΠ΄ΡΡ Π΅ Π½Π°ΠΏΠΈΡΠ°Π½ Π½Π° C ΠΈ ΡΠ΅ ΡΠ°Π·ΠΏΡΠΎΡΡΡΠ°Π½ΡΠ²Π° ΠΏΠΎΠ΄ BSD Π»ΠΈΡΠ΅Π½Π·. ΠΠΎΠ΄Π΄ΡΡΠΆΠ° ΡΠ°Π±ΠΎΡΠ° Π² Linux ΠΈ FreeBSD. ΠΡΠΎΠ΅ΠΊΡΡΡ ΡΡΡΠΎ ΡΠ°ΠΊΠ° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ° ΠΏΡΠ΅Π²Π΅Π΄Π΅Π½ΠΈ Π·Π° ΡΠΏΠΎΡΡΠ΅Π±Π° Π²Π΅ΡΡΠΈΠΈ Π½Π° Nginx 1.28 ΠΈ Π‘Π£ΠΠ Redis 6.2.6, ΠΊΠΎΠΈΡΠΎ Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΠ°Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡ Π½Π°Π΄ ΠΎΠ±ΠΈΡΠ°ΠΉΠ½ΠΈΡΠ΅ ΡΠ±ΠΎΡΠΊΠΈ, ΡΠ°Π±ΠΎΡΠ΅ΡΠΈ Π²ΡΡΡ Ρ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΈΡ ΠΌΡΠ΅ΠΆΠΎΠ² ΡΡΠ΅ΠΊ.
F-Stack ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΡΠΎΠ±ΡΡΠ²Π΅Π½ Π»ΠΎΠΊΠ°Π»Π΅Π½ ΠΌΡΠ΅ΠΆΠΎΠ² ΡΡΠ΅ΠΊ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡΠ°, Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌ ΠΎΡ ΠΌΡΠ΅ΠΆΠΎΠ²ΠΈΡ ΡΡΠ΅ΠΊ Π½Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½Π°ΡΠ° ΡΠΈΡΡΠ΅ΠΌΠ°, ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΠ°Ρ Π² ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΠΊΠΎΡΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈ Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ ΡΠ°Π±ΠΎΡΠ΅Ρ Ρ ΠΌΡΠ΅ΠΆΠΎΠ²ΠΎΡΠΎ ΠΎΠ±ΠΎΡΡΠ΄Π²Π°Π½Π΅. F-Stack ΡΠ΅ ΠΏΠΎΠ·ΠΈΡΠΈΠΎΠ½ΠΈΡΠ° ΠΊΠ°ΡΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅, ΠΊΠΎΠ΅ΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° ΡΠ΅ ΠΏΠΎΠ²ΠΈΡΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ° Π½Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΡΠΈΡΠ΅ Π½Π° ΠΌΡΠ΅ΠΆΠΎΠ²ΠΈ Π·Π°ΡΠ²ΠΊΠΈ Π² ΡΡΠ»ΠΎΠ²ΠΈΡ, ΠΏΡΠΈ ΠΊΠΎΠΈΡΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΈΡΡ TCP/IP ΡΡΠ΅ΠΊ Π½Π° ΡΠ΄ΡΠΎΡΠΎ Π½Π° Linux ΡΡΠ°Π²Π° ΡΠ΅ΡΠ΅Π½ ΠΌΠΎΠ΄Π΅Π» ΠΈ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ°Π²Π° ΠΌΠ°ΡΠ°Π±ΠΈΡΠ°Π½Π΅ΡΠΎ. Π’Π΅ΠΎΡΠ΅ΡΠΈΡΠ½ΠΎ F-Stack ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄ΠΎΡΡΠΈΠ³Π°Π½Π΅ΡΠΎ Π½Π° ΡΠ°Π²Π°Π½ Π½Π° ΠΌΡΠ΅ΠΆΠΎΠ²Π°ΡΠ° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡ, Π²ΡΠ·ΠΌΠΎΠΆΠ΅Π½ Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π°ΡΠ° ΠΌΡΠ΅ΠΆΠΎΠ²Π° ΠΊΠ°ΡΡΠ°, ΠΈ Π² Π½ΡΠΊΠΎΠΈ ΡΠΈΡΡΠ°ΡΠΈΠΈ ΠΏΡΠ΅Π΄Π»Π°Π³Π° Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° ΠΌΠ½ΠΎΠ³ΠΎΠΊΡΠ°ΡΠ½ΠΎ ΡΠ²Π΅Π»ΠΈΡΠ°Π²Π°Π½Π΅ Π½Π° Π±ΡΠΎΡ Π½Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠ²Π°Π΅ΠΌΠΈΡΠ΅ ΠΌΠ°Π»ΠΊΠΈ ΠΌΡΠ΅ΠΆΠΎΠ²ΠΈ Π·Π°ΡΠ²ΠΊΠΈ.
ΠΠΎΠ²ΠΈΡΠ°Π²Π°Π½Π΅ΡΠΎ Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ° ΡΠ΅ ΠΏΠΎΡΡΠΈΠ³Π° ΡΡΠ΅Π· ΠΈΠ·ΠΊΠ»ΡΡΠ²Π°Π½Π΅ Π½Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΊΠ°ΡΠΎ ΠΊΠΎΠΏΠΈΡΠ°Π½Π΅ Π½Π° ΠΌΡΠ΅ΠΆΠΎΠ²ΠΈ ΠΏΠ°ΠΊΠ΅ΡΠΈ, ΠΏΠ»Π°Π½ΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΠΎΡΠΎΡΠΈ, ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° ΠΏΡΠ΅ΠΊΡΡΠ²Π°Π½ΠΈΡ ΠΈ ΠΎΠ±Π°ΠΆΠ΄Π°Π½Π΅ Π΄ΠΎ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΈ ΠΏΠΎΠ²ΠΈΡΠΈ. ΠΠ° Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Ρ ΠΌΡΠ΅ΠΆΠΎΠ²Π°ΡΠ° ΠΊΠ°ΡΡΠ°, Π·Π°ΠΎΠ±ΠΈΠΊΠ°Π»ΡΠΉΠΊΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΈΡΠ΅ Π½Π° ΡΠ΄ΡΠΎΡΠΎ Π½Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½Π°ΡΠ° ΡΠΈΡΡΠ΅ΠΌΠ°, ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΡΡ DPDK (Data Plane Development Kit), ΠΊΠΎΠΉΡΠΎ ΡΠ°Π·Π²ΠΈΠ²Π° Π½Π°Π±ΠΎΡ ΠΎΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π·Π° Π½ΠΈΡΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²Π° ΡΠ°Π±ΠΎΡΠ° Ρ ΠΌΡΠ΅ΠΆΠΎΠ²ΠΈ Π°Π΄Π°ΠΏΡΠ΅ΡΠΈ. DPDK ΠΏΡΠ΅Π΄Π»Π°Π³Π° Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° Π½Π°ΠΌΠ°Π»ΡΠ²Π°Π½Π΅ Π½Π° ΡΠ°Π·Ρ ΠΎΠ΄ΠΈΡΠ΅ ΠΈ ΡΠΏΠ°Π·Π²Π°Π½Π΅ Π½Π° ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π΅Π½ Π±ΡΠΎΠΉ CPU ΡΠΈΠΊΠ»ΠΈ ΠΏΡΠΈ ΠΏΡΠΈΠ΅ΠΌΠ°Π½Π΅ ΠΈΠ»ΠΈ ΠΈΠ·ΠΏΡΠ°ΡΠ°Π½Π΅ Π½Π° ΠΌΡΠ΅ΠΆΠΎΠ²ΠΈ ΠΏΠ°ΠΊΠ΅ΡΠΈ.
Π€ΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π» Π½Π° TCP/IP ΡΡΠ΅ΠΊΠ° ΡΡΠΎΡΠ²Π΅ΡΡΡΠ²Π° Π½Π° ΠΌΡΠ΅ΠΆΠΎΠ²ΠΈΡ ΡΡΠ΅ΠΊ Π½Π° FreeBSD 15 ΠΈ Π΅ ΠΈΠ·Π²Π΅Π΄Π΅Π½ ΠΎΡ ΡΠ°Π·ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ° Π² Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°. ΠΠ° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΈΡ POSIX API (socket, epoll, kqueue) ΠΈΠ»ΠΈ ΡΠΎΠ±ΡΡΠ²Π΅Π½ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ, Π±Π°Π·ΠΈΡΠ°Π½ Π½Π° ΠΌΠΈΠΊΡΠΎΠ½ΠΈΡΠΊΠΈ, ΠΊΠΎΠΉΡΠΎ ΠΎΠΏΡΠΎΡΡΡΠ²Π° ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ΡΠΎ Π½Π° ΠΌΡΠ΅ΠΆΠΎΠ²ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° ΡΠ΅ ΠΈΠ·Π±Π΅Π³Π½Π΅ ΡΠ»ΠΎΠΆΠ½Π°ΡΠ° Π»ΠΎΠ³ΠΈΠΊΠ° Π½Π° Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½Π°ΡΠ° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° Π·Π°ΡΠ²ΠΊΠΈ. ΠΡΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Ρ Π½Π΅ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΠ°Π½ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Ρ Π·Π°ΡΠ΅ΠΆΠ΄Π°Π½Π΅ ΡΡΠ΅Π· LD_PRELOAD.
ΠΠ°ΠΉ-Π·Π°Π±Π΅Π»Π΅ΠΆΠΈΡΠ΅Π»Π½ΠΈΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ Π² Π½ΠΎΠ²ΠΈΡ ΡΠ΅Π»ΠΈΠ·:
- ΠΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈΡΠ΅ Π½Π° ΠΌΡΠ΅ΠΆΠΎΠ²ΠΈΡ ΡΡΠ΅ΠΊ ΡΠ° ΠΎΠ±Π½ΠΎΠ²Π΅Π½ΠΈ Π΄ΠΎ ΡΡΡΡΠΎΡΠ½ΠΈΠ΅ FreeBSD 15 (ΠΏΡΠ΅Π΄ΠΈΡΠ½ΠΎ ΡΠ΅ Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π»ΠΎ FreeBSD 13).
- Π Π΅Π°Π»ΠΈΠ·ΠΈΡΠ°Π½ Π΅ ΡΠ΅ΠΆΠΈΠΌ Π½Π° ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½Π° ΡΠ°Π±ΠΎΡΠ° (thread_mode=1) Π² Π΅Π΄ΠΈΠ½ ΠΏΡΠΎΡΠ΅Ρ, Π΄ΠΎΠΏΡΠ»Π²Π°Ρ ΠΏΡΠ΅Π΄ΠΈΡΠ½ΠΎ Π½Π°Π»ΠΈΡΠ½ΠΈΡ ΠΌΠ½ΠΎΠ³ΠΎΠΏΡΠΎΡΠ΅ΡΠ΅Π½ ΡΠ΅ΠΆΠΈΠΌ.
- ΠΠΎΠ±Π°Π²Π΅Π½ Π΅ Π»Π΅ΠΊ ΡΠ΅ΠΆΠΈΠΌ Π½Π° ΡΠ°Π±ΠΎΡΠ° (primary_slim), ΠΏΡΠΈ ΠΊΠΎΠΉΡΠΎ ΠΎΡΠ½ΠΎΠ²Π½ΠΈΡΡ ΠΏΡΠΎΡΠ΅Ρ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π° ΡΠ°ΠΌΠΎ ΠΎΡΠ½ΠΎΠ²Π½ΠΈ Π·Π°Π΄Π°ΡΠΈ ΠΏΠΎ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΈ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½ΠΈΡΠ°Π½Π΅ Π½Π° ΡΠ°Π±ΠΎΡΠ°ΡΠ°, Π° ΠΏΡΠΈΠ΅ΠΌΠ°Π½Π΅ΡΠΎ Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΈ ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ°ΡΠ° Π½Π° ΠΎΠΏΠ°ΡΠΊΠΈΡΠ΅ Π·Π° ΠΏΡΠΈΠ΅ΠΌ/ΠΏΡΠ΅Π΄Π°Π²Π°Π½Π΅ (rx/tx) ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠ²Π° ΡΠ°ΠΌΠΎ ΠΎΡ ΡΡΡΠ°Π½Π°ΡΠ° Π½Π° Π΄ΠΎΡΠ΅ΡΠ½ΠΈΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΠΈ.
- ΠΠΎΠ±Π°Π²Π΅Π½Π° Π΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌΠ° Π·Π° Ρ
Π°ΡΠ΄ΡΠ΅ΡΠ½ΠΎ ΡΡΠΊΠΎΡΠ΅Π½ΠΈΠ΅.
TSO (TCP Segmentation Offload) Π·Π° ΠΏΡΠ΅Ρ Π²ΡΡΠ»ΡΠ½Π΅ Π½Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈΡΠ΅ Π·Π° ΠΎΠ±Π΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΈ Π½Π° ΠΌΡΠ΅ΠΆΠΎΠ²Π°ΡΠ° ΠΊΠ°ΡΡΠ°, Ρ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° ΠΎΠ±ΡΠ°ΡΠ½ΠΎ Π²ΡΡΡΠ°Π½Π΅ ΠΊΡΠΌ ΡΠΎΡΡΡΠ΅ΡΠ½Π° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ. ΠΠΎΠ΄ΠΎΠ±ΡΠ΅Π½ Π΅ ΡΠ΅ΠΆΠΈΠΌΡΡ Π½Π° TSO (TCP Segmentation Offload, ΠΏΡΠ΅Ρ Π²ΡΡΠ»ΡΠ½Π΅ Π½Π° ΠΌΡΠ΅ΠΆΠΎΠ²Π°ΡΠ° ΠΊΠ°ΡΡΠ° Π·Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° ΡΠ΅Π³ΠΌΠ΅Π½ΡΠΈ Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΈ) Π·Π° IPv6. - ΠΠΎΠ±Π°Π²Π΅Π½Π° Π΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° ΠΏΡΠΎΠΌΡΠ½Π° Π½Π° ΡΠ°Π·ΠΌΠ΅ΡΠ° Π½Π° MTU (Maximum Transmission Unit) ΠΈ Π΅ ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°Π½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° jumbo ΠΊΠ°Π΄ΡΠΈ.
- Π Π°Π·ΡΠΈΡΠ΅Π½ΠΈ ΡΠ° Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈΡΠ΅ Π·Π° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° Ρ Π°ΡΠ΄ΡΠ΅ΡΠ½ΠΎΡΠΎ ΡΡΠΊΠΎΡΠ΅Π½ΠΈΠ΅ Π½Π° ΠΈΠ·ΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΊΠΎΠ½ΡΡΠΎΠ»Π½ΠΈΡΠ΅ ΡΡΠΌΠΈ Π½Π° ΠΏΡΠ΅Π΄Π°Π²Π°Π½ΠΈΡΠ΅ ΠΏΠ°ΠΊΠ΅ΡΠΈ.
- ΠΠΎΠ±Π°Π²Π΅Π½Π° Π΅ ΡΡΠ½ΠΊΡΠΈΡ ff_zc_recv() Π·Π° ΠΏΠΎΠ»ΡΡΠ°Π²Π°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ Π±Π΅Π· ΠΌΠ΅ΠΆΠ΄ΠΈΠ½Π½ΠΎ Π±ΡΡΠ΅ΡΠΈΡΠ°Π½Π΅ (zero-copy). ΠΡΠ΅ΡΠ°Π±ΠΎΡΠ΅Π½Π° Π΅ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½Π°ΡΠ° ΡΡΠ½ΠΊΡΠΈΡ ff_zc_send() Π·Π° ΠΈΠ·ΠΏΡΠ°ΡΠ°Π½Π΅. ΠΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠ°Π½Π° ΠΈ Π΄ΠΎΠΏΡΠ»Π½Π΅Π½Π°. ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° IPv6 ΡΡΠ½ΠΊΡΠΈΡΡΠ° ff_rss_check().
- ΠΠΎΠ±Π°Π²Π΅Π½Π° Π΅ ΠΎΠΏΡΠΈΡΡΠ° FF_KERNEL_COEXIST Π·Π° ΡΠ°Π±ΠΎΡΠ° ΡΡΠ²ΠΌΠ΅ΡΡΠ½ΠΎ Ρ ΠΌΡΠ΅ΠΆΠΎΠ²ΠΈΡ ΡΡΠ΅ΠΊ Π½Π° ΡΠ΄ΡΠΎΡΠΎ.
- ΠΡΠ΅Π΄ΠΎΡΡΠ°Π²Π΅Π½Π° Π΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° Π·Π°ΠΏΠ°Π·Π²Π°Π½Π΅ Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π·Π° ΡΡΠ°ΡΠΈΠΊΠ° Π² pcap Π΄ΡΠΌΠΏΠΎΠ²Π΅ Ρ Π½Π°Π½ΠΎΡΠ΅ΠΊΡΠ½Π΄Π½Π° ΡΠΎΡΠ½ΠΎΡΡ.
- Π config.ini ΡΠ° Π΄ΠΎΠ±Π°Π²Π΅Π½ΠΈ Π½ΠΎΠ²ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ idle_loop_interval, extra_eal_args, drain_ring_size, reload_heartbeat_timeout_ms ΠΈ reload_udp_idle_ms.
- Π ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠ°Π½Π° Π²Π΅ΡΡΠΈΡ Π½Π° nginx Π΅ ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°Π½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° ΠΏΡΠ΅Π·Π°ΡΠ΅ΠΆΠ΄Π°Π½Π΅ Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π½Π° Π±ΠΈΠ½Π°ΡΠ½ΠΈΡ ΡΠ°ΠΉΠ» Π±Π΅Π· ΠΏΡΠ΅ΠΊΡΡΠ²Π°Π½Π΅ Π½Π° Π²ΡΡΠ·ΠΊΠΈΡΠ΅ (graceful_reload=1).
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: opennet.ru
