рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдж 1.2 рджрд╢рд▓рдХреНрд╖ JSON рд╡рд┐рдирдВрддреНрдпрд╛ рд╣рд╛рддрд╛рд│рдгреНрдпрд╛рд╕рд╛рдареА Linux рдСрдкреНрдЯрд┐рдорд╛рдЗрдЭ рдХрд░рдд рдЖрд╣реЗ

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

рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдж 1.2 рджрд╢рд▓рдХреНрд╖ JSON рд╡рд┐рдирдВрддреНрдпрд╛ рд╣рд╛рддрд╛рд│рдгреНрдпрд╛рд╕рд╛рдареА Linux рдСрдкреНрдЯрд┐рдорд╛рдЗрдЭ рдХрд░рдд рдЖрд╣реЗ

рдореВрд▓рднреВрдд рдСрдкреНрдЯрд┐рдорд╛рдпрдЭреЗрд╢рди:

  • рд▓рд┐рдмреНрд░реЗрдХреНрдЯрд░ рдХреЛрдб рдСрдкреНрдЯрд┐рдорд╛рдЗрдЭ рдХрд░рдд рдЖрд╣реЗ. рдЯреЗрдХрдордкреЙрд╡рд░ рдХрд┐рдЯрдордзреАрд▓ R18 рдкрд░реНрдпрд╛рдпрд╛рдЪрд╛ рдЖрдзрд╛рд░ рдореНрд╣рдгреВрди рд╡рд╛рдкрд░ рдХреЗрд▓рд╛ рдЧреЗрд▓рд╛, рдЬреЛ рд╡рд╛рдкрд░рд▓реЗрд▓реНрдпрд╛ CPU рдХреЛрд░рдЪреА рд╕рдВрдЦреНрдпрд╛ рдорд░реНрдпрд╛рджрд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдХреЛрдб рдХрд╛рдвреВрди рд╕реБрдзрд╛рд░рд┐рдд рдХрд░рдгреНрдпрд╛рдд рдЖрд▓рд╛ (рдСрдкреНрдЯрд┐рдорд╛рдпрдЭреЗрд╢рдирдореБрд│реЗ рдХрд╛рдорд╛рд▓рд╛ 25-27% рдиреЗ рдЧрддреА рдорд┐рд│реВ рд╢рдХрддреЗ), GCC рдордзреНрдпреЗ тАЬ-O3тАЭ рдкрд░реНрдпрд╛рдпрд╛рдВрд╕рд╣ рдПрдХрддреНрд░ рдХрд░реВрди (5-10% рдЪреА рд╡рд╛рдв) рдЖрдгрд┐ "-рдорд╛рд░реНрдЪ-рдиреЗрдЯрд┐рд╡реНрд╣" (5-10%), рд░рд┐рдб/рд░рд╛рдЗрдЯ рдХреЙрд▓рдЪреНрдпрд╛ рдЬрд╛рдЧреА recv/рд╕реЗрдВрдб (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тАЭ (Sspecter v1 + SWAPGS рдкрд╛рд╕реВрди рд╕рдВрд░рдХреНрд╖рдг) 1-2% рд╣реЛрддреА, тАЬnospectre_v2тАЭ (рд╕реНрдкреЗрдХреНрдЯрд░ 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 рдмрд╛рдпрдкрд╛рд╕ рдЖрдгрд┐ 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 рдкрд░реНрдпрдВрдд рд╡рд╛рдврд▓реЗ.
  • рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЕрд╢реЗ рд╡рд╛рдкрд░рдгреНрдпрд╛рдЪреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╕реБрдзрд╛рд░рдгреНрдпрд╛рд╕рд╛рдареА рд╡реЗрдЧрд╡реЗрдЧрд│реНрдпрд╛ CPU рдХреЛрд░ рджрд░рдореНрдпрд╛рди рд╣рдБрдбрд▓рд░рдЪреЗ рд╕реНрдерд▓рд╛рдВрддрд░ рдХрдореА рдХреЗрд▓реЗ. рдСрдкреНрдЯрд┐рдорд╛рдпрдЭреЗрд╢рди рд╕реАрдкреАрдпреВ рдХреЛрд░ (CPU рдкрд┐рдирд┐рдВрдЧ) рдЖрдгрд┐ рдкрд┐рдирд┐рдВрдЧ рдХрд░реНрдирд▓ рдиреЗрдЯрд╡рд░реНрдХ рд╣рдБрдбрд▓рд░реНрд╕ (рд░рд┐рд╕реАрд╡реНрд╣ рд╕рд╛рдЗрдб рд╕реНрдХреЗрд▓рд┐рдВрдЧ) рджреНрд╡рд╛рд░реЗ рдмрдВрдзрдирдХрд╛рд░рдХ рд▓рд┐рдмреНрд░реЗрдПрдХреНрдЯрд░ рдкреНрд░рдХреНрд░рд┐рдпреЗрдЪреНрдпрд╛ рджреЛрдиреНрд╣реА рд╕реНрддрд░рд╛рдВрд╡рд░ рдХреЗрд▓реЗ рдЧреЗрд▓реЗ. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, irqbalance рдЕрдХреНрд╖рдо рдХреЗрд▓реЗ рд╣реЛрддреЗ рдЖрдгрд┐ /proc/irq/$IRQ/smp_affinity_list рдордзреНрдпреЗ CPU рд╕рд╛рдареА рд░рд╛рдВрдЧреЗрддреАрд▓ рд╕рдВрдмрдВрдз рд╕реНрдкрд╖реНрдЯрдкрдгреЗ рд╕реЗрдЯ рдХреЗрд▓реЗ рд╣реЛрддреЗ. рд▓рд┐рдмреНрд░реЗрдПрдХреНрдЯрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЖрдгрд┐ рдЗрдирдХрдорд┐рдВрдЧ рдкреЕрдХреЗрдЯреНрд╕рдЪреНрдпрд╛ рдиреЗрдЯрд╡рд░реНрдХ рд░рд╛рдВрдЧреЗрд╡рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╕рдорд╛рди CPU рдХреЛрд░ рд╡рд╛рдкрд░рдгреНрдпрд╛рд╕рд╛рдареА, рд╕реЙрдХреЗрдЯ рддрдпрд╛рд░ рдХрд░рддрд╛рдирд╛ SO_ATTACH_REUSEPORT_CBPF рдзреНрд╡рдЬ рд╕реЗрдЯ рдХрд░реВрди рдПрдХ рд╕рд╛рдиреБрдХреВрд▓ BPF рд╣рдБрдбрд▓рд░ рд╡рд╛рдкрд░рд▓рд╛ рдЬрд╛рддреЛ. CPU рд▓рд╛ рдЖрдЙрдЯрдЧреЛрдЗрдВрдЧ рдкреЕрдХреЗрдЯреНрд╕рдЪреНрдпрд╛ рд░рд╛рдВрдЧрд╛ рдмрд╛рдВрдзрдгреНрдпрд╛рд╕рд╛рдареА, рд╕реЗрдЯрд┐рдВрдЧреНрдЬ /sys/class/net/eth0/queues/tx- рдмрджрд▓рд▓реНрдпрд╛ рдЖрд╣реЗрдд. /xps_cpus. рдПрдХреВрдг рдХрд╛рдордЧрд┐рд░реА рд╡рд╛рдв 38% рд╣реЛрддреА, рдЖрдгрд┐ рдереНрд░реВрдкреБрдЯ 603k req/s рд╡рд░реВрди 834k req/s рдкрд░реНрдпрдВрдд рд╡рд╛рдврд▓реЗ.
  • рд╡реНрдпрддреНрдпрдп рд╣рд╛рддрд╛рд│рдгреА рдЖрдгрд┐ рдорддрджрд╛рдирд╛рдЪрд╛ рд╡рд╛рдкрд░ рдСрдкреНрдЯрд┐рдорд╛рдпрдЭреЗрд╢рди. 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 рдХрд╛рд░реНрдпрдХреНрд╖рдорддреЗрд╡рд░ рдкрд░рд┐рдгрд╛рдо рдХрд░рддреЗ рдпрд╛рдЪреЗ рдХрд╛рд░рдг рдЖрд╣реЗ.
  • рд▓рдврд╛рдИ рд╕реНрдкрд┐рди рд▓реЙрдХ. рдиреЗрдЯрд╡рд░реНрдХ рд╕реНрдЯреЕрдХрд▓рд╛ 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 рдкрд░реНрдпрдВрдд рд╡рд╛рдврд▓реЗ.

рдХрд╛рд░реНрдп рдХреЗрд▓реЗрд▓реНрдпрд╛ рдСрдкреНрдЯрд┐рдорд╛рдпрдЭреЗрд╢рди рд╡реНрдпрддрд┐рд░рд┐рдХреНрдд, рд▓реЗрдЦрд╛рдд рдЕрд╢рд╛ рдкрджреНрдзрддреАрдВрдЪреА рджреЗрдЦреАрд▓ рдЪрд░реНрдЪрд╛ рдХреЗрд▓реА рдЖрд╣реЗ рдЬреНрдпрд╛рдореБрд│реЗ рдЕрдкреЗрдХреНрд╖рд┐рдд рдХрд╛рдордЧрд┐рд░реА рд╡рд╛рдврд▓реА рдирд╛рд╣реА. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдЦрд╛рд▓реАрд▓ рдХреБрдЪрдХрд╛рдореА рдард░рд▓реЗ:

  • рд▓рд┐рдмреНрд░реЗрдПрдХреНрдЯрд░ рд╕реНрд╡рддрдВрддреНрд░рдкрдгреЗ рдЪрд╛рд▓рд╡рдгреЗ рд╣реЗ рдХрдВрдЯреЗрдирд░рдордзреНрдпреЗ рдЪрд╛рд▓рд╡рдгреНрдпрд╛рдкреЗрдХреНрд╖рд╛ рдХрд╛рд░реНрдпрдХреНрд╖рдорддреЗрдд рднрд┐рдиреНрди рдирд╡реНрд╣рддреЗ. writev рд▓рд╛ рдкрд╛рдард╡рдгреНрдпрд╛рдиреЗ рдмрджрд▓рдгреЗ, epoll_wait рдордзреАрд▓ maxevents рд╡рд╛рдврд╡рдгреЗ рдЖрдгрд┐ GCC рдЖрд╡реГрддреНрддреНрдпрд╛ рдЖрдгрд┐ рдзреНрд╡рдЬрд╛рдВрд╕рд╣ рдкреНрд░рдпреЛрдЧ рдХрд░рдгреНрдпрд╛рдЪрд╛ рдХреЛрдгрддрд╛рд╣реА рдкрд░рд┐рдгрд╛рдо рдЭрд╛рд▓рд╛ рдирд╛рд╣реА (рдкреНрд░рднрд╛рд╡ рдлрдХреНрдд тАЬ-O3тАЭ рдЖрдгрд┐ тАЬ-march-nativeтАЭ рдзреНрд╡рдЬрд╛рдВрд╕рд╛рдареА рд▓рдХреНрд╖рд╛рдд рдпреЗрдгреНрдпрд╛рдЬреЛрдЧрд╛ рд╣реЛрддрд╛).
  • SCHED_FIFO рдЖрдгрд┐ SCHED_RR рд╢реЗрдбреНрдпреВрд▓рд░реНрд╕рдЪрд╛ рд╡рд╛рдкрд░ рдХрд░реВрди, рд▓рд┐рдирдХреНрд╕ рдХрд░реНрдирд▓рд▓рд╛ рдЖрд╡реГрддреНрддреА 4.19 рдЖрдгрд┐ 5.4 рд╡рд░ рд╢реНрд░реЗрдгреАрд╕реБрдзрд╛рд░рд┐рдд рдХрд░рдгреЗ, sysctl kernel.sched_min_granularity_ns, kernel.sched_wakeup_granularity_ns, transparent_hugepages=never,tskew=tskew=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 (рдирдХрд╛рд░рд╛рддреНрдордХ рдкреНрд░рднрд╛рд╡)
    • рдиреЗрдЯ.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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╛