ืคืืจืกื ืืืจืื ืืคืืจื ืื ืืฉื ืืืื ืื ืกืืืืช ืืื ืืงืก ืืืฉืืช ืืืฆืืขืื ืืงืกืืืืืื ืืขืืืื ืืงืฉืืช 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 ืฉืืืฉ ืืืืืงืืช ืื ืืคืชืจืื ืืืืืกืก ืขืืื ืืจืื ืืืฆืืขืื ืืืืื ืืืชืจ).
ืืืคืืืืืืฆืืืช ืืกืืกืืืช:
- ืืืคืืืืืืฆืื ืฉื ืงืื ืืืืจืงืืืจ. ืืืืคืฆืื R18 ืืชืื ืขืจืืช Techempower ืฉืืืฉื ืืืกืืก, ืืฉืจ ืฉืืคืจื ืขื ืืื ืืกืจืช ืงืื ืืื ืืืืืื ืืช ืืกืคืจ ืืืืืช ืืืขืื ืืฉืืืืฉ (ืืืคืืืืืืฆืื ืืคืฉืจื ืืืจื ืืช ืืขืืืื ื-25-27%), ืืจืืื ื-GCC ืขื ืืคืฉืจืืืืช "-O3" (ืขืืืื ืฉื 5-10% ) ื-"-March-native" (5-10%), ืืืืคืช ืฉืืืืช ืงืจืืื/ืืชืืื ื-rev/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" ืืขืช ืืคืขืืช ืืงืื ืืืื ืจ ืฉื docker. ืขืืืืช ืืืืฆืืขืื ืืืืืืช ืืืืชื 11%, ืืืชืคืืงื ืืืื ื-446 ืืืฃ ืืจืืฉืืช/ืฉื ืืืช ื-495 ืืืฃ ืืจืืฉืืช/ืฉื ืืืช.
- ืืฉืืชืช iptables/netfilter ืขื ืืื ืคืจืืงืช ืืืืืื ืืืืื ืืืฉืืืืื. ืืจืขืืื ืืืฉืืืช ืืช ืืืืช ืืืฉ, ืฉืื ืืื ืืฉืืืืฉ ืืคืชืจืื ืฉืจืช ืกืคืฆืืคื, ื ืืฆืจ ืขื ืืื ืืฆืืจืช ืคืจืืคืืืื, ืืคืืื ืืงื ืืคืื ืงืฆืืืช nf_hook_slow 18% ืืืืื ืืืืฆืืข. ืืฆืืื ืื nftables ืขืืื ืืฆืืจื ืืขืืื ืืืชืจ ืืืฉืจ iptables, ืื ืืืืื ืืื ืืงืก ืืืฉืืื ืืืฉืชืืฉ ื-iptables. ืืืืจ ืืฉืืชืช iptables, ืืขืืืื ืืืืฆืืขืื ืืืืชื 22%, ืืืชืคืืงื ืืืื ื-495k req/s ื-603k req/s.
- ืืืืจื ืืืคืืชืช ืฉื ืืืคืืื ืืื ืืืืืช CPU ืฉืื ืืช ืืื ืืฉืคืจ ืืช ืืืขืืืืช ืฉื ืืฉืืืืฉ ืืืืืื ืืืขืื. ืืืคืืืืืืฆืื ืืืฆืขื ืื ืืจืืช ืงืฉืืจืช ืชืืืืื ืืืฉืืจืจ ืืืืืืช CPU (CPU Pinning) ืืื ืืืืฆืขืืช ืืฆืืืช ืืืคืื ืจืฉืช ืืืื (Receive Side Scaling). ืืืืืื, irqbalance ืืืฉืืชื ืืืืงืช โโืืชืืจ ืืืขืื ืืืืืจื ืืืคืืจืฉ ื-/proc/irq/$IRQ/smp_affinity_list. ืืื ืืืฉืชืืฉ ืืืืชื ืืืืช CPU ืืื ืืขืื ืืช ืชืืืื ื-Libreactor ืืืช ืชืืจ ืืจืฉืช ืฉื ืื ืืช ื ืื ืกืืช, ื ืขืฉื ืฉืืืืฉ ืืืืคื BPF ืืืชืื ืืืฉืืช, ืืืืืืจ ืขื ืืื ืืืืจืช ืืืื SO_ATTACH_REUSEPORT_CBPF ืืขืช ืืฆืืจืช ืืฉืงืข. ืืื ืืืื ืชืืจืื ืฉื ืื ืืช ืืืฆืืืช ืืืขืื, ืืืืืจืืช /sys/class/net/eth0/queues/tx-/xps_cpus ืฉืื ื. ืขืืืืช ืืืืฆืืขืื ืืืืืืช ืืืืชื 38%, ืืืชืคืืงื ืืืื ื-603 ืืจืืฉืืช/ืฉื ืืืช ื-834 ืืจืืฉืืช/ืฉื ืืืช.
- ืืืคืืืืืืฆืื ืฉื ืืืคืื ืืคืกืืงืืช ืืฉืืืืฉ ืืกืงืจ. ืืคืขืืช ืืฆื ื-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 ืืฉืคืืข ืขื ืืืืฆืืขืื ืืื ืื ืืชืื ืชืขืืืจื ืืืืฆืขืืช ืฉืงืข ืืืืื.
- Fighting Spin Lock. ืืขืืจืช ืขืจืืืช ืืจืฉืช ืืืฆื "noqueue" ืืืืฆืขืืช sysctl "net.core.default_qdisc=noqueue" ื-"tc qdisc replace dev eth0 root mq" ืืืืืื ืืขืืืื ืฉื 2% ืืืืฆืืขืื, ืืืชืคืืงื ืืืื ื-1.12M req/s ื-1.15M ืืจืืฉื/ืื.
- ืืืคืืืืืืฆืืืช ืงืืืช ืืืจืื ืืช, ืืืื ืืฉืืชืช 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").
- ืฉืืจืื ืืืืช ืืื ืืงืก ืืืืจืกืืืช 4.19 ื-5.4, ืืืืฆืขืืช ืืชืืื ื SCHED_FIFO ื-SCHED_RR, ืื ืืคืืืฆืื ืฉื sysctl kernel.sched_min_granularity_ns, kernel.sched_wakeup_granularity_ns, transparent_hugepages=never, skew_tick=t=1 ืืืืฆืืขื ืฉืขืื ืื ืืฉืคืืขื.
- ืืื ืื ืืืชืงื ืฉื ENA, ืืคืขืืช ืืฆืื Offload (ืคืืืื, ืคืืืืจ-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