Linux5.9將改進(jìn)頁(yè)面鎖
基于AMD EPYC平臺(tái)的Linux內(nèi)核5.0?5.9基準(zhǔn)測(cè)試表明,正在開(kāi)發(fā)的Linux內(nèi)核5.9在某些工作負(fù)載條件下降低了性能問(wèn)題。 據(jù)報(bào)道,此問(wèn)題主要發(fā)生在測(cè)試項(xiàng)目中,例如Apache HTTPD Web服務(wù)器。 為了解決這個(gè)問(wèn)題,由Linus Torvalds領(lǐng)導(dǎo)的開(kāi)發(fā)團(tuán)隊(duì)決定一分為二,并提出了一種基于側(cè)鎖公平性的解決方案。
這個(gè)問(wèn)題的底層原理有些復(fù)雜,簡(jiǎn)單講就是由于頁(yè)面鎖太講究“公平性”,有時(shí)反而會(huì)導(dǎo)致性能的倒退。
Linus Torvalds 和其他開(kāi)發(fā)者共同研究了如何進(jìn)一步改善頁(yè)面鎖定行為,并于今日將一個(gè)短期解決方案合并到了 Linux 5.9 的主線補(bǔ)丁更新中。
這項(xiàng)名叫 2a9127fcf229 的合并提交(mm: rewrite wait_on_page_bit_common() logic"),允許更改頁(yè)面鎖中控制非公平性的參數(shù)。若在有鎖的情況下等待,系統(tǒng)就會(huì)嚴(yán)格按照順序來(lái)調(diào)動(dòng)數(shù)據(jù)。
這項(xiàng)修訂旨在消除長(zhǎng)期存在的“看門狗”故障,其涉及在極端負(fù)載狀況下的頁(yè)面鎖定。在此過(guò)程中,如果遭到其它頁(yè)面的鎖定,相關(guān)進(jìn)程很可能陷入永久等待。
此外雖然 Linux 5.9 在某些基準(zhǔn)測(cè)試項(xiàng)目上的跑分很是亮眼,但副作用卻是導(dǎo)致其它一些基準(zhǔn)測(cè)試項(xiàng)目的性能出現(xiàn)大幅滑退,比如平均延遲和吞吐量的惡化。
本次修訂并非完全撤銷此前的策略,而是引入了對(duì)頁(yè)面鎖定非公平性的可控制方案。雖然默認(rèn)設(shè)置已經(jīng)相對(duì)均衡,但有需要的開(kāi)發(fā)者仍可通過(guò) sysctl 接口進(jìn)行調(diào)整。
顯然,這些方案都圍繞著頁(yè)面鎖定的重要性、以及某些鎖定狀況下的競(jìng)爭(zhēng)程度來(lái)展開(kāi),但主要的爭(zhēng)論似乎與 IO 無(wú)關(guān)(頁(yè)面鎖的起源)、對(duì)于頁(yè)面文件的映射也是相對(duì)穩(wěn)定的(除了錯(cuò)誤地插入頁(yè)表)。
此外開(kāi)發(fā)者也可通過(guò) sysctl sysctl_page_lock_unfairness(或 / proc / sys / vm / page_lock_unfairness)來(lái)調(diào)節(jié)內(nèi)核頁(yè)面鎖定的非公平性程度(默認(rèn)數(shù)值 0 為公平模式)。