HTTP áá±á¬ááºážááá¯ááŸá¯áá»á¬ážááᯠáá¯ááºáá±á¬ááºáááºá¡ááœáẠá¡ááŒáá·áºáá¯á¶ážá áœááºážáá±á¬ááºáááºáááŸáá á±ááẠLinux áááºáááºážáá»ááºááᯠáá»áááºááŸáááŒááºážááœáẠá¡áá±ážá áááºáááºážááœáŸááºáá»ááºááᯠáá¯ááºááŒááºáá¬ážáá«áááºá á¡ááá¯ááŒá¯áá¬ážáá±á¬áááºážáááºážáá»á¬ážááẠAmazon EC2 áááºáááºážáá»ááºááŸá libreactor library (4 vCPU) ááœáẠá¡ááŒá±áá¶á JSON áááá¯áááºáá¬áá áœááºážáá±á¬ááºáááºááᯠáá áºá áá¹ááá·áºáá»áŸáẠAPI áá±á¬ááºážááá¯ááŸá¯ 224 á០kernel 2 á០4.14 áááºážá¡áá áá±á¬ááºážááá¯ááŸá¯ááŸá¯ááºážááŒáá·áº Amazon Linux 1.2 á á á¶áááºáááºáá»á¬ážá¡ááŒá Ạááá¯ážááŒáŸáá·áºááá¯ááºá á±áá²á·áááºá ááá¯ááá¯áá±á¬ááºážááœááºá¡á±á¬ááºááŒá¯áá¯ááºááŒá®ážáá±á¬áẠáá¯ááá (436%) ááá¯ážáá¬áᬠáá±á¬ááºážááá¯ááŸá¯áá»á¬ážááᯠáá¯ááºáá±á¬ááºáá¬ááœáẠááŸá±á¬áá·áºááŸá±ážááŸá¯ááᯠ79% áá»áŸá±á¬á·áá»áá±ážáá²á·áááºá á¡ááá¯ááŒá¯áá¬ážáá±á¬áááºážáááºážáá»á¬ážááẠnginxá Actixá Netty ááŸáá·áº Node.js á¡áá«á¡ááẠá¡ááŒá¬ážáá±á¬ http áá¬áá¬áá»á¬ážááᯠá¡áá¯á¶ážááŒá¯áá±á¬á¡áá«ááœáẠlibreactor ááŸáá·áº á¡áá¯ááºáá¯ááºáá¬ááœáẠáááá»ááŸá¯áááŸááá« (áááºážááá¯á¡ááŒá±áá¶ááá·áºááŒá±ááŸááºážáá»ááºááœáẠááá¯ááá¯áá±á¬ááºážááœááºáá±á¬á áœááºážáá±á¬ááºáááºááŒááá±á¬ááŒá±á¬áá·áº libreactor ááᯠá ááºážáááºááŸá¯áá»á¬ážááœáẠá¡áá¯á¶ážááŒá¯áá²á·áááº)á
á¡ááŒá±áᶠááá¯ááá¯áá±á¬ááºážááœááºá¡á±á¬ááºááŒá¯áá¯ááºááŒááºáž-
- libreactor áá¯ááºááᯠáá±á¬ááºážááœááºá¡á±á¬ááºááŒá¯áá¯ááºááŒááºážá Techempower kit á០R18 ááœá±ážáá»ááºááŸá¯ááᯠá¡áá¯á¶ážááŒá¯ááŒá®áž CPU cores á¡áá±á¡ááœááºááᯠááá·áºáááºááẠáá¯ááºááᯠáááºááŸá¬ážááŒááºážááŒáá·áº ááá¯ááá¯áá±á¬ááºážááœááºá¡á±á¬áẠááŒá¯áá¯ááºáá¬ážááẠ(áá±á¬ááºážááœááºá¡á±á¬ááºáá¯ááºáá±á¬ááºááŒááºážááŒáá·áº 25-27%)á GCC ááœáẠ"-O3" ááœá±ážáá»ááºááŸá¯áá»á¬ážááŒáá·áº á á¯á ááºážááŸá¯ááŒá¯áá¬ážááẠ(5-10% ááá¯ážáá¬áááº) ááŸáá·áº "-march-native" (5-10%)á áá±á«áºááá¯ááŸá¯áá»á¬ážááᯠread/write calls áá»á¬ážááᯠrecv/send (5-10%) ááŸáá·áº pthreads ááá¯á¡áá¯á¶ážááŒá¯áá±á¬á¡áá« overhead (2-3%)á . áá¯ááºááá¯áá±á¬ááºážá¡á±á¬ááºááŒá¯áá¯ááºááŒá®ážáá±á¬áẠá¡áá¯á¶ážá á¯á¶á áœááºážáá±á¬ááºáááºááá¯ážáá¬ááŸá¯ááẠ55% ááŸáááŒá®áž ááŒááºáááºážááŸá¯ááá¬áááẠ224k req/s á០347k req/s ááá¯á· ááá¯ážáá¬áááºá
- ááŸááºážááá¯ááºáá±á¬ááºááŸá¯ á¡á¬ážáááºážáá»ááºáá»á¬ážááᯠáá¬ááœááºááŒááºážá¡á¬áž ááááºáá«á kernel ááᯠloading áá¯ááºáá±á¬á¡áá« "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 áá®ážááá·áºá nested virtualization ááŸáá·áº á¡ááŒá¬áž CPU áá±á¬áºáááºáá»á¬áž)á
- "auditctl -a never,task" ááœáŸááºááŒá¬ážáá»ááºááᯠá¡áá¯á¶ážááŒá¯á á á¬áááºážá á áºááŒááºážááŸáá·áº á áá áºáá±á«áºááá¯ááŸá¯ ááááºááá¯á·ááŒááºáž ááá¹ááá¬ážáá»á¬ážááᯠááááºááŒááºážááŸáá·áº docker container ááᯠá áááºáá±á¬á¡áá« "--security-opt seccomp=unconfined" option ááᯠáááºááŸááºááŒááºážá á¡áá¯á¶ážá á¯á¶ á áœááºážáá±á¬ááºááẠááá¯ážáá¬ááŸá¯ááẠ11% ááŒá áºááŒá®áž ááŒááºáááºážááŸá¯ 446k req/s á០495k req/s ááá¯á· ááá¯ážáá¬áááºá
- áááºá áẠkernel áá±á¬áºáá»á°ážáá»á¬ážááᯠááŒááºááœáá·áºááŒááºážááŒáá·áº iptables/netfilter ááᯠááááºááŒááºáž áááá»áá±á¬áá¬áá¬ááŒá±ááŸááºážáá»ááºááœááºá¡áá¯á¶ážáááŒá¯ááá·áº firewall ááᯠdisable áá¯ááºáááºá áááºáá°ážááᯠnf_hook_slow function ááẠexecute áááºá¡áá»áááºá 18% áá°ááŒá±á¬ááºážá¡áá²ááŒááºááŒááºážááŒáá·áº áááá¯ááá¯ááºááááºáá»á¬ážááŒáá·áº á¡áá»ááºááŒáá²á·áááºá nftables ááẠiptables áá»á¬ážáááºááá¯ááá¯áááá±á¬ááºá áœá¬á¡áá¯ááºáá¯ááºááŒá±á¬ááºážáááááŒá¯áááá±á¬áºáááºáž Amazon Linux ááẠiptables ááá¯áááºáááºá¡áá¯á¶ážááŒá¯áááºá iptables áá»á¬ážááᯠááááºááŒá®ážáá±á¬ááºá á áœááºážáá±á¬ááºááẠ22% ááá¯ážáá¬ááŒá®áž 495k req/s á០603k req/s ááá¯á· ááá¯ážáá¬áááºá
- áááá¯áááºáᬠáááºááŸáºá¡áá¯á¶ážááŒá¯ááŸá¯á á áœááºážáá±á¬ááºáááºááᯠááŒáŸáá·áºáááºááẠááá°áá®áá±á¬ CPU core áá»á¬ážááŒá¬ážááœáẠááá¯ááºááœááºáá°áá»á¬ážááᯠááœáŸá±á·ááŒá±á¬ááºážááŒááºážááᯠáá»áŸá±á¬á·áá»áá«á ááá¯ááá¯áá±á¬ááºážááœááºá¡á±á¬ááºááŒá¯áá¯ááºááŒááºážá¡á¬áž CPU cores (CPU Pinning) ááŸáá·áº binding kernel network handlers (Receive Side Scaling) ááá¯á·ááŸáááá·áº áá±á«ááºážá ááºáá¬ážáá±á¬ libreactor áá¯ááºáááºážá ááºáá»á¬ážá¡ááá·áºááœáẠááŸá áºáá¯á áá¯á¶ážááᯠááá¯ááá¯áá±á¬ááºážááœááºá¡á±á¬ááºáá¯ááºáá±á¬ááºáá²á·áá«áááºá á¥ááá¬á¡á¬ážááŒáá·áºá irqbalance ááᯠááááºáá¬ážááŒá®áž CPU ááŸáá·áº áááºážá á®áá±áá±á¬ áááºá ááºááŸá¯ááᯠ/proc/irq/$IRQ/smp_affinity_list ááœáẠá¡ááá¡áááºážáááºááŸááºáá¬ážáááºá libreactor áá¯ááºáááºážá ááºááŸáá·áº á¡áááºáááºáááºáá»á¬ážá ááœááºáááºáááºážá á®ááŒááºážááᯠáá¯ááºáá±á¬ááºááẠáá°áá®áá±á¬ CPU core ááá¯á¡áá¯á¶ážááŒá¯áááºá¡ááœáẠSO_ATTACH_REUSEPORT_CBPF á¡áá¶ááá¯áááºáá®ážáá±á¬á¡áá« SO_ATTACH_REUSEPORT_CBPF á¡áá¶ááá¯áááºááŸááºááŒááºážááŒáá·áº áá»áááºáááºáá¬ážáá±á¬ á áááºááŒáá¯áẠBPF áááºááá¯ááºáááááá¬ááᯠá¡áá¯á¶ážááŒá¯áá«áááºá á¡ááœááºáááºáááºáá»á¬ážá áááºážá á®ááŒááºážááᯠCPU ááœáẠáá»áááºáááºá áááºáááºáá»á¬áž /sys/class/net/eth0/queues/tx- ááᯠááŒá±á¬ááºážáá²áá¬ážáááºá /xps_cpusá á¡áá¯á¶ážá á¯á¶á áœááºážáá±á¬ááºáááºááá¯ážáá¬ááŸá¯ááẠ38% ááŸáááŒá®áž ááŒááºáááºážááŸá¯ 603k req/s á០834k req/s ááá¯á· ááá¯ážáá¬áááºá
- ááŒá¬ážááŒááºááá¯ááºááœááºááŒááºážááŸáá·áº áá²áá¯á¶á¡áá¯á¶ážááŒá¯ááŒááºážááá¯á·ááᯠááá¯ááá¯áá±á¬ááºážááœááºá¡á±á¬ááºááŒá¯áá¯ááºááŒááºážá ENA áááá¯ááºáá¬ááŸá adaptive-rx áá¯ááºááá¯ááœáá·áºááŒá®áž sysctl net.core.busy_read ááᯠááá¯ááºááœááºá¡áá¯á¶ážááŒá¯ááŒááºážá á áœááºážáá±á¬ááºááẠ28% ááá¯ážáá¬ááẠ(ááŒááºáááºážááŸá¯ 834k req/s á០1.06M req/s ááá¯á· ááá¯ážáá¬ááŒá®áž latency 361ÎŒs á០292ÎŒs ááá¯á· áá»á±á¬á·áááºážááœá¬ážáááº)á
- ááœááºáááºá¡á á¯á¡áá±ážááœáẠáááá¯á¡ááºáá² ááááºááá¯á·ááŒááºážááᯠááŒá áºá á±áá±á¬ á áá áºáááºáá±á¬ááºááŸá¯áá»á¬ážááᯠááááºááŒááºážá dhclient ááá¯ááááºáá¬ážááŒá®áž IP ááááºá á¬ááᯠááá¯ááºááá¯ááºáááºááŸááºááŒááºážááᯠááááºáá¬ážááŒááºážááŒáá·áº á áœááºážáá±á¬ááºááẠ6% ááá¯ážáá¬ááŒá®áž 1.06M req/s á០1.12M req/s ááá¯á· ááá¯ážáá¬áááºá dhclient ááẠá áœááºážáá±á¬ááºáááºá¡áá±á«áºáááºáá±á¬ááºááá·áºá¡ááŒá±á¬ááºážáááºážááŸá¬ raw socket ááá¯á¡áá¯á¶ážááŒá¯á traffic analysis ááœááºááŒá áºáááºá
- ááŸáá·áºáááºáá±á¬á·ááºááá¯ááºááœá²á sysctl ânet.core.default_qdisc=noqueueâ ááŸáááá·áº ááœááºááẠstack á¡á¬áž "noqueue" áá¯ááºááá¯á· ááŒá±á¬ááºážááŒááºážááŸáá·áº "tc qdisc á¡á á¬ážááá¯áž dev eth0 root mq" ááẠá áœááºážáá±á¬ááºááẠ2% ááá¯ážáá¬áᬠáá±ážááá¯á·ááŸá¯ 1.12M req/s á០1.15M ááá¯á· ááá¯ážáá¬ááẠááá¯á¡ááºáá»ááº
- âethtool -K eth0 gro offâ áá°áá±á¬ á¡áááá·áºááŒáá·áº GRO (áá±áá¯áá» áááºáá¶ááŒááºáž Offload) ááᯠááááºááŒááºážááŸáá·áº sysctl ânet.ipv4.tcp_congestion_control=renoâ ááᯠá¡áá¯á¶ážááŒá¯á áá¯áááááºááááºážáá»á¯ááºááŸá¯ á¡ááºáááá¯áá®áááºááᯠreno ááŒáá·áº á¡á á¬ážááá¯ážááŒááºážáá²á·ááá¯á·áá±á¬ áá±á¬ááºáá¯á¶ážá¡áá±ážá á¬áž ááá¯ááá¯áá±á¬ááºážááœááºá¡á±á¬áẠáá¯ááºáá±á¬ááºááŸá¯áá»á¬ážá á¡áá¯á¶ážá á¯á¶ áá¯ááºáá¯ááºá áœááºážá¡á¬áž ááá¯ážááŸá¯ááºážááŸá¬ á áá¬ááá¯ááºááŸá¯ááºážááŒá áºáááºá ááŒááºáááºážá á®ážáááºážááŸá¯ááẠ4M req/s á០1.15M req/s ááá¯á· ááá¯ážáá¬áááºá
ááá¯ááá¯áá±á¬ááºážááœááºá¡á±á¬ááºáá¯ááºáá±á¬ááºáá²á·ááá·áºá¡ááŒááºá áá±á¬ááºážáá«ážááœáẠáá»áŸá±á¬áºááŸááºážáá¬ážáá±á¬á áœááºážáá±á¬ááºáááºááᯠááá¯ážááŒáá·áºáá¬á á±áááºáááŒá áºá á±áá±á¬áááºážáááºážáá»á¬ážááá¯áááºáž ááœá±ážááœá±ážáá¬ážáááºá á¥ááá¬á¡á¬ážááŒáá·áºá á¡á±á¬ááºáá«ááá¯á·ááẠáááá±á¬ááºááŸá¯áááŸááᯠáááºááŒááºáá¬áá«áááºá
- ááœááºááááºáá¬áá áºáá¯á¶ážááœáẠáááºáááºááŒááºážá០áá®ážááŒá¬ážáá¯ááºáá±á¬ááºááŒááºážááŸá¬ á áœááºážáá±á¬ááºáááºááŸá¬ ááœá²ááŒá¬ážááŒááºážáááŸááá«á writev ááᯠsend ááŒáá·áº á¡á á¬ážááá¯ážááŒááºážá epoll_wait ááœáẠá¡ááŒáá·áºáá¯á¶áž ááááºáá»á¬ážááᯠááá¯ážááŒáŸáá·áºááŒááºážááŸáá·áº GCC áá¬ážááŸááºážáá»á¬ážááŸáá·áº á¡áá¶áá»á¬ážááᯠá ááºážáááºááŒááºážááœáẠá¡áá»áá¯ážáááºáá±á¬ááºááŸá¯ áááŸááá« (á¡áá»áá¯ážáááºáá±á¬ááºááŸá¯ááẠâ-O3â ááŸáá·áº â-march-nativeâ á¡áá¶áá»á¬ážá¡ááœááºáᬠáááá¬áá«áááºá
- SCHED_FIFO ááŸáá·áº SCHED_RR á¡áá»áááºááá¬ážáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯á Linux kernel ááᯠáá¬ážááŸááºáž 4.19 ááŸáá·áº 5.4 ááá¯á· á¡ááá·áºááŒáŸáá·áºááŒááºážá sysctl kernel.sched_min_granularity_nsá kernel.sched_wakeup_granularity_nsá transparent_hugepages=clocktever ááŸáá·áº á áœááºážáá±á¬ááºáááºááᯠáááºáá±á¬ááºááŸá¯áááŸááá«á
- ENA áááá¯ááºáá¬ááœááºá Offload áá¯ááºáá»á¬áž (ááœá²ááŒááºážááœá²ááŒááºážá ááŒáá·áºááœá²á á¯á ááºážááŒááºážá 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
source: opennet.ru