要命的幾毫秒延遲,憑什么讓廣告大佬Meta坐不住?答案其實(shí)挺簡(jiǎn)單:在多活一毫秒就多掙一筆錢的生意里,調(diào)度器要是分不清哪個(gè)線程正在幫你印鈔票,哪個(gè)線程在后臺(tái)摸魚(yú),那就活該被換掉。Meta的廣告系統(tǒng)正面臨這樣的窘境——但這次他們沒(méi)忍著,直接用開(kāi)源利器把自己家的內(nèi)核調(diào)度給重寫(xiě)了。
先看幾個(gè)讓人倒吸一口氣的數(shù)字。Meta的廣告服務(wù)集群,入庫(kù)流量每秒平均超過(guò)500萬(wàn)次請(qǐng)求,攤到全天各變現(xiàn)渠道,就是4000多億次。P99尾部延遲只要縮那么一毫秒,廣告就能更對(duì)準(zhǔn)人,廣告主投出去的每一分錢也就更響。反過(guò)來(lái),哪怕多出幾毫秒的退化,也夠讓廣告排序數(shù)量往下掉,實(shí)實(shí)在在傷營(yíng)收。所以,當(dāng)一次內(nèi)核升級(jí)差點(diǎn)讓整個(gè)廣告機(jī)群延遲集體變差時(shí),他們決定不再跟通用調(diào)度器湊合過(guò)了。
![]()
這事兒的導(dǎo)火索,出在從Linux內(nèi)核v6.4往v6.9升的時(shí)候。新內(nèi)核引入了EEVDF調(diào)度器(從v6.6開(kāi)始),結(jié)果一上廣告業(yè)務(wù),延遲硬是漲了一截,能排出來(lái)給廣告主的候選廣告直接變少。這叫什么?這就好比把法拉利發(fā)動(dòng)機(jī)裝進(jìn)重卡車頭,參數(shù)看著漂亮,但滿貨廂的急單它根本不懂哪個(gè)該先送。技術(shù)債隨之而來(lái):一批廣告主機(jī)被逼著停在老舊的v6.4內(nèi)核上,運(yùn)維碎片化,版本分裂,維護(hù)起來(lái)能煩死人。
Meta給出的解法,是sched_ext。這東西簡(jiǎn)單說(shuō)就是一個(gè)開(kāi)源的、基于BPF的調(diào)度器框架,已經(jīng)正式進(jìn)入Linux內(nèi)核v6.12。它給了開(kāi)發(fā)者一種能力:你可以把自己的調(diào)度策略寫(xiě)成BPF程序,在工作負(fù)載跑起來(lái)那一刻,直接替換掉內(nèi)核默認(rèn)的那套。于是,廣告團(tuán)隊(duì)和內(nèi)核團(tuán)隊(duì)一合計(jì),正好用它給廣告投放工作負(fù)載定制一套專屬調(diào)度邏輯。
定制到底“定”在哪里?清單一拉,就能看出跟通用調(diào)度器的根本區(qū)別:
- 第一,認(rèn)品種。通用調(diào)度器CFS和EEVDF只知道在線程間平衡CPU時(shí)間,根本分不出眼前這堆線程,誰(shuí)是替錢打工的檢索主鏈路,誰(shuí)只是后臺(tái)寫(xiě)日志、刷緩存。而在廣告系統(tǒng)里,Meta清楚每個(gè)線程的用途和緊迫度,這套認(rèn)知全部編碼進(jìn)BPF調(diào)度器,讓負(fù)責(zé)降低P99請(qǐng)求延遲的任務(wù)先跑,其他通通往后站。
- 第二,事件驅(qū)動(dòng)換腦。主機(jī)一跑起廣告負(fù)載,優(yōu)化的調(diào)度策略即刻生效。隨后內(nèi)核只通過(guò)一組事件回調(diào)(比如線程喚醒時(shí)選哪個(gè)CPU)來(lái)調(diào)用BPF程序。原先那種“大家輪流吃大鍋飯”的調(diào)度邏輯,當(dāng)場(chǎng)被換成“緊急訂單插隊(duì)優(yōu)先”。
- 第三,來(lái)自實(shí)戰(zhàn)的協(xié)作。sched_ext并非Meta閉門(mén)造車,是他們跟Google的ghOSt作者一起設(shè)計(jì),專門(mén)奔著能合進(jìn)上游Linux內(nèi)核去的,后來(lái)果真進(jìn)了v6.12。Meta內(nèi)部也早就把它部署在多個(gè)服務(wù)上,調(diào)度延遲降得明顯,所以面對(duì)廣告業(yè)務(wù)的EEVDF退化問(wèn)題時(shí),sched_ext直接被當(dāng)成救場(chǎng)王牌。
換上這套定制調(diào)度后,效果怎么樣?只看三個(gè)數(shù)字就夠扎眼:廣告檢索階段的尾部延遲(P99)干掉了28%,直接省下3.28兆瓦功耗,同時(shí)廣告排序數(shù)量反而增加了1.1%。延遲更低、更省電、還多排了廣告讓廣告主有的挑——這種“又讓馬兒跑,又讓馬兒不吃草”的結(jié)果,證明了針對(duì)工作負(fù)載的調(diào)度優(yōu)化能直接變成財(cái)報(bào)上的好處。
說(shuō)到底,這次改造之所以帶感,不是因?yàn)橛昧耸裁春诳萍迹撬疗屏艘粋€(gè)行業(yè)里心照不宣的別扭:服務(wù)器跑著極度值錢的業(yè)務(wù),調(diào)度器卻還在用“萬(wàn)能青年旅店”模式,對(duì)人不對(duì)事。Meta把“我的線程我清楚”這個(gè)簡(jiǎn)單的道理直接寫(xiě)進(jìn)調(diào)度代碼,不出意外地拿到扎實(shí)收益。下一次你的服務(wù)被幾下延遲波動(dòng)搞到心焦時(shí),或許該問(wèn)的不是“怎么給機(jī)器多加兩顆核”,而是“能不能讓調(diào)度器知道自己正在替誰(shuí)打工”。
特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺(tái)“網(wǎng)易號(hào)”用戶上傳并發(fā)布,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.