Natukoy ng isang inhinyero ng Amazon ang isang regression na partikular sa Linux kernel 7.0, na inaasahang ilalabas sa Abril 13. Ang pagbabago sa mga setting ng task scheduler ay nagresulta sa isang makabuluhang pagbawas sa throughput at responsiveness kapag pinapatakbo ang PostgreSQL sa mga ARM64 system. Gamit ang kernel 7.0, ang performance sa pgbench "simple-update" test ay bumaba ng halos doble, mula 98565 patungong 50751.
Ang pagbagal ay sanhi ng pagpapalit ng default na scheduler preemption mode mula PREEMPT_NONE patungong PREEMPT_LAZY sa mga arkitekturang sumusuporta dito. Ito ang naging dahilan upang gugulin ng PostgreSQL ang 55% ng oras ng CPU nito sa pagtawag sa s_lock() sa user space. Upang matugunan ang isyung ito, iminumungkahi na ibalik ang PREEMPT_NONE sa default at i-unlink ito mula sa setting na ARCH_NO_PREEMPT.
Si Peter Zijlstra, ang may-akda ng mga pagbabagong nagdulot ng regression at ang tagapangalaga ng task scheduler at mga lock-related kernel subsystem, ay nagsabi na kailangang ipatupad ang isang pag-aayos sa PostgreSQL code. Upang matugunan ang pagbaba ng performance, inirekomenda niya ang paggamit ng kamakailang idinagdag na "rseq slice" (Restartable Sequences) extension sa PostgreSQL kernel upang limitahan ang posibilidad ng pag-alis ng lock holder.
Hindi pa rin malinaw kung anong desisyon ang gagawin ni Linus Torvalds, dahil naniniwala siya sa prinsipyong hindi dapat pababain ng kernel ang performance o sirain ang user-space compatibility. Sa isang banda, ang kernel 7.0 ay nasa huling yugto ng pagsubok bago ang paglabas, at ang pag-rollback sa mga setting ng scheduler ay maaaring humantong sa iba pang mga regression. Sa kabilang banda, maaaring makaranas ang mga user ng pagbaba ng performance ng isa sa mga pinakasikat na database.
Pinagmulan: opennet.ru
