เบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบš Linux เป€เบžเบทเปˆเบญเบˆเบฑเบ”เบเบฒเบ™เบเบฑเบš 1.2 เบฅเป‰เบฒเบ™เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เป JSON เบ•เปเปˆเบงเบดเบ™เบฒเบ—เบต

เบ„เบนเปˆเบกเบทเบฅเบฒเบเบฅเบฐเบญเบฝเบ”เป„เบ”เป‰เบ–เบทเบเบˆเบฑเบ”เบžเบตเบกเบกเบฒเบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เบ›เบฑเบšเบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบก Linux เป€เบžเบทเปˆเบญเบšเบฑเบ™เบฅเบธเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบชเบนเบ‡เบชเบธเบ”เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ›เบฐเบกเบงเบ™เบœเบปเบ™เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เป HTTP. เบงเบดเบ—เบตเบเบฒเบ™เบ—เบตเปˆเบชเบฐเป€เบซเบ™เบตเป€เบฎเบฑเบ”เปƒเบซเป‰เบกเบฑเบ™เป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบ—เบตเปˆเบˆเบฐเป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบ‚เบญเบ‡เป‚เบ›เป€เบŠเบ”เป€เบŠเบต JSON เป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆเบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ” libreactor เปƒเบ™เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบก Amazon EC2 (4 vCPU) เบˆเบฒเบ 224 เบžเบฑเบ™เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เป API เบ•เปเปˆเบงเบดเบ™เบฒเบ—เบตเบเบฑเบšเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™เบ‚เบญเบ‡ Amazon Linux 2 เบเบฑเบš kernel 4.14 เบซเบฒ 1.2 เบฅเป‰เบฒเบ™เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเบ•เปเปˆ. เบ—เบตเบชเบญเบ‡เบซเบผเบฑเบ‡เบˆเบฒเบเบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบš (เป€เบžเบตเปˆเบกเบ‚เบถเป‰เบ™ 436%), เปเบฅเบฐเบเบฑเบ‡เบ™เปเบฒเป„เบ›เบชเบนเปˆเบเบฒเบ™เบซเบผเบธเบ”เบœเปˆเบญเบ™เบ„เบงเบฒเบกเบฅเปˆเบฒเบŠเป‰เบฒเปƒเบ™เบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เป 79%. เบงเบดเบ—เบตเบเบฒเบ™เบ—เบตเปˆเบชเบฐเป€เบซเบ™เบตเบšเปเปˆเบชเบฐเป€เบžเบฒเบฐเบเบฑเบš libreactor เปเบฅเบฐเป€เบฎเบฑเบ”เบงเบฝเบเปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเปƒเบŠเป‰เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ http เบญเบทเปˆเบ™เป†, เบฅเบงเบกเบ—เบฑเบ‡ nginx, Actix, Netty เปเบฅเบฐ Node.js (libreactor เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เปƒเบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเป€เบžเบฒเบฐเบงเปˆเบฒเบเบฒเบ™เปเบเป‰เป„เบ‚เป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆเบกเบฑเบ™เบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เป€เบ–เบดเบ‡เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ—เบตเปˆเบ”เบตเบเบงเปˆเบฒ).

เบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบš Linux เป€เบžเบทเปˆเบญเบˆเบฑเบ”เบเบฒเบ™เบเบฑเบš 1.2 เบฅเป‰เบฒเบ™เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เป JSON เบ•เปเปˆเบงเบดเบ™เบฒเบ—เบต

เบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบžเบทเป‰เบ™เบ–เบฒเบ™:

  • เบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบฅเบฐเบซเบฑเบ” libreactor. เบ—เบฒเบ‡เป€เบฅเบทเบญเบ R18 เบˆเบฒเบเบŠเบธเบ” Techempower เป„เบ”เป‰เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป€เบ›เบฑเบ™เบžเบทเป‰เบ™เบ–เบฒเบ™, เป€เบŠเบดเปˆเบ‡เป„เบ”เป‰เบ–เบทเบเบ›เบฑเบšเบ›เบธเบ‡เป‚เบ”เบเบเบฒเบ™เบ–เบญเบ™เบฅเบฐเบซเบฑเบ”เป€เบžเบทเปˆเบญเบˆเปเบฒเบเบฑเบ”เบˆเปเบฒเบ™เบงเบ™เบ‚เบญเบ‡ CPU cores เบ—เบตเปˆเปƒเบŠเป‰ (เบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เป€เบฅเบฑเปˆเบ‡เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเป‚เบ”เบ 25-27%), เบ›เบฐเบเบญเบšเปƒเบ™ GCC เบ”เป‰เบงเบเบ•เบปเบงเป€เบฅเบทเบญเบ "-O3" (เป€เบžเบตเปˆเบกเบ‚เบถเป‰เบ™ 5-10%) เปเบฅเบฐ "-march-native" (5-10%), เปเบ—เบ™เบ—เบตเปˆเบเบฒเบ™เบญเปˆเบฒเบ™ / เบ‚เบฝเบ™เบเบฒเบ™เป‚เบ—เบ”เป‰เบงเบ recv / เบชเบปเปˆเบ‡ (5-10%) เปเบฅเบฐเบซเบผเบธเบ”เบœเปˆเบญเบ™ overhead เป€เบกเบทเปˆเบญเปƒเบŠเป‰ pthreads (2-3%). . เบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเป‚เบ”เบเบฅเบงเบกเบซเบผเบฑเบ‡เบˆเบฒเบเบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบฅเบฐเบซเบฑเบ”เปเบกเปˆเบ™ 55%, เปเบฅเบฐ throughput เป€เบžเบตเปˆเบกเบ‚เบถเป‰เบ™เบˆเบฒเบ 224k req / s เป€เบ›เบฑเบ™ 347k req / s.
  • เบ›เบดเบ”เบเบฒเบ™เปƒเบŠเป‰เบ‡เบฒเบ™เบเบฒเบ™เบ›เบปเบเบ›เป‰เบญเบ‡เบ•เปเปˆเบเบฑเบšเบ„เบงเบฒเบกเบญเปˆเบญเบ™เปเบญเบ‚เบญเบ‡เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบ„เบฒเบ”เป€เบ”เบปเบฒ. เบเบฒเบ™เปƒเบŠเป‰เบžเบฒเบฅเบฒเบกเบดเป€เบ•เบต "nospectre_v1 nospectre_v2 pti=off mds=off tsx_async_abort=off" เป€เบกเบทเปˆเบญเป‚เบซเบฅเบ” kernel เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบš 28%, เปเบฅเบฐ throughput เป€เบžเบตเปˆเบกเบ‚เบถเป‰เบ™เบˆเบฒเบ 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, เบงเบฒเบ‡เป„เบงเป‰. virtualization เปเบฅเบฐเบฎเบนเบšเปเบšเบš CPU เบญเบทเปˆเบ™เป†).
  • เบเบฒเบ™เบ›เบดเบ”เบเบฒเบ™เบเบงเบ”เบชเบญเบšเปเบฅเบฐเบเบปเบ™เป„เบเบเบฒเบ™เบ‚เบฑเบ”เบ‚เบงเบฒเบ‡เบเบฒเบ™เป‚เบ—เบฅเบฐเบšเบปเบšเป‚เบ”เบเปƒเบŠเป‰เบ„เปเบฒเบชเบฑเปˆเบ‡ "auditctl -a never,task" เปเบฅเบฐเบฅเบฐเบšเบธเบ—เบฒเบ‡เป€เบฅเบทเบญเบ "--security-opt seccomp=unconfined" เป€เบกเบทเปˆเบญเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™ docker container. เบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเป‚เบ”เบเบฅเบงเบกเปเบกเปˆเบ™ 11%, เปเบฅเบฐ throughput เป€เบžเบตเปˆเบกเบ‚เบถเป‰เบ™เบˆเบฒเบ 446k req / s เป€เบ›เบฑเบ™ 495k req / s.
  • เบเบฒเบ™เบ›เบดเบ”เบเบฒเบ™เปƒเบŠเป‰เบ‡เบฒเบ™ iptables/netfilter เป‚เบ”เบเบเบฒเบ™เบเบปเบเป€เบฅเบตเบเบเบฒเบ™เป‚เบซเบผเบ”เป‚เบกเบ”เบนเบ™ kernel เบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡. เบ„เบงเบฒเบกเบ„เบดเบ”เบ—เบตเปˆเบˆเบฐเบ›เบดเบ”เบเบฒเบ™เบ—เปเบฒเบ‡เบฒเบ™เป„เบŸเบงเป, เป€เบŠเบดเปˆเบ‡เบšเปเปˆเป„เบ”เป‰เปƒเบŠเป‰เปƒเบ™เบเบฒเบ™เปเบเป‰เป„เบ‚เป€เบŠเบตเบŸเป€เบงเบตเบชเบฐเป€เบžเบฒเบฐ, เป„เบ”เป‰เบ–เบทเบเบเบฐเบ•เบธเป‰เบ™เป‚เบ”เบเบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบš profile, เบ•เบฑเบ”เบชเบดเบ™เป‚เบ”เบเบŸเบฑเบ‡เบŠเบฑเบ™ nf_hook_slow เปƒเบŠเป‰เป€เบงเบฅเบฒ 18% เบ‚เบญเบ‡เป€เบงเบฅเบฒเบ—เบตเปˆเบˆเบฐเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™. เบกเบฑเบ™เป„เบ”เป‰เบ–เบทเบเบชเบฑเบ‡เป€เบเบ”เป€เบซเบฑเบ™เบงเปˆเบฒ nftables เป€เบฎเบฑเบ”เบงเบฝเบเบ—เบตเปˆเบกเบตเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบซเบผเบฒเบเบเปˆเบงเบฒ iptables, เปเบ•เปˆ Amazon Linux เบเบฑเบ‡เบชเบทเบšเบ•เปเปˆเปƒเบŠเป‰ iptables. เบซเบผเบฑเบ‡เบˆเบฒเบเบเบฒเบ™เบ›เบดเบ”เบเบฒเบ™เปƒเบŠเป‰เบ‡เบฒเบ™ iptables, เบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเป€เบžเบตเปˆเบกเบ‚เบถเป‰เบ™เปเบกเปˆเบ™ 22%, เปเบฅเบฐ throughput เป€เบžเบตเปˆเบกเบ‚เบถเป‰เบ™เบˆเบฒเบ 495k req/s เป€เบ›เบฑเบ™ 603k req/s.
  • เบซเบผเบธเบ”เบœเปˆเบญเบ™เบเบฒเบ™เป€เบ„เบทเปˆเบญเบ™เบเป‰เบฒเบเบ•เบปเบงเบˆเบฑเบ”เบเบฒเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เปเบเบ™ CPU เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เป€เบžเบทเปˆเบญเบ›เบฑเบšเบ›เบธเบ‡เบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบ‚เบญเบ‡เบเบฒเบ™เปƒเบŠเป‰ cache เบ‚เบญเบ‡เป‚เบ›เป€เบŠเบ”เป€เบŠเบต. เบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเป„เบ”เป‰เบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”เบ—เบฑเบ‡เปƒเบ™เบฅเบฐเบ”เบฑเบšเบ‚เบญเบ‡เบ‚เบฐเบšเบงเบ™เบเบฒเบ™ libreactor binding เบเบฑเบš CPU cores (CPU Pinning) เปเบฅเบฐเป‚เบ”เบเบœเปˆเบฒเบ™เบเบฒเบ™ pinning kernel network handlers (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_cpu. เบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเป‚เบ”เบเบฅเบงเบกเปเบกเปˆเบ™ 38%, เปเบฅเบฐ throughput เป€เบžเบตเปˆเบกเบ‚เบถเป‰เบ™เบˆเบฒเบ 603k req / s เป€เบ›เบฑเบ™ 834k req / s.
  • เบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบ‚เบญเบ‡เบเบฒเบ™เบˆเบฑเบ”เบเบฒเบ™เบ‚เบฑเบ”เบ‚เบงเบฒเบ‡เปเบฅเบฐเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบเบฒเบ™เบฅเบปเบ‡เบ„เบฐเปเบ™เบ™เบชเบฝเบ‡. เบเบฒเบ™เป€เบ›เบตเบ”เปƒเบŠเป‰เป‚เปเบ” adaptive-rx เปƒเบ™เป„เบ”เป€เบงเบต ENA เปเบฅเบฐเบเบฒเบ™เบˆเบฑเบ”เบเบฒเบ™ sysctl net.core.busy_read เบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเป€เบžเบตเปˆเบกเบ‚เบถเป‰เบ™ 28% (เบเบฒเบ™เบชเบปเปˆเบ‡เบœเปˆเบฒเบ™เป€เบžเบตเปˆเบกเบ‚เบถเป‰เบ™เบˆเบฒเบ 834k req/s เป€เบ›เบฑเบ™ 1.06M req/s, เปเบฅเบฐ latency เบซเบผเบธเบ”เบฅเบปเบ‡เบˆเบฒเบ 361ฮผs เบซเบฒ 292ฮผs).
  • เบเบฒเบ™เบ›เบดเบ”เบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™เบฅเบฐเบšเบปเบšเบ—เบตเปˆเบ™เปเบฒเป„เบ›เบชเบนเปˆเบเบฒเบ™เบ›เบดเบ”เบเบฑเป‰เบ™เบ—เบตเปˆเบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เปƒเบ™ stack เป€เบ„เบทเบญเบ‚เปˆเบฒเบ. เบเบฒเบ™เบ›เบดเบ”เบเบฒเบ™เปƒเบŠเป‰เบ‡เบฒเบ™ dhclient เปเบฅเบฐเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ—เบตเปˆเบขเบนเปˆ IP เบ”เป‰เบงเบเบ•เบปเบ™เป€เบญเบ‡เป€เบฎเบฑเบ”เปƒเบซเป‰เบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบš 6% เป€เบžเบตเปˆเบกเบ‚เบถเป‰เบ™เปเบฅเบฐ passput เป€เบžเบตเปˆเบกเบ‚เบถเป‰เบ™เบˆเบฒเบ 1.06M req/s เป€เบ›เบฑเบ™ 1.12M req/s. เป€เบซเบ”เบœเบปเบ™ dhclient เบœเบปเบ™เบเบฐเบ—เบปเบšเบ•เปเปˆเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เปเบกเปˆเบ™เบขเบนเปˆเปƒเบ™เบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐเบเบฒเบ™เบˆเบฐเบฅเบฒเบˆเบญเบ™เป‚เบ”เบเปƒเบŠเป‰เบŠเบฑเบญเบเป€เบเบฑเบ”เบ”เบดเบš.
  • เบ•เปเปˆเบชเบนเป‰เบเบฑเบš Spin Lock. เบเบฒเบ™เบ›เปˆเบฝเบ™ stack เป€เบ„เบทเบญเบ‚เปˆเบฒเบเป€เบ›เบฑเบ™เป‚เบซเบกเบ” "noqueue" เบœเปˆเบฒเบ™ sysctl "net.core.default_qdisc=noqueue" เปเบฅเบฐ "tc qdisc เปเบ—เบ™ dev eth0 root mq" เป€เบฎเบฑเบ”เปƒเบซเป‰เบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบš 2% เป€เบžเบตเปˆเบกเบ‚เบถเป‰เบ™, เปเบฅเบฐ throughput เป€เบžเบตเปˆเบกเบ‚เบถเป‰เบ™เบˆเบฒเบ 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 เบ”เป‰เบงเบเบเบฒเบ™เบชเบปเปˆเบ‡, เบเบฒเบ™เป€เบžเบตเปˆเบก maxevents เปƒเบ™ epoll_wait, เปเบฅเบฐเบเบฒเบ™เบ—เบปเบ”เบฅเบญเบ‡เบเบฑเบšเบฅเบธเป‰เบ™ เปเบฅเบฐเบ—เบธเบ‡ GCC เบšเปเปˆเบกเบตเบœเบปเบ™ (เบœเบปเบ™เบเบฐเบ—เบปเบšเปเบกเปˆเบ™เป€เบซเบฑเบ™เป„เบ”เป‰เบŠเบฑเบ”เป€เบˆเบ™เบชเปเบฒเบฅเบฑเบšเบ—เบธเบ‡ โ€œ-O3โ€ เปเบฅเบฐ โ€œ-march-nativeโ€).
  • เบเบฒเบ™เบญเบฑเบšเป€เบเบฃเบ” kernel Linux เป€เบ›เบฑเบ™เป€เบงเบตเบŠเบฑเปˆเบ™ 4.19 เปเบฅเบฐ 5.4, เป‚เบ”เบเปƒเบŠเป‰ SCHED_FIFO เปเบฅเบฐ SCHED_RR เบเบณเบ™เบปเบ”เป€เบงเบฅเบฒ, เปเบนเบ™เปƒเบŠเป‰ sysctl kernel.sched_min_granularity_ns, kernel.sched_wakeup_granularity_ns, transparent_hugepages=clockew_sourced, เบœเบปเบ™เบเบฐเบ—เบปเบšเบ•เปเปˆเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบ.
  • เปƒเบ™เป„เบ”เป€เบงเบต ENA, เบเบฒเบ™เป€เบ›เบตเบ”เปƒเบŠเป‰เป‚เปเบ” Offload (segmentation, scatter-gather, rx/tx checksum), เบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เบ”เป‰เบงเบเบ—เบธเบ‡ โ€œ-O3โ€, เปเบฅเบฐเบเบฒเบ™เปƒเบŠเป‰เบžเบฒเบฅเบฒเบกเบดเป€เบ•เบต ena.rx_queue_size เปเบฅเบฐ ena.force_large_llq_header เบšเปเปˆเบกเบตเบœเบปเบ™เบซเบเบฑเบ‡เป€เบฅเบตเบ.
  • เบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เปƒเบ™ stack เป€เบ„เบทเบญเบ‚เปˆเบฒเบเบšเปเปˆเป„เบ”เป‰เบ›เบฑเบšเบ›เบธเบ‡เบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบš:
    • เบ›เบดเบ”เบเบฒเบ™เปƒเบŠเป‰เบ‡เบฒเบ™ 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

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™