рдкреНрд░рддрд┐ рд╕реЗрдХреЗрдиреНрдб 1.2 рдорд┐рд▓рд┐рдпрди JSON рдЕрдиреБрд░реЛрдзрд╣рд░реВ рд╣реНрдпрд╛рдиреНрдбрд▓ рдЧрд░реНрди рд▓рд┐рдирдХреНрд╕рд▓рд╛рдИ рдЕрдиреБрдХреВрд▓рди рдЧрд░реНрджреИ

HTTP рдЕрдиреБрд░реЛрдзрд╣рд░реВ рдкреНрд░рд╢реЛрдзрди рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ рдЕрдзрд┐рдХрддрдо рдкреНрд░рджрд░реНрд╢рди рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди рд▓рд┐рдирдХреНрд╕ рд╡рд╛рддрд╛рд╡рд░рдг рдЯреНрдпреБрдирд┐рдЩрдорд╛ рд╡рд┐рд╕реНрддреГрдд рдЧрд╛рдЗрдб рдкреНрд░рдХрд╛рд╢рд┐рдд рдЧрд░рд┐рдПрдХреЛ рдЫред рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╡рд┐рдзрд┐рд╣рд░реВрд▓реЗ рдЕрдореЗрдЬрди EC2 рд╡рд╛рддрд╛рд╡рд░рдг (4 vCPU) рдорд╛ libreactor рдкреБрд╕реНрддрдХрд╛рд▓рдпрдорд╛ рдЖрдзрд╛рд░рд┐рдд JSON рдкреНрд░реЛрд╕реЗрд╕рд░рдХреЛ рдХрд╛рд░реНрдпрд╕рдореНрдкрд╛рджрдирд▓рд╛рдИ 224 рд╣рдЬрд╛рд░ API рдЕрдиреБрд░реЛрдзрд╣рд░реВ рдкреНрд░рддрд┐ рд╕реЗрдХреЗрдиреНрдбрдорд╛ рд╡реГрджреНрдзрд┐ рдЧрд░реНрди рд╕рдореНрднрд╡ рдмрдирд╛рдпреЛ Amazon Linux 2 рдХреЛ рдорд╛рдирдХ рд╕реЗрдЯрд┐рдЩрд╣рд░реВрд╕рдБрдЧ рдХрд░реНрдиреЗрд▓ 4.14 рджреЗрдЦрд┐ 1.2 рдорд┐рд▓рд┐рдпрди рдЕрдиреБрд░реЛрдзрд╣рд░реВ рдкреНрд░рддрд┐ рд╕реЗрдХреЗрдиреНрдбред рдЕрдкреНрдЯрд┐рдорд╛рдЗрдЬреЗрд╕рди рдкрдЫрд┐ рджреЛрд╕реНрд░реЛ (436% рдХреЛ рдмреГрджреНрдзрд┐), рд░ 79% рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╢реЛрдзрди рдЕрдиреБрд░реЛрдзрд╣рд░реВрдорд╛ рдврд┐рд▓рд╛рдЗрдорд╛ рдкрдирд┐ рдХрдореА рднрдпреЛред рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╡рд┐рдзрд┐рд╣рд░реВ nginx, Actix, Netty рд░ Node.js рд╕рд╣рд┐рдд рдЕрдиреНрдп http рд╕рд░реНрднрд░рд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрд╛ libreactor рд░ рдХрд╛рдордХрд╛ рд▓рд╛рдЧрд┐ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЫреИрдирдиреН (libreactor рдкрд░реАрдХреНрд╖рдгрд╣рд░реВрдорд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдПрдХреЛ рдерд┐рдпреЛ рдХрд┐рдирднрдиреЗ рдпрд╕рдорд╛ рдЖрдзрд╛рд░рд┐рдд рд╕рдорд╛рдзрд╛рдирд▓реЗ рд░рд╛рдореНрд░реЛ рдкреНрд░рджрд░реНрд╢рди рджреЗрдЦрд╛рдПрдХреЛ рдерд┐рдпреЛ)ред

рдкреНрд░рддрд┐ рд╕реЗрдХреЗрдиреНрдб 1.2 рдорд┐рд▓рд┐рдпрди JSON рдЕрдиреБрд░реЛрдзрд╣рд░реВ рд╣реНрдпрд╛рдиреНрдбрд▓ рдЧрд░реНрди рд▓рд┐рдирдХреНрд╕рд▓рд╛рдИ рдЕрдиреБрдХреВрд▓рди рдЧрд░реНрджреИ

рдЖрдзрд╛рд░рднреВрдд рдЕрдиреБрдХреВрд▓рдирд╣рд░реВ:

  • рд▓рд┐рдмреНрд░реЗрдХреНрдЯрд░ рдХреЛрдб рдЕрдкреНрдЯрд┐рдорд╛рдЗрдЬ рдЧрд░реНрджреИред Techempower рдХрд┐рдЯрдмрд╛рдЯ R18 рд╡рд┐рдХрд▓реНрдкрд▓рд╛рдИ рдЖрдзрд╛рд░рдХреЛ рд░реВрдкрдорд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдПрдХреЛ рдерд┐рдпреЛ, рдЬреБрди рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдПрдХреЛ CPU рдХреЛрд░рд╣рд░реВрдХреЛ рд╕рдВрдЦреНрдпрд╛ рд╕реАрдорд┐рдд рдЧрд░реНрди рдХреЛрдб рд╣рдЯрд╛рдПрд░ рд╕реБрдзрд╛рд░ рдЧрд░рд┐рдПрдХреЛ рдерд┐рдпреЛ (рдЕрдкреНрдЯрд┐рдорд╛рдЗрдЬреЗрд╕рдирд▓реЗ 25-27% рд▓реЗ рдХрд╛рдордХреЛ рдЧрддрд┐ рдмрдврд╛рдЙрди рдЕрдиреБрдорддрд┐ рджрд┐рдпреЛ), "-O3" рд╡рд┐рдХрд▓реНрдкрд╣рд░реВрд╕рдБрдЧ GCC рдорд╛ рднреЗрд▓рд╛ рднрдпреЛред (рел-резреж% рдХреЛ рдмреГрджреНрдзрд┐) рд░ "-рдорд╛рд░реНрдЪ-рдиреЗрдЯрд┐рдн" (рел-резреж%), рд░рд┐рдб/рд░рд╛рдЗрдЯ рдХрд▓рд▓рд╛рдИ recv/send (5-10%) рдХреЛ рд╕рд╛рде рдмрджрд▓реНрджреИ рд░ pthreads рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрд╛ рдУрднрд░рд╣реЗрдб рдШрдЯрд╛рдЙрдБрджреИ (5-10%) ред рдХреЛрдб рдЕрдкреНрдЯрд┐рдорд╛рдЗрдЬреЗрд╕рди рдкрдЫрд┐ рд╕рдордЧреНрд░ рдкреНрд░рджрд░реНрд╢рди рд╡реГрджреНрдзрд┐ 5% рдерд┐рдпреЛ, рд░ рдереНрд░реБрдкреБрдЯ 10k req/s рдмрд╛рдЯ 2k req/s рдорд╛ рдмрдвреНрдпреЛред
  • рд╕рдЯреНрдЯрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрдордЬреЛрд░реАрд╣рд░реВ рд╡рд┐рд░реБрджреНрдз рд╕реБрд░рдХреНрд╖рд╛ рдЕрд╕рдХреНрд╖рдо рдЧрд░реНрдиреБрд╣реЛрд╕реНред рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ "nospectre_v1 nospectre_v2 pti=off mds=off tsx_async_abort=off" рдХрд░реНрдиреЗрд▓ рд▓реЛрдб рдЧрд░реНрджрд╛ 28% рд▓реЗ рдХрд╛рд░реНрдпрд╕рдореНрдкрд╛рджрди рдмрдврд╛рдЙрди рдЕрдиреБрдорддрд┐ рджрд┐рдпреЛ, рд░ рдереНрд░реБрдкреБрдЯ 347k req/s рдмрд╛рдЯ 446k req/s рдорд╛ рдмрдвреНрдпреЛред рдЕрд▓рдЧ рд░реВрдкрдорд╛, рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░ "nospectre_v1" (рд╕реНрдкреЗрдХреНрдЯрд░ v1 + SWAPGS рдмрд╛рдЯ рд╕реБрд░рдХреНрд╖рд╛) рдмрд╛рдЯ рд╡реГрджреНрдзрд┐ 1-2% рдерд┐рдпреЛ, "nospectre_v2" (рд╕реНрдкреЗрдХреНрдЯрд░ v2 рдмрд╛рдЯ рд╕реБрд░рдХреНрд╖рд╛) - 15-20%, "pti=off" (Spectre v3/Meltdown) - 6%, "mds=off tsx_async_abort=off" (MDS/Zombieload рд░ TSX рдПрд╕рд┐рдиреНрдХреНрд░реЛрдирд╕ рдПрдмреЛрд░реНрдЯ) - 6%ред L1TF/Foreshadow (l1tf=flush), iTLB рдорд▓реНрдЯрд┐рд╣рд┐рдЯ, рд╕рдЯреНрдЯрд╛ рд╕реНрдЯреЛрд░ рдмрд╛рдЗрдкрд╛рд╕ рд░ SRBDS рдЖрдХреНрд░рдордгрд╣рд░реВ рд╡рд┐рд░реБрджреНрдз рд╕реБрд░рдХреНрд╖рд╛рдХрд╛ рд▓рд╛рдЧрд┐ рд╕реЗрдЯрд┐рдЩрд╣рд░реВ рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рдд рдЫреЛрдбрд┐рдПрдХрд╛ рдерд┐рдП, рдЬрд╕рд▓реЗ рдкреНрд░рджрд░реНрд╢рдирд▓рд╛рдИ рдЕрд╕рд░ рдЧрд░реНрджреИрди рдХрд┐рдирднрдиреЗ рддрд┐рдиреАрд╣рд░реВ рдкрд░реАрдХреНрд╖рдг рдЧрд░рд┐рдПрдХреЛ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рдирд╕рдБрдЧ рдкреНрд░рддрд┐рдЪреНрдЫреЗрджрди рдЧрд░реНрджреИрдирдиреН (рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, KVM рдХреЛ рд▓рд╛рдЧрд┐ рд╡рд┐рд╢рд┐рд╖реНрдЯ, рдиреЗрд╕реНрдЯреЗрдбред рднрд░реНрдЪреБрдЕрд▓рд╛рдЗрдЬреЗрд╢рди рд░ рдЕрдиреНрдп CPU рдореЛрдбреЗрд▓рд╣рд░реВ)ред
  • "auditctl -a never,task" рдЖрджреЗрд╢ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдЕрдбрд┐рдЯрд┐рдЩ рд░ рдкреНрд░рдгрд╛рд▓реА рдХрд▓ рдЕрд╡рд░реБрджреНрдз рдЧрд░реНрдиреЗ рд╕рдВрдпрдиреНрддреНрд░рд╣рд░реВ рдЕрд╕рдХреНрд╖рдо рдЧрд░реНрджреИ рд░ рдбрдХрд░ рдХрдиреНрдЯреЗрдирд░ рд╕реБрд░реБ рдЧрд░реНрджрд╛ "--security-opt seccomp=unconfined" рд╡рд┐рдХрд▓реНрдк рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░реНрджреИред рд╕рдордЧреНрд░ рдкреНрд░рджрд░реНрд╢рди рд╡реГрджреНрдзрд┐ 11% рдерд┐рдпреЛ, рд░ рдереНрд░реБрдкреБрдЯ 446k рдЕрдиреБрд░реЛрдз/s рдмрд╛рдЯ 495k рдЕрдиреБрд░реЛрдз/рд╕реЗрдХреЗрдиреНрдбрдорд╛ рдмрдвреНрдпреЛред
  • рд╕рдореНрдмрджреНрдз рдХрд░реНрдиреЗрд▓ рдореЛрдбреНрдпреБрд▓рд╣рд░реВ рдЕрдирд▓реЛрдб рдЧрд░реЗрд░ iptables/netfilter рдЕрд╕рдХреНрд╖рдо рдЧрд░реНрджреИред рдлрд╛рдпрд░рд╡рд╛рд▓ рдЕрд╕рдХреНрд╖рдо рдЧрд░реНрдиреЗ рд╡рд┐рдЪрд╛рд░, рдЬреБрди рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рд░реНрднрд░ рд╕рдорд╛рдзрд╛рдирдорд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдПрдХреЛ рдерд┐рдПрди, рдирддрд┐рдЬрд╛рд╣рд░реВ рдкреНрд░реЛрдлрд╛рдЗрд▓рд┐рдЩрджреНрд╡рд╛рд░рд╛ рдкреНрд░реЗрд░рд┐рдд рдЧрд░рд┐рдПрдХреЛ рдерд┐рдпреЛ, рдЬрд╕рдХреЛ рдЖрдзрд╛рд░рдорд╛ nf_hook_slow рдкреНрд░рдХрд╛рд░реНрдпрд▓реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░реНрди 18% рд╕рдордп рд▓рд┐рдпреЛред рдпреЛ рдиреЛрдЯ рдЧрд░рд┐рдПрдХреЛ рдЫ рдХрд┐ nftables рд▓реЗ iptables рднрдиреНрджрд╛ рдмрдвреА рдХреБрд╢рд▓рддрд╛рдкреВрд░реНрд╡рдХ рдХрд╛рдо рдЧрд░реНрджрдЫ, рддрд░ Amazon Linux рд▓реЗ iptables рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рдЬрд╛рд░реА рд░рд╛рдЦреНрдЫред iptables рдЕрд╕рдХреНрд╖рдо рдЧрд░реЗрдкрдЫрд┐, рдкреНрд░рджрд░реНрд╢рди рд╡реГрджреНрдзрд┐ 22% рдерд┐рдпреЛ, рд░ рдереНрд░реБрдкреБрдЯ 495k req/s рдмрд╛рдЯ 603k req/s рдорд╛ рдмрдвреНрдпреЛред
  • рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреНрдпрд╛рд╕ рдкреНрд░рдпреЛрдЧрдХреЛ рджрдХреНрд╖рддрд╛ рд╕реБрдзрд╛рд░ рдЧрд░реНрди рд╡рд┐рднрд┐рдиреНрди CPU рдХреЛрд░рд╣рд░реВ рдмреАрдЪ рд╣реНрдпрд╛рдиреНрдбрд▓рд░рд╣рд░реВрдХреЛ рдХрдо рдорд╛рдЗрдЧреНрд░реЗрд╕рдиред рдЕрдкреНрдЯрд┐рдорд╛рдЗрдЬреЗрд╕рдирд▓рд╛рдИ рд╕реАрдкреАрдпреВ рдХреЛрд░ (рд╕реАрдкреАрдпреВ рдкрд┐рдирд┐рдЩ) рд░ рдкрд┐рдирд┐рдЩ рдХрд░реНрдиреЗрд▓ рдиреЗрдЯрд╡рд░реНрдХ рд╣реНрдпрд╛рдиреНрдбрд▓рд░рд╣рд░реВ (рд╕рд╛рдЗрдб рд╕реНрдХреЗрд▓рд┐рдВрдЧ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреБрд╣реЛрд╕реН) рдорд╛рд░реНрдлрдд рдмрд╛рдЗрдиреНрдбрд┐рдЩ рд▓рд┐рдмреНрд░реЗрдХреНрдЯрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛рд╣рд░реВрдХреЛ рд╕реНрддрд░рдорд╛ рдЧрд░рд┐рдПрдХреЛ рдерд┐рдпреЛред рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, irqbalance рдЕрд╕рдХреНрд╖рдо рдкрд╛рд░рд┐рдПрдХреЛ рдерд┐рдпреЛ рд░ CPU рд▓рд╛рдИ рд▓рд╛рдордмрджреНрдзрддрд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдкрдорд╛ /proc/irq/$IRQ/smp_affinity_list рдорд╛ рд╕реЗрдЯ рдЧрд░рд┐рдПрдХреЛ рдерд┐рдпреЛред libreactor рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд░ рдЖрдЧрдорди рдкреНрдпрд╛рдХреЗрдЯрд╣рд░реВрдХреЛ рдиреЗрдЯрд╡рд░реНрдХ рд▓рд╛рдо рдкреНрд░рд╢реЛрдзрди рдЧрд░реНрди рдЙрд╣реА CPU рдХреЛрд░ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди, рд╕рдХреЗрдЯ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрджрд╛ 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 рдорд╛ рдмрдвреНрдпреЛ, рд░ рд╡рд┐рд▓рдореНрдмрддрд╛ 361╬╝s рдмрд╛рдЯ 292╬╝s рдорд╛ рдШрдЯреНрдпреЛ)ред
  • рдиреЗрдЯрд╡рд░реНрдХ рд╕реНрдЯреНрдпрд╛рдХрдорд╛ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдмреНрд▓рдХ рдЧрд░реНрдиреЗ рдкреНрд░рдгрд╛рд▓реА рд╕реЗрд╡рд╛рд╣рд░реВ рдЕрд╕рдХреНрд╖рдо рдЧрд░реНрджреИред dhclient рдЕрд╕рдХреНрд╖рдо рдкрд╛рд░реНрдиреЗ рд░ IP рдареЗрдЧрд╛рдирд╛ рдореНрдпрд╛рдиреБрдЕрд▓ рд░реВрдкрдорд╛ рд╕реЗрдЯ рдЧрд░реНрджрд╛ 6% рдХрд╛рд░реНрдпрд╕рдореНрдкрд╛рджрди рд╡реГрджреНрдзрд┐ рднрдпреЛ рд░ рдереНрд░реБрдкреБрдЯ 1.06M req/s рдмрд╛рдЯ 1.12M req/s рдорд╛ рдмрдвреНрдпреЛред dhclient рд▓реЗ рдХрд╛рд░реНрдпрд╕рдореНрдкрд╛рджрдирд▓рд╛рдИ рдЕрд╕рд░ рдЧрд░реНрдиреЗ рдХрд╛рд░рдг рдХрдЪреНрдЪрд╛ рд╕рдХреЗрдЯ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдЯреНрд░рд╛рдлрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдгрдорд╛ рдЫред
  • рд╕реНрдкрд┐рди рд▓рдХ рд▓рдбреНрджреИред sysctl "net.core.default_qdisc=noqueue" рд░ "tc qdisc рдмрджрд▓реНрдиреБрд╣реЛрд╕реН dev eth0 root mq" рдорд╛рд░реНрдлрдд рдиреЗрдЯрд╡рд░реНрдХ рд╕реНрдЯреНрдпрд╛рдХрд▓рд╛рдИ "noqueue" рдореЛрдбрдорд╛ рд╕реНрд╡рд┐рдЪ рдЧрд░реНрджрд╛ 2% рдХрд╛рд░реНрдпрд╕рдореНрдкрд╛рджрди рд╡реГрджреНрдзрд┐ рднрдпреЛ, рд░ рдереНрд░реБрдкреБрдЯ 1.12M req/s рдмрд╛рдЯ 1.15M рдорд╛ рдмрдвреНрдпреЛред рдЕрдиреБрд░реЛрдз/рд╕реЗред
  • "ethtool -K eth0 gro off" рдЖрджреЗрд╢рдХреЛ рд╕рд╛рде GRO (рдЬреЗрдиреЗрд░рд┐рдХ рд░рд┐рд╕рд┐рдн рдЕрдлрд▓реЛрдб) рдЕрд╕рдХреНрд╖рдо рдЧрд░реНрдиреЗ рд░ sysctl "net.ipv4.tcp_congestion_control=reno" рдХреЛ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рд░реЗрдиреЛрдХреЛ рд╕рд╛рде рдШрди рднреАрдб рдирд┐рдпрдиреНрддреНрд░рдг рдПрд▓реНрдЧреЛрд░рд┐рджрдорд▓рд╛рдИ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдЧрд░реНрдиреЗ рдЬрд╕реНрддрд╛ рдЕрдиреНрддрд┐рдо рд╕рд╛рдирд╛ рдЕрдкреНрдЯрд┐рдорд╛рдЗрдЬреЗрд╕рдирд╣рд░реВред рдХреБрд▓ рдЙрддреНрдкрд╛рджрдХрддрд╛ рд╡реГрджреНрдзрд┐ 4% рдерд┐рдпреЛред рдереНрд░реБрдкреБрдЯ 1.15M req/s рдмрд╛рдЯ 1.2M req/s рдорд╛ рдмрдвреНрдпреЛред

рдХрд╛рдо рдЧрд░реНрдиреЗ рдЕрдкреНрдЯрд┐рдорд╛рдЗрдЬреЗрд╕рдирдХреЛ рдЕрддрд┐рд░рд┐рдХреНрдд, рд▓реЗрдЦрд▓реЗ рдЕрдкреЗрдХреНрд╖рд┐рдд рдХрд╛рд░реНрдпрд╕рдореНрдкрд╛рджрди рд╡реГрджреНрдзрд┐рдХреЛ рдиреЗрддреГрддреНрд╡ рдирдЧрд░реНрдиреЗ рд╡рд┐рдзрд┐рд╣рд░реВ рдкрдирд┐ рдЫрд▓рдлрд▓ рдЧрд░реНрджрдЫред рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, рдирд┐рдореНрди рдкреНрд░рднрд╛рд╡рдХрд╛рд░реА рд╣реБрди рд╕рдХреЗрди:

  • рд▓рд┐рдмреНрд░реЗрдПрдХреНрдЯрд░рд▓рд╛рдИ рдЫреБрдЯреНрдЯреИ рдЪрд▓рд╛рдЙрдиреБ рдХрдиреНрдЯреЗрдирд░рдорд╛ рдЪрд▓рд╛рдЙрдиреБ рднрдиреНрджрд╛ рдкреНрд░рджрд░реНрд╢рдирдорд╛ рдлрд░рдХ рдерд┐рдПрдиред Writv рд▓рд╛рдИ рдкрдард╛рдПрд░ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдЧрд░реНрдиреЗ, epoll_wait рдорд╛ maxevents рдмрдврд╛рдЙрдиреЗ, рд░ GCC рд╕рдВрд╕реНрдХрд░рдгрд╣рд░реВ рд░ рдЭрдгреНрдбрд╛рд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрд╛ рдХреБрдиреИ рдкреНрд░рднрд╛рд╡ рдкрд░реЗрди (рдкреНрд░рднрд╛рд╡ "-O3" рд░ "-march-native" рдЭрдгреНрдбрд╛рд╣рд░реВрдорд╛ рдорд╛рддреНрд░ рджреЗрдЦреНрди рд╕рдХрд┐рдиреЗ рдерд┐рдпреЛ)ред
  • рд▓рд┐рдирдХреНрд╕ рдХрд░реНрдиреЗрд▓рд▓рд╛рдИ рд╕рдВрд╕реНрдХрд░рдг 4.19 рд░ 5.4 рдорд╛ рд╕реНрддрд░рд╡реГрджреНрдзрд┐ рдЧрд░реНрджреИ, SCHED_FIFO рд░ SCHED_RR рд╢реЗрдбреНрдпреБрд▓рд░рд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░, sysctl kernel.sched_min_granularity_ns, kernel.sched_wakeup_granularity_ns, рдкрд╛рд░рджрд░реНрд╢реА_hugepages=never,tsk=1 рд▓рд╛рдИ рдЕрд╕рд░ рдЧрд░реНрджреИрдиред
  • 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 = рез
    • 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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдердкреНрди