騰訊云黃炳琪:騰訊云如何通過F-Stack項(xiàng)目解決內(nèi)核擁堵
2017-04-13 10:03:25 熱度:
2017年4月12-13日,2017亞太CDN峰會(huì)在北京隆重召開。在13日上午的視頻云論壇上,騰訊云研發(fā)總監(jiān)黃炳琪作了題為《騰訊云CDN全用戶態(tài)Server實(shí)踐》主題報(bào)告。

圖為:騰訊云研發(fā)總監(jiān)黃炳琪
“長(zhǎng)胖的Linux”:騰訊云操作短板
演講開頭,黃炳琪總監(jiān)向我們普及了一個(gè)“J型曲線”的概念。他認(rèn)為盡管最近幾年帶寬、流量型業(yè)務(wù)的翻番式的增長(zhǎng)和如影隨形、愈演愈烈的DDOS攻擊和CC攻擊對(duì)CDN的技術(shù)體系提出來越來越多的挑戰(zhàn),但是面對(duì)這些挑戰(zhàn),騰訊云手里也有不少重武器來應(yīng)對(duì),比如網(wǎng)卡和交換機(jī)容量的不斷提升、CPU核心數(shù)也水漲船高、NVMe和NVDIMM的應(yīng)用也越來越廣。
從硬件層面來看,黃炳琪認(rèn)為騰訊云有足夠的裝備來打贏這場(chǎng)戰(zhàn)爭(zhēng),截至目前,騰訊云的網(wǎng)卡容量從25GbE升級(jí)到40GbE再到100GbE;CPU核數(shù)也從24Core升級(jí)到48Core,直至56Core。騰訊云還擁有“NVDIMM NVMe”。不過在實(shí)操過程中騰訊云發(fā)現(xiàn)現(xiàn)有的體系中有一個(gè)特別大的短板,黃炳琪將這個(gè)短板(Linux太臃腫)生動(dòng)的形容為“Linux太胖了”,任何一個(gè)數(shù)據(jù)包從網(wǎng)絡(luò)上過來到達(dá)用戶層,都會(huì)經(jīng)過上下文切換,內(nèi)存分配和拷貝,鎖,局部性失效的問題。黃炳琪認(rèn)為,其實(shí)這些機(jī)制本身并沒有錯(cuò),這是幾十年來軟件工程領(lǐng)域的精華,只不過是linux是通用操作系統(tǒng)。他說“一個(gè)通用操作遇到這么特定的、極端的業(yè)務(wù)要求,的確是老干部遇到了新問題。”
問題是什么呢?黃炳琪說是“內(nèi)核擁堵”。一個(gè)數(shù)據(jù)從包網(wǎng)絡(luò)上過來,通過硬中斷、軟中斷或是NAPI把數(shù)據(jù)收到內(nèi)核里,然后經(jīng)歷內(nèi)存cp、各種各樣的鎖、線程喚醒、內(nèi)核通知鏈,然后到用戶空間線程來讀取,這個(gè)時(shí)候的線程還指不定在哪個(gè)CPU上跑。一套機(jī)制如若很復(fù)雜,做內(nèi)核開發(fā)的時(shí)候常常拿其中內(nèi)核鎖一項(xiàng)就問倒一大片面試者。因?yàn)檫@個(gè)問題的存在,業(yè)界逐漸出現(xiàn)了業(yè)務(wù)數(shù)據(jù)繞過內(nèi)核的呼聲,就是所謂的kernel bypass。
業(yè)界解決內(nèi)核擁堵:kernel bypass
黃炳琪從四個(gè)方面解釋了kernel bypass:
其一:kernel bypass重新定義的內(nèi)核空間和用戶空間的分工。內(nèi)核主要做高優(yōu)先級(jí),高權(quán)限的控制信令的操作。而用戶空間主要關(guān)注于大流量,高并發(fā)的數(shù)據(jù)流收發(fā)。在實(shí)踐上,一般kernel bypass是一個(gè)網(wǎng)卡隊(duì)列對(duì)應(yīng)一個(gè)用戶空間進(jìn)程,對(duì)應(yīng)一個(gè)綁定的CPU,形成一個(gè)邏輯單元。所有的數(shù)據(jù)和計(jì)算都在這個(gè)單元里面閉環(huán),每個(gè)邏輯單元之間不共享任何數(shù)據(jù)。
其二:這個(gè)架構(gòu)如何解決4個(gè)問題。由于全部是用戶空間,自然不存在硬中斷,軟中斷,用戶態(tài)和內(nèi)核態(tài)的切換,由于線程綁定在特定的CPU上,全異步執(zhí)行,所以沒有進(jìn)程的上下文切換。從設(shè)備DMA出來的內(nèi)存一直可以用到死,不需要內(nèi)核空間和用戶空間拷來拷去。
內(nèi)核中大量鎖的出現(xiàn),是因?yàn)閘inux作為搶占式的內(nèi)核,會(huì)在代碼不受控制的情況下在多個(gè)上下文中來回串,還會(huì)共享很多數(shù)據(jù)。比如說同一個(gè)端口號(hào),google也出了一個(gè)補(bǔ)丁muti port來降低端口鎖的影響,DNS端口分發(fā)。
其三:kernel bypass的難度。業(yè)界要一直大規(guī)模的用起來,主要在二層、三層做網(wǎng)關(guān)路由轉(zhuǎn)發(fā)等工作,最多玩玩簡(jiǎn)單的UDP協(xié)議。因?yàn)楸緛沓恋碓诓僮飨到y(tǒng)內(nèi)的功能和機(jī)制已經(jīng)發(fā)展了幾十年,外圍的軟件生態(tài)也是圍繞其建設(shè)的。要重新在用戶空間復(fù)制一套的難度和工作量其實(shí)都不是一般得大。
其四:為什么要投入kernel bypass。黃炳琪解釋,業(yè)務(wù)的壓力其實(shí)并不是一天兩天的事情了,從web2.0開始,互聯(lián)網(wǎng)的爆發(fā)式增長(zhǎng),迫使業(yè)界必須從這條路上趟一趟。所以從幾年前騰訊云在從簡(jiǎn)到易的實(shí)踐by kernel的方案,時(shí)至今日,已經(jīng)形成完整的、成熟的、易用的一個(gè)開發(fā)工具棧。
F-Stack項(xiàng)目——騰訊云如何解決內(nèi)核擁堵
F-Stack是基于kernel bypass的理念的完整的、成熟的、易用的、高性能server技術(shù)?!,F(xiàn)代的操作系統(tǒng)和軟件架構(gòu)是幾十年來人類智慧的結(jié)晶,騰訊云的實(shí)現(xiàn)理念是:把這個(gè)星球最優(yōu)秀的軟件和代碼粘合起來。在此之前,騰訊云也走過彎路,開發(fā)了一個(gè)能用的TCP/IP協(xié)議棧,發(fā)現(xiàn)走不通以后就放棄了。
F-Stack的特點(diǎn):1、全用戶態(tài)。用戶態(tài)開發(fā)簡(jiǎn)單、安全;拒絕四個(gè)上下文切換;拒絕內(nèi)存拷貝;拒絕中斷和中斷風(fēng)暴。2、網(wǎng)卡隊(duì)列每CPU每進(jìn)程。線性能力擴(kuò)展;拒絕調(diào)度;拒絕鎖;拒絕破壞局部性。黃炳琪解釋道:由于全部是用戶空間,自然不存在硬中斷,軟中斷,用戶態(tài)和內(nèi)核態(tài)的切換,由于線程綁定在特定的CPU上,全異步執(zhí)行,所以沒有進(jìn)程 的上下文切換。從設(shè)備DMA出來的內(nèi)存一直可以用到死,不需要內(nèi)核空間和用戶空間考來考去。
F-Stack在騰訊云CDN的應(yīng)用:1、直播異常不斷流;2、CDN安全防攻擊;3、CDN TCP協(xié)議加速;4、CDN性能提升。
演講最后一部分,黃炳琪向我們展示了F-Stack性能測(cè)試,由于他的團(tuán)隊(duì)做了大量的努力大量的優(yōu)化,F(xiàn)-Stack的性能測(cè)試從短連接測(cè)試到長(zhǎng)連接測(cè)試再到混合連接測(cè)試,F(xiàn)-Stack都表現(xiàn)完美。
下一篇:創(chuàng)新實(shí)驗(yàn)室文勇剛:“無(wú)人”數(shù)據(jù)中心管控和運(yùn)維——人工智能帶來的變革上一篇:供銷大數(shù)據(jù)張帥:打造一體化開放式公立云平臺(tái)
責(zé)任編輯:方珍