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

ΠŸΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°Π½ΠΎ Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ Ρ€ΡŠΠΊΠΎΠ²ΠΎΠ΄ΡΡ‚Π²ΠΎ Π·Π° настройка Π½Π° Linux срСдата Π·Π° постиганС Π½Π° максимална производитСлност Π·Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° HTTP заявки. ΠŸΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ…Π° Π΄Π° сС ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈ производитСлността Π½Π° JSON процСсора, Π±Π°Π·ΠΈΡ€Π°Π½ Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° libreactor Π² срСдата Π½Π° Amazon EC2 (4 vCPU) ΠΎΡ‚ 224 хиляди 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%), замСняйки извикванията Π·Π° Ρ‡Π΅Ρ‚Π΅Π½Π΅/запис с 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 Asynchronous Abort) - 6%. НастройкитС Π·Π° Π·Π°Ρ‰ΠΈΡ‚Π° срСщу L1TF/Foreshadow (l1tf=flush), iTLB multihit, Speculative Store Bypass ΠΈ SRBDS Π°Ρ‚Π°ΠΊΠΈ бяха оставСни Π½Π΅ΠΏΡ€ΠΎΠΌΠ΅Π½Π΅Π½ΠΈ, ΠΊΠΎΠ΅Ρ‚ΠΎ Π½Π΅ сС ΠΎΡ‚Ρ€Π°Π·ΠΈ Π½Π° производитСлността, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Π½Π΅ сС прСсичаха с тСстваната конфигурация (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, спСцифични Π·Π° KVM, Π²Π»ΠΎΠΆΠ΅Π½ΠΈ виртуализация ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ CPU ΠΌΠΎΠ΄Π΅Π»ΠΈ).
  • Π”Π΅Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΈΡ‚Π΅ Π·Π° ΠΎΠ΄ΠΈΡ‚ ΠΈ Π±Π»ΠΎΠΊΠΈΡ€Π°Π½Π΅ Π½Π° систСмни повиквания с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° "auditctl -a never,task" ΠΈ ΡƒΠΊΠ°Π·Π²Π°Π½Π΅ Π½Π° опцията "--security-opt seccomp=unconfined" ΠΏΡ€ΠΈ стартиранС Π½Π° Π΄ΠΎΠΊΠ΅Ρ€ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°. ΠžΠ±Ρ‰ΠΎΡ‚ΠΎ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ Π½Π° производитСлността бСшС 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.
  • НамалСна миграция Π½Π° ΠΌΠ°Π½ΠΈΠΏΡƒΠ»Π°Ρ‚ΠΎΡ€ΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ процСсорни ядра Π·Π° подобряванС Π½Π° СфСктивността Π½Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° кСша Π½Π° процСсора. ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡΡ‚Π° бСшС ΠΈΠ·Π²ΡŠΡ€ΡˆΠ΅Π½Π° ΠΊΠ°ΠΊΡ‚ΠΎ Π½Π° Π½ΠΈΠ²ΠΎΡ‚ΠΎ Π½Π° ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅ Π½Π° процСситС Π½Π° libreactor към ядрата Π½Π° процСсора (CPU Pinning), Ρ‚Π°ΠΊΠ° ΠΈ Ρ‡Ρ€Π΅Π· фиксиранС Π½Π° ΠΌΡ€Π΅ΠΆΠΎΠ²ΠΈ ΠΌΠ°Π½ΠΈΠΏΡƒΠ»Π°Ρ‚ΠΎΡ€ΠΈ Π½Π° ядрото (Receive Side Scaling). НапримСр irqbalance бСшС Π΄Π΅Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½ ΠΈ Π°Ρ„ΠΈΠ½ΠΈΡ‚Π΅Ρ‚ΡŠΡ‚ Π½Π° ΠΎΠΏΠ°ΡˆΠΊΠ°Ρ‚Π° към процСсора бСшС ΠΈΠ·Ρ€ΠΈΡ‡Π½ΠΎ Π·Π°Π΄Π°Π΄Π΅Π½ Π² /proc/irq/$IRQ/smp_affinity_list. Π—Π° Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π΅Π΄Π½ΠΎ ΠΈ ΡΡŠΡ‰ΠΎ процСсорно ядро ​​за ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° процСса Π½Π° libreactor ΠΈ ΠΌΡ€Π΅ΠΆΠΎΠ²Π°Ρ‚Π° опашка ΠΎΡ‚ входящи ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ, сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° пСрсонализиран ΠΌΠ°Π½ΠΈΠΏΡƒΠ»Π°Ρ‚ΠΎΡ€ Π½Π° BPF, ΡΠ²ΡŠΡ€Π·Π°Π½ Ρ‡Ρ€Π΅Π· Π·Π°Π΄Π°Π²Π°Π½Π΅ Π½Π° Ρ„Π»Π°Π³Π° SO_ATTACH_REUSEPORT_CBPF ΠΏΡ€ΠΈ ΡΡŠΠ·Π΄Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° сокСта. Π—Π° Π΄Π° сС ΠΎΠ±Π²ΡŠΡ€ΠΆΠ°Ρ‚ опашки ΠΎΡ‚ изходящи ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ към процСсора, настройкитС /sys/class/net/eth0/queues/tx-/xps_cpus са ΠΏΡ€ΠΎΠΌΠ΅Π½Π΅Π½ΠΈ. ΠžΠ±Ρ‰ΠΎΡ‚ΠΎ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ Π½Π° производитСлността бСшС 38%, Π° пропускатСлната способност сС ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈ ΠΎΡ‚ 603k req/s Π½Π° 834k req/s.
  • ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°Ρ‚Π° Π½Π° ΠΏΡ€Π΅ΠΊΡŠΡΠ²Π°Π½ΠΈΡΡ‚Π° ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π°Π½ΠΊΠ΅Ρ‚ΠΈΡ€Π°Π½Π΅. АктивиранСто Π½Π° Ρ€Π΅ΠΆΠΈΠΌΠ° 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 влияС Π²ΡŠΡ€Ρ…Ρƒ производитСлността, Π΅ Π² Π°Π½Π°Π»ΠΈΠ·Π° Π½Π° Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ°, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π΅Π½ сокСт.
  • Π‘ΠΎΡ€Π±Π° със 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β€œ ΠΈ замяна Π½Π° кубичния Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΡŠΠΌ Π·Π° ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ» Π½Π° Π·Π°Π΄Ρ€ΡŠΡΡ‚Π²Π°Π½ΠΈΡΡ‚Π° с reno, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ sysctl β€žnet.ipv4.tcp_congestion_control=renoβ€œ. ΠžΠ±Ρ‰ΠΎΡ‚ΠΎ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ Π½Π° производитСлността Π΅ 4%. ΠŸΡ€ΠΎΠΏΡƒΡΠΊΠ°Ρ‚Π΅Π»Π½Π°Ρ‚Π° способност Π΅ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½Π° ΠΎΡ‚ 1.15M req/s Π½Π° 1.2M req/s.

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

  • Π‘Ρ‚Π°Ρ€Ρ‚ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° libreactor ΠΎΡ‚Π΄Π΅Π»Π½ΠΎ Π½Π΅ сС Ρ€Π°Π·Π»ΠΈΡ‡Π°Π²Π° ΠΏΠΎ производитСлност ΠΎΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° ΠΌΡƒ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€. Замяната Π½Π° writev с ΠΈΠ·ΠΏΡ€Π°Ρ‰Π°Π½Π΅, ΡƒΠ²Π΅Π»ΠΈΡ‡Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° 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 Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° Ρ€Π΅ΠΆΠΈΠΌΠΈ Π½Π° Ρ€Π°Π·Ρ‚ΠΎΠ²Π°Ρ€Π²Π°Π½Π΅ (сСгмСнтиранС, ΡΡŠΠ±ΠΈΡ€Π°Π½Π΅ Π½Π° разсСйванС, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π½Π° сума Π½Π° rx/tx), ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅Ρ‚ΠΎ с Ρ„Π»Π°Π³Π° β€ž-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

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€