Оптимизација Linux да обрађује 1.2 милиона JSON захтева у секунди

Објављен је детаљан водич за подешавање окружења. Linux для достижения максимальной производительности обработки HTTP-запросов. Предложенные методы позволили поднять производительность обработчика JSON на основе библиотеки libreactor в окружении Amazon EC2 (4 vCPU) c 224 тысяч запросов API в секунду при штатных настройках Amazon Linux 2 с ядром 4.14 до 1.2 млн запросов в секунду после проведения оптимизации (прирост 436%), а также привели к сокращению задержек при обработке запросов на 79%. Предложенные методы не специфичны для libreactor и работают при использовании других http-серверов, включая nginx, Actix, Netty и Node.js (libreactor использовался в тестах, так как решение на его основе показало лучшую производительность).

Оптимизација Linux да обрађује 1.2 милиона JSON захтева у секунди

Основне оптимизације:

  • Оптимизација кода либреактора. Као основа је коришћена опција Р18 из Тецхемповер комплета, која је побољшана уклањањем кода да би се ограничио број коришћених ЦПУ језгара (оптимизација је омогућила убрзање рада за 25-27%), склапање у ГЦЦ са опцијама „-О3“ (повећање од 5-10%) и "-марцх-нативе" (5-10%), замењујући позиве за читање/писање са рецв/сенд (5-10%) и смањење трошкова при коришћењу птхреад-а (2-3%) . Укупно повећање перформанси након оптимизације кода било је 55%, а проток је повећан са 224к рек/с на 347к рек/с.
  • Онемогућавање заштите од рањивости изазваних спекулативним извршавањем инструкција. Коришћење параметара за покретање језгра „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, која нису утицала на перформансе, остала су непромењена, јер се нису пресецала са тестираном конфигурацијом (на пример, специфична су за квм, угнежђена виртуелизација и други модели процесора).
  • Онемогућавање механизама ревизије и блокирања системских позива помоћу команде „аудитцтл -а невер,таск“ и навођење опције „--сецурити-опт сеццомп=унцонфинед“ приликом покретања доцкер контејнера. Укупно повећање перформанси било је 11%, а проток је повећан са 446 захтева/с на 495 захтева/с.
  • Отключение iptables/netfilter через выгрузку связанных с ними модулей ядра. К идее отключить межсетевой экран, который не использовался в специфичном серверном решении, подтолкнули результаты профилирования, судя по которым на выполнение функции nf_hook_slow уходило 18% времени. Отмечается, что nftables работает более эффективно, чем iptables, но в Amazon Linux продолжает использоваться iptables. После отключения iptables прирост производительности составил 22%, а пропускная способность возросла с 495k req/s до 603k req/s.
  • Смањена миграција руковалаца између различитих ЦПУ језгара ради побољшања ефикасности коришћења кеш меморије процесора. Оптимизација је обављена како на нивоу везивања процеса либреактора за језгра ЦПУ-а (ЦПУ Пиннинг) тако и путем пиновања кернел мрежних руковаоца (Рецеиве Сиде Сцалинг). На пример, иркбаланце је онемогућен и афинитет реда према ЦПУ-у је експлицитно постављен у /проц/ирк/$ИРК/смп_аффинити_лист. Да би се користило исто ЦПУ језгро за обраду процеса либреактора и мрежног реда долазних пакета, користи се прилагођени БПФ руковалац, повезан постављањем ознаке СО_АТТАЦХ_РЕУСЕПОРТ_ЦБПФ приликом креирања утичнице. Да би се редови одлазних пакета повезали са ЦПУ-ом, подешавања /сис/цласс/нет/етх0/куеуес/тк- су промењена /кпс_цпус. Укупно повећање перформанси било је 38%, а проток је повећан са 603 захтева/с на 834 захтева/с.
  • Оптимизација руковања прекидима и коришћење поллинга. Омогућавање адаптиве-рк режима у ЕНА драјверу и манипулисање сисцтл нет.цоре.буси_реад повећали су перформансе за 28% (пропусност је повећана са 834к рек/с на 1.06М рек/с, а латенција је смањена са 361μс на 292μс).
  • Онемогућавање системских сервиса који узрокују непотребне блокаде мрежног стека. Онемогућавање dhclient-а и инсталирање ИП адресе Ручно извршавање овог задатка резултирало је повећањем перформанси од 6%, са пропусним опсегом који се повећао са 1.06 милиона захтева/с на 1.12 милиона захтева/с. Разлог утицаја dhclient-а на перформансе је анализа саобраћаја коришћењем сирове мрежне сокете (sirow socket).
  • Фигхтинг Спин Лоцк. Пребацивање мрежног стека у режим „нокуеуе“ преко сисцтл „нет.цоре.дефаулт_кдисц=нокуеуе“ и „тц кдисц реплаце дев етх0 роот мк“ довело је до повећања перформанси од 2%, а пропусност је повећана са 1.12М рек/с на 1.15М рек/с.
  • Завршне мање оптимизације, као што је онемогућавање ГРО-а (генеричко ослобађање пријема) командом „етхтоол -К етх0 гро офф“ и замена алгоритма кубичне контроле загушења са рено користећи сисцтл „нет.ипв4.тцп_цонгестион_цонтрол=рено“. Укупно повећање продуктивности било је 4%. Пропусност је повећана са 1.15 милиона захтева/с на 1.2 милиона захтева/с.

Поред оптимизација које су функционисале, у чланку се говори и о методама које нису довеле до очекиваног повећања перформанси. На пример, следеће се показало неефикасним:

  • Покретање либреацтор-а засебно се није разликовало у перформансама од покретања у контејнеру. Замена вритев-а са слањем, повећање максималних догађаја у еполл_ваит и експериментисање са ГЦЦ верзијама и заставицама није имало ефекта (ефекат је био приметан само за заставице „-О3“ и „-марцх-нативе“).
  • Не повлияло на производительность обновление ядра Linux до версий 4.19 и 5.4, использование планировщиков SCHED_FIFO и SCHED_RR, манипуляции с sysctl kernel.sched_min_granularity_ns, kernel.sched_wakeup_granularity_ns, transparent_hugepages=never, skew_tick=1 и clocksource=tsc.
  • У ЕНА драјверу, омогућавање режима Оффлоад (сегментација, распршивање, рк/тк контролна сума), прављење са „-О3“ заставицом и коришћење параметара ена.рк_куеуе_сизе и ена.форце_ларге_ллк_хеадер није имало ефекта.
  • Промене у мрежном стеку нису побољшале перформансе:
    • Онемогући ИПв6: ипв6.дисабле=1
    • Онемогући ВЛАН: модпробе -рв 8021к
    • Онемогућите проверу извора пакета
      • нет.ипв4.цонф.алл.рп_филтер=0
      • нет.ипв4.цонф.етх0.рп_филтер=0
      • нет.ипв4.цонф.алл.аццепт_лоцал=1 (негативан ефекат)
    • нет.ипв4.тцп_сацк = 0
    • нет.ипв4.тцп_дсацк=0
    • нет.ипв4.тцп_мем/тцп_вмем/тцп_рмем
    • нет.цоре.нетдев_будгет
    • нет.цоре.дев_веигхт
    • нет.цоре.нетдев_мак_бацклог
    • нет.ипв4.тцп_слов_старт_афтер_идле=0
    • нет.ипв4.тцп_модерате_рцвбуф=0
    • нет.ипв4.тцп_тиместампс=0
    • нет.ипв4.тцп_лов_латенци = 1
    • СО_ПРИОРИТИ
    • ТЦП_НОДЕЛАИ

    Извор: опеннет.ру

Купите поуздан хостинг за сајтове са ДДоС заштитом, ВПС ВДС сервере 🔥 Купите поуздан веб хостинг са DDoS заштитом, VPS VDS сервере | ProHoster