Оптимизација Линука за руковање 1.2 милиона ЈСОН захтева у секунди

Објављен је детаљан водич о подешавању Линук окружења за постизање максималних перформанси за обраду ХТТП захтева. Предложене методе су омогућиле повећање перформанси ЈСОН процесора заснованог на библиотеци либреацтор у окружењу Амазон ЕЦ2 (4 вЦПУ) са 224 хиљаде АПИ захтева у секунди уз стандардна подешавања Амазон Линук 2 са кернелом од 4.14 до 1.2 милиона захтева по друго након оптимизације (повећање од 436%), а такође је довело до смањења кашњења у обради захтева за 79%. Предложене методе нису специфичне за либреацтор и раде када се користе други хттп сервери, укључујући нгинк, Ацтик, Нетти и Ноде.јс (либреацтор је коришћен у тестовима јер је решење засновано на њему показало боље перформансе).

Оптимизација Линука за руковање 1.2 милиона ЈСОН захтева у секунди

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

  • Оптимизација кода либреактора. Као основа је коришћена опција Р18 из Тецхемповер комплета, која је побољшана уклањањем кода да би се ограничио број коришћених ЦПУ језгара (оптимизација је омогућила убрзање рада за 25-27%), склапање у ГЦЦ са опцијама „-О3“ (повећање од 5-10%) и "-марцх-нативе" (5-10%), замењујући позиве за читање/писање са рецв/сенд (5-10%) и смањење трошкова при коришћењу птхреад-а (2-3%) . Укупно повећање перформанси након оптимизације кода било је 55%, а проток је повећан са 224к рек/с на 347к рек/с.
  • Онемогућите заштиту од рањивости спекулативног извршења. Коришћење параметара „носпецтре_в1 носпецтре_в2 пти=офф мдс=офф тск_асинц_аборт=офф“ приликом учитавања кернела омогућило је повећање перформанси за 28%, а проток је повећан са 347к рек/с на 446к рек/с. Одвојено, повећање од параметра „носпецтре_в1“ (заштита од Спецтре в1 + СВАПГС) је било 1-2%, „носпецтре_в2“ (заштита од Спецтре в2) - 15-20%, „пти=офф“ (Спецтре в3/Мелтдовн) - 6 %, "мдс=офф тск_асинц_аборт=офф" (МДС/Зомбиелоад и ТСКС асинхрони прекид) - 6%. Подешавања за заштиту од Л1ТФ/Форесхадов (л1тф=флусх), иТЛБ мултихит, Спецулативе Сторе Бипасс и СРБДС напада су остављена непромењена, што није утицало на перформансе јер се нису укрштали са тестираном конфигурацијом (на пример, специфично за КВМ, угнежђено виртуелизација и други модели процесора).
  • Онемогућавање механизама ревизије и блокирања системских позива помоћу команде „аудитцтл -а невер,таск“ и навођење опције „--сецурити-опт сеццомп=унцонфинед“ приликом покретања доцкер контејнера. Укупно повећање перформанси било је 11%, а проток је повећан са 446 захтева/с на 495 захтева/с.
  • Онемогућавање иптаблес/нетфилтер истоваром повезаних модула кернела. На идеју да се онемогући заштитни зид, који није коришћен у конкретном серверском решењу, потакнули су резултати профилисања, судећи по којима је функцији нф_хоок_слов требало 18% времена да се изврши. Примећено је да нфтаблес ради ефикасније од иптаблес-а, али Амазон Линук наставља да користи иптаблес. Након онемогућавања иптаблес-а, повећање перформанси је било 22%, а проток је повећан са 495к рек/с на 603к рек/с.
  • Смањена миграција руковалаца између различитих ЦПУ језгара ради побољшања ефикасности коришћења кеш меморије процесора. Оптимизација је обављена како на нивоу везивања процеса либреактора за језгра ЦПУ-а (ЦПУ Пиннинг) тако и путем пиновања кернел мрежних руковаоца (Рецеиве Сиде Сцалинг). На пример, иркбаланце је онемогућен и афинитет реда према ЦПУ-у је експлицитно постављен у /проц/ирк/$ИРК/смп_аффинити_лист. Да би се користило исто ЦПУ језгро за обраду процеса либреактора и мрежног реда долазних пакета, користи се прилагођени БПФ руковалац, повезан постављањем ознаке СО_АТТАЦХ_РЕУСЕПОРТ_ЦБПФ приликом креирања утичнице. Да би се редови одлазних пакета повезали са ЦПУ-ом, подешавања /сис/цласс/нет/етх0/куеуес/тк- су промењена /кпс_цпус. Укупно повећање перформанси било је 38%, а проток је повећан са 603 захтева/с на 834 захтева/с.
  • Оптимизација руковања прекидима и коришћење поллинга. Омогућавање адаптиве-рк режима у ЕНА драјверу и манипулисање сисцтл нет.цоре.буси_реад повећали су перформансе за 28% (пропусност је повећана са 834к рек/с на 1.06М рек/с, а латенција је смањена са 361μс на 292μс).
  • Онемогућавање системских услуга које доводе до непотребног блокирања у мрежном стогу. Онемогућавање дхцлиент-а и ручно подешавање ИП адресе резултирало је повећањем перформанси од 6% и повећањем пропусности са 1.06М рек/с на 1.12М рек/с. Разлог зашто дхцлиент утиче на перформансе је у анализи саобраћаја коришћењем сирове утичнице.
  • Фигхтинг Спин Лоцк. Пребацивање мрежног стека у режим „нокуеуе“ преко сисцтл „нет.цоре.дефаулт_кдисц=нокуеуе“ и „тц кдисц реплаце дев етх0 роот мк“ довело је до повећања перформанси од 2%, а пропусност је повећана са 1.12М рек/с на 1.15М рек/с.
  • Завршне мање оптимизације, као што је онемогућавање ГРО-а (генеричко ослобађање пријема) командом „етхтоол -К етх0 гро офф“ и замена алгоритма кубичне контроле загушења са рено користећи сисцтл „нет.ипв4.тцп_цонгестион_цонтрол=рено“. Укупно повећање продуктивности било је 4%. Пропусност је повећана са 1.15 милиона захтева/с на 1.2 милиона захтева/с.

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

  • Покретање либреацтор-а засебно се није разликовало у перформансама од покретања у контејнеру. Замена вритев-а са слањем, повећање максималних догађаја у еполл_ваит и експериментисање са ГЦЦ верзијама и заставицама није имало ефекта (ефекат је био приметан само за заставице „-О3“ и „-марцх-нативе“).
  • Надоградња језгра Линука на верзије 4.19 и 5.4, коришћењем планера СЦХЕД_ФИФО и СЦХЕД_РР, манипулисање сисцтл кернел.сцхед_мин_грануларити_нс, кернел.сцхед_вакеуп_грануларити_нс, транспарент_хугепагес=невер, скев_тицк=1ц није утицало на перформансе
  • У ЕНА драјверу, омогућавање режима Оффлоад (сегментација, распршивање, рк/тк контролна сума), прављење са „-О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
    • СО_ПРИОРИТИ
    • ТЦП_НОДЕЛАИ

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

Додај коментар