Інжынер з кампаніі Amazon выявіў рэгрэсію, спецыфічную для ядра Linux 7.0, рэліз якога чакаецца 13 красавіка. Змена налад планавальніка задач прывяло да істотнага зніжэння прапускной здольнасці і спагадлівасці пры працы СКБД PostgreSQL на сістэмах з архітэктурай ARM64. Пры выкарыстанні ядра 7.0 паказчыкі прадукцыйнасці пры праходжанні тэсту pgbench "simple-update" знізіліся амаль у два разы – з 98565 да 50751.
Запаволенне выклікана зменай рэжыму выцяснення (preemption) у планавальніку па змаўчанні з PREEMPT_NONE на PREEMPT_LAZY на архітэктурах, якія падтрымліваюць такі рэжым, з-за чаго ў карыстацкай прасторы PostgreSQL стаў марнаваць 55% часу CPU на выклік s_lock(). Для рашэння праблемы прапанавана вярнуць па змаўчанні рэжым PREEMPT_NONE і прыбраць яго прывязку да налады ARCH_NO_PREEMPT.
Пітэр Зэйлстра (Peter Zijlstra), аўтар змен, з-за якіх узнікла рэгрэсія, і мэйнтэйнер планавальніка задач і звязаных з блакіроўкамі падсістэм ядра, заявіў, што выпраўленне трэба ўносіць у код PostgreSQL. Для ўхілення падзення прадукцыйнасці ён параіў задзейнічаць у PostgreSQL нядаўна дададзенае ў ядро пашырэнне "rseq slice" (Restartable Sequences) для абмежавання верагоднасці выцяснення трымальніка блакавання.
Пакуль не зразумела якое рашэнне прыме Лінус Торвальдс, які прытрымліваецца правіла, што ядро не павінна пагаршаць працу і ламаць сумяшчальнасць з прасторай карыстальніка. З аднаго боку ядро 7.0 знаходзіцца на фінальнай стадыі тэставання перад рэлізам і адкат налад планавальніка можа прывесці да іншых рэгрэсіяў, а з іншага боку карыстачы могуць сутыкнуцца з двухразовым паніжэннем прадукцыйнасці адной з самых папулярных СКБД.
Крыніца: opennet.ru
