ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ Π½Π° Linux Π·Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° 1.2 ΠΌΠΈΠ»ΠΈΠΎΠ½Π° JSON заявки Π² сСкунда

ΠŸΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°Π½ΠΎ Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ Ρ€ΡŠΠΊΠΎΠ²ΠΎΠ΄ΡΡ‚Π²ΠΎ Π·Π° настройванС Π½Π° Linux срСда с Ρ†Π΅Π» максимална производитСлност ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° HTTP заявки. ΠŸΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ…Π° производитСлността Π½Π° JSON ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π²Π°Ρ‡Π°, основан Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° libreactor Π² Amazon EC2 (4 vCPU) ΠΎΡ‚ 224 000 API заявки Π² сСкунда ΠΏΡ€ΠΈ стандартни настройки Π½Π° Amazon Linux 2 с ядро 4.14 Π΄ΠΎ 1.2 ΠΌΠΈΠ»ΠΈΠΎΠ½Π° заявки Π² сСкунда слСд оптимизация (повишСниС ΠΎΡ‚ 436%), ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ Π½Π°ΠΌΠ°Π»ΠΈΡ…Π° Π·Π°ΠΊΡŠΡΠ½Π΅Π½ΠΈΡΡ‚Π° ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° заявки с 79%. ΠŸΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ Π½Π΅ са спСцифични Π·Π° libreactor ΠΈ работят с Π΄Ρ€ΡƒΠ³ΠΈ HTTP ΡΡŠΡ€Π²ΡŠΡ€ΠΈ, Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ nginx, Actix, Netty ΠΈ Node.js (libreactor бСшС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ Π² тСстовСтС, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° Π½Π΅Π³ΠΎΠ²Π°Ρ‚Π° Π±Π°Π·Π° ΠΏΠΎΠΊΠ°Π·Π° Π½Π°ΠΉ-Π΄ΠΎΠ±Ρ€Π° производитСлност).

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ Π½Π° Linux Π·Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° 1.2 ΠΌΠΈΠ»ΠΈΠΎΠ½Π° JSON заявки Π² сСкунда

Основни ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ:

  • ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ Π½Π° ΠΊΠΎΠ΄Π° Π½Π° libreactor. ΠšΠ°Ρ‚ΠΎ основа бСшС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ R18 ΠΎΡ‚ Techempower, ΠΊΠΎΠΉΡ‚ΠΎ бСшС ΠΏΠΎΠ΄ΠΎΠ±Ρ€Π΅Π½ Ρ‡Ρ€Π΅Π· ΠΏΡ€Π΅ΠΌΠ°Ρ…Π²Π°Π½Π΅ Π½Π° ΠΊΠΎΠ΄Π° Π·Π° ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π°Π²Π°Π½Π΅ Π½Π° броя ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ CPU ядра (оптимизацията ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈ ускорСниС с 25-27%), ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½Π΅ Π² GCC с ΠΎΠΏΡ†ΠΈΠΈ "-O3" (повишСниС ΠΎΡ‚ 5-10%) ΠΈ "-march-native" (5-10%), замяна Π½Π° извикванията Π½Π° read/write с recv/send (5-10%) ΠΈ намаляванС Π½Π° Π½Π°ΠΊΠ»Π°Π΄Π½ΠΈΡ‚Π΅ Ρ€Π°Π·Ρ…ΠΎΠ΄ΠΈ ΠΏΡ€ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° pthreads (2-3%). ΠžΠ±Ρ‰ΠΎΡ‚ΠΎ повишСниС Π½Π° производитСлността слСд оптимизация Π½Π° ΠΊΠΎΠ΄Π° бСшС 55%, Π° пропускната способност нарасна ΠΎΡ‚ 224k req/s Π΄ΠΎ 347k req/s.
  • Π˜Π·ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅ Π½Π° Π·Π°Ρ‰ΠΈΡ‚Π°Ρ‚Π° срСщу уязвимости, ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅Π½ΠΈ ΠΎΡ‚ спСкулативно изпълнСниС Π½Π° инструкции. Π˜Π·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ ΠΏΡ€ΠΈ Π·Π°Ρ€Π΅ΠΆΠ΄Π°Π½Π΅ Π½Π° ядрото "nospectre_v1 nospectre_v2 pti=off mds=off tsx_async_abort=off" ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈ повишСниС Π½Π° производитСлността с 28%, Π° пропускната способност нарасна ΠΎΡ‚ 347k req/s Π΄ΠΎ 446k req/s. ΠŸΠΎΠΎΡ‚Π΄Π΅Π»Π½ΠΎ ΠΏΠΎΠ²ΠΈΡˆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ ΠΎΡ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€Π° "nospectre_v1" (Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ Spectre v1 + SWAPGS) бСшС 1-2%, "nospectre_v2" (Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ Spectre v2) β€” 15-20%, "pti=off" (Spectre v3/Meltdown) β€” 6%, "mds=off tsx_async_abort=off" (MDS/Zombieload ΠΈ TSX АсинхронСн Abort) β€” 6%. НастройкитС Π·Π° Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ Π°Ρ‚Π°ΠΊΠΈ L1TF/Foreshadow (l1tf=flush), iTLB multihit, Speculative Store Bypass ΠΈ SRBDS останаха Π±Π΅Π· промяна, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Π½Π΅ повлияха Π½Π° производитСлността, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Π½Π΅ сС прСсичаха с тСстваната конфигурация (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, спСцифични Π·Π° KVM, Π²Π»ΠΎΠΆΠ΅Π½Π° виртуализация ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ CPU ΠΌΠΎΠ΄Π΅Π»ΠΈ).
  • Π˜Π·ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅ Π½Π° ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΈΡ‚Π΅ Π·Π° ΠΎΠ΄ΠΈΡ‚ ΠΈ Π±Π»ΠΎΠΊΠΈΡ€Π°Π½Π΅ Π½Π° систСмнитС ΠΏΠΎΠ²ΠΈΡ†ΠΈ с ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° "auditctl -a never,task" ΠΈ Π·Π°Π΄Π°Π²Π°Π½Π΅ Π½Π° опцията "β€”security-opt seccomp=unconfined" ΠΏΡ€ΠΈ стартиранС Π½Π° Docker ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°. ΠžΠ±Ρ‰ΠΎΡ‚ΠΎ повишСниС Π½Π° производитСлността бСшС 11%, Π° пропускната способност нарасна ΠΎΡ‚ 446k req/s Π΄ΠΎ 495k req/s.
  • Π˜Π·ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅ Π½Π° iptables/netfilter Ρ‡Ρ€Π΅Π· Π·Π°Ρ€Π΅ΠΆΠ΄Π°Π½Π΅ Π½Π° ΡΠ²ΡŠΡ€Π·Π°Π½ΠΈΡ‚Π΅ с тях ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Π½Π° ядрото. Π˜Π΄Π΅ΡΡ‚Π° Π·Π° ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅ Π½Π° Π·Π°Ρ‰ΠΈΡ‚Π½Π°Ρ‚Π° стСна, която Π½Π΅ Π΅ Π±ΠΈΠ»Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π° Π² спСцифичното ΡΡŠΡ€Π²ΡŠΡ€Π½ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, бСшС ΠΏΠΎΠ΄Ρ‚ΠΈΠΊΠ½Π°Ρ‚Π° ΠΎΡ‚ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈΡ‚Π΅ Π½Π° ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ, спорСд ΠΊΠΎΠΈΡ‚ΠΎ ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° функцията nf_hook_slow ΠΎΡ‚Π½Π΅ΠΌΠ° 18% ΠΎΡ‚ Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ. ΠžΡ‚Π±Π΅Π»ΡΠ·Π²Π° сС, Ρ‡Π΅ nftables Ρ€Π°Π±ΠΎΡ‚ΠΈ ΠΏΠΎ-Π΅Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎ ΠΎΡ‚ iptables, Π½ΠΎ Π² Amazon Linux всС ΠΎΡ‰Π΅ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° iptables. Π‘Π»Π΅Π΄ ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° iptables, ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° производитСлността Π΅ 22%, Π° пропускната способност Π΅ нараснала ΠΎΡ‚ 495k req/s Π΄ΠΎ 603k req/s.
  • НамаляванС Π½Π° миграцията Π½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ядра Π½Π° CPU Π·Π° повишаванС Π½Π° СфСктивността Π½Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° кСша Π½Π° процСсора. ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡΡ‚Π° бСшС Π½Π°ΠΏΡ€Π°Π²Π΅Π½Π° ΠΊΠ°ΠΊΡ‚ΠΎ Π½Π° Π½ΠΈΠ²ΠΎ ΠΏΡ€ΠΈΠ²ΡŠΡ€Π·Π²Π°Π½Π΅ Π½Π° процСситС libreactor към ядрата Π½Π° CPU (CPU Pinning), Ρ‚Π°ΠΊΠ° ΠΈ Ρ‡Ρ€Π΅Π· Π·Π°ΠΊΡ€Π΅ΠΏΠ²Π°Π½Π΅ Π½Π° ΠΌΡ€Π΅ΠΆΠΎΠ²ΠΈΡ‚Π΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈ Π½Π° ядрото (Receive Side Scaling). НапримСр, ΠΈΠ·Π²ΡŠΡ€ΡˆΠ΅Π½ΠΎ Π΅ ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅ Π½Π° irqbalance ΠΈ явна настройка Π½Π° ΠΏΡ€ΠΈΠ²ΡŠΡ€Π·Π²Π°Π½ΠΈΡΡ‚Π° Π½Π° ΠΎΠΏΠ°ΡˆΠΊΠΈΡ‚Π΅ към CPU Π² /proc/irq/$IRQ/smp_affinity_list. Π—Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° Π΅Π΄Π½ΠΎ ΠΈ ΡΡŠΡ‰ΠΎ ядро Π½Π° CPU Π·Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° процСса libreactor ΠΈ ΠΌΡ€Π΅ΠΆΠΎΠ²Π°Ρ‚Π° опашка Π½Π° входящитС ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ, Π΅ Π°Π½Π³Π°ΠΆΠΈΡ€Π°Π½ собствСн BPF-ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ, ΡΠ²ΡŠΡ€Π·Π°Π½ Ρ‡Ρ€Π΅Π· Π·Π°Π΄Π°Π²Π°Π½Π΅ Π½Π° Ρ„Π»Π°Π³Π° SO_ATTACH_REUSEPORT_CBPF ΠΏΡ€ΠΈ ΡΡŠΠ·Π΄Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° сокСта. Π—Π° ΠΏΡ€ΠΈΠ²ΡŠΡ€Π·Π²Π°Π½Π΅ към CPU Π½Π° ΠΎΠΏΠ°ΡˆΠΊΠΈΡ‚Π΅ Π½Π° изходящитС ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ, настройкитС Π½Π° /sys/class/net/eth0/queues/tx-/xps_cpus са ΠΏΡ€ΠΎΠΌΠ΅Π½Π΅Π½ΠΈ. ΠžΠ±Ρ‰ΠΎΡ‚ΠΎ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ Π½Π° производитСлността Π΅ 38%, Π° пропускната способност Π΅ нараснала ΠΎΡ‚ 603k req/s Π΄ΠΎ 834k req/s.
  • ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ Π½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°Ρ‚Π° Π½Π° ΠΏΡ€Π΅ΠΊΡŠΡΠ²Π°Π½ΠΈΡ ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΠΏΠΎΠ»ΠΈΠ½Π³ (polling). Π’ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Ρ€Π΅ΠΆΠΈΠΌΠ° adaptive-rx Π² Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° ENA ΠΈ ΠΌΠ°Π½ΠΈΠΏΡƒΠ»Π°Ρ†ΠΈΠΈΡ‚Π΅ със sysctl net.core.busy_read ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ…Π° повишаванС Π½Π° производитСлността с 28% (пропускната способност нарасна ΠΎΡ‚ 834k req/s Π΄ΠΎ 1.06M req/s, Π° латСнтността спадна ΠΎΡ‚ 361ΞΌs Π΄ΠΎ 292ΞΌs).
  • Π˜Π·ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅ Π½Π° систСмни услуги, Π²ΠΎΠ΄Π΅Ρ‰ΠΈ Π΄ΠΎ излишни Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ Π² мрСТовия стСк. Π˜Π·ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° dhclient ΠΈ настройката IP адрСси Ρ€ΡŠΡ‡Π½ΠΎ Π΄ΠΎΠ²Π΅Π΄Π΅ Π΄ΠΎ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ Π½Π° производитСлността с 6%, Π° пропускната способност нарасна ΠΎΡ‚ 1.06M req/s Π΄ΠΎ 1.12M req/s. ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π°Ρ‚Π° Π·Π° влияниСто Π½Π° dhclient Π²ΡŠΡ€Ρ…Ρƒ производитСлността Π΅ Π² Π°Π½Π°Π»ΠΈΠ·Π° Π½Π° Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ° с ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° raw-сокСта.
  • Π‘ΠΎΡ€Π±Π° с Spin Lock. ΠŸΡ€Π΅ΠΌΠΈΠ½Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° мрСТовия стСк Π² Ρ€Π΅ΠΆΠΈΠΌ β€žnoqueueβ€œ Ρ‡Ρ€Π΅Π· sysctl β€žnet.core.default_qdisc=noqueueβ€œ ΠΈ β€žtc qdisc replace dev eth0 root mqβ€œ Π΄ΠΎΠ²Π΅Π΄Π΅ Π΄ΠΎ ΡƒΠ²Π΅Π»ΠΈΡ‡Π°Π²Π°Π½Π΅ Π½Π° производитСлността с 2%, Π° пропускната способност нарасна ΠΎΡ‚ 1.12M req/s Π΄ΠΎ 1.15M req/s.
  • Π€ΠΈΠ½Π°Π»Π½ΠΈΡ‚Π΅ ΠΌΠ°Π»ΠΊΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ, ΠΊΠ°Ρ‚ΠΎ Π΄Π΅Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½Π΅ Π½Π° GRO (Generic Receive Offload) с ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° Β«ethtool -K eth0 gro offΒ» ΠΈ смяна Π½Π° Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΡŠΠΌΠ° Π·Π° ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ» Π½Π° Π·Π°Π΄Ρ€ΡŠΡΡ‚Π²Π°Π½ΠΈΡΡ‚Π° ΠΎΡ‚ cubic Π½Π° reno с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° sysctl Β«net.ipv4.tcp_congestion_control=renoΒ». ΠžΠ±Ρ‰ΠΎΡ‚ΠΎ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ Π½Π° производитСлността Π΅ 4%. ΠŸΡ€ΠΎΠΏΡƒΡΠΊΠ°Ρ‚Π΅Π»Π½Π°Ρ‚Π° способност сС ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈ ΠΎΡ‚ 1.15M req/s Π΄ΠΎ 1.2M req/s.

Π’ допълнСниС Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ‚Π΅ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ, статията Ρ€Π°Π·Π³Π»Π΅ΠΆΠ΄Π° ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ Π½Π΅ Π΄ΠΎΠ²Π΅Π΄ΠΎΡ…Π° Π΄ΠΎ ΠΎΡ‡Π°ΠΊΠ²Π°Π½ растСТ Π½Π° производитСлността. НапримСр, сС ΠΎΠΊΠ°Π·Π°Ρ…Π° Π½Π΅Π΅Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΈ:

  • ΠžΡ‚Π΄Π΅Π»Π½ΠΈΡΡ‚ старт Π½Π° libreactor Π½Π΅ сС Ρ€Π°Π·Π»ΠΈΡ‡Π°Π²Π°ΡˆΠ΅ ΠΏΠΎ производитСлност ΠΎΡ‚ старта Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€. НямашС влияниС ΠΎΡ‚ смяната Π½Π° writev с send, ΡƒΠ²Π΅Π»ΠΈΡ‡Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° maxevents Π² epoll_wait, СкспСримСнтитС с вСрсиитС ΠΈ Ρ„Π»Π°Π³ΠΎΠ²Π΅Ρ‚Π΅ Π½Π° GCC (Π΅Ρ„Π΅ΠΊΡ‚ΡŠΡ‚ бСшС Π·Π°Π±Π΅Π»Π΅ΠΆΠΈΠΌ само Π·Π° Ρ„Π»Π°Π³ΠΎΠ²Π΅Ρ‚Π΅ Β«-O3Β» ΠΈ Β«-march-nativeΒ»).
  • Актуализацията Π½Π° ядрото Π½Π° Linux Π΄ΠΎ вСрсии 4.19 ΠΈ 5.4 Π½Π΅ повлия Π½Π° производитСлността, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‡ΠΈΡ†ΠΈ SCHED_FIFO ΠΈ SCHED_RR, ΠΌΠ°Π½ΠΈΠΏΡƒΠ»Π°Ρ†ΠΈΠΈΡ‚Π΅ с sysctl kernel.sched_min_granularity_ns, kernel.sched_wakeup_granularity_ns, transparent_hugepages=never, skew_tick=1 ΠΈ clocksource=tsc.
  • Π’ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° ENA Π²ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Ρ€Π΅ΠΆΠΈΠΌΠΈΡ‚Π΅ Offload (segmentation, scatter-gather, rx/tx checksum), компилацията с Ρ„Π»Π°Π³ Β«-O3Β» ΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΡ‚Π΅ ena.rx_queue_size ΠΈ ena.force_large_llq_header Π½Π΅ повлияха.
  • ΠŸΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ Π² мрСТовия стСк Π½Π΅ Π΄ΠΎΠ²Π΅Π΄ΠΎΡ…Π° Π΄ΠΎ ΡƒΠ²Π΅Π»ΠΈΡ‡Π°Π²Π°Π½Π΅ Π½Π° производитСлността:
    • Π”Π΅Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½Π΅ Π½Π° IPv6: ipv6.disable=1
    • Π”Π΅Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½Π΅ Π½Π° VLAN: modprobe -rv 8021q
    • Π”Π΅Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°Ρ‚Π° Π½Π° ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΠΊΠ° Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚Π°
      • net.ipv4.conf.all.rp_filter=0
      • net.ipv4.conf.eth0.rp_filter=0
      • net.ipv4.conf.all.accept_local=1 (Π½Π΅Π³Π°Ρ‚ΠΈΠ²Π΅Π½ Π΅Ρ„Π΅ΠΊΡ‚)
    • net.ipv4.tcp_sack=0
    • net.ipv4.tcp_dsack=0
    • net.ipv4.tcp_mem/tcp_wmem/tcp_rmem
    • net.core.netdev_budget
    • net.core.dev_weight
    • net.core.netdev_max_backlog
    • net.ipv4.tcp_slow_start_after_idle=0
    • net.ipv4.tcp_moderate_rcvbuf=0
    • net.ipv4.tcp_timestamps=0
    • net.ipv4.tcp_low_latency=1
    • SO_PRIORITY
    • TCP_NODELAY

    Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ | ProHoster