【文章內(nèi)容簡介】
? 只需往集群中加入更多的服務(wù)器,就可以很容易地提高路由器的容量; ? 由于采用軟件路由器,功能擴(kuò)展也非常方便。 集群路由器架構(gòu)圖示 設(shè)計(jì)原則( 2) ? 僅當(dāng)單個(gè)服務(wù)器的性能能夠提高到 cR,集群路由器架構(gòu)方案才是可行的,但目前的服務(wù)器遠(yuǎn)不能達(dá)到這個(gè)速度。 ? 設(shè)計(jì)原則二: ? 在每個(gè)服務(wù)器內(nèi)部,將路由器的功能分布到多條處理路徑上來提高單臺(tái)服務(wù)器的處理能力。 服務(wù)器架構(gòu) ? 硬件:使用一個(gè)早期的 Intel Nehalem服務(wù)器。 服務(wù)器架構(gòu)(續(xù)) ? 軟件: ? 輪詢模式下的 Click/Linux , CPU輪詢是否有包到達(dá),而不是在包到來后被中斷。 ? 擴(kuò)展了 Linux 10Gbps以太網(wǎng)驅(qū)動(dòng)程序。 ? 流量: ? 服務(wù)器上安裝了兩塊雙端口 10Gbps網(wǎng)卡,每塊網(wǎng)卡可獲得 。 ? 服務(wù)器最高數(shù)據(jù)輸入速率為 。 充分利用服務(wù)器的并行性 ? 用基于點(diǎn)到點(diǎn)連接的 Nehalem 服務(wù)器代替基于共享總線結(jié)構(gòu)的 Xeon服務(wù)器,性能提高了 23倍。 使用多隊(duì)列網(wǎng)卡 ? 在多核系統(tǒng)上,包輸入 /輸出產(chǎn)生兩個(gè)性能問題: ? 如何在核之間均衡負(fù)載? ? 如何使系統(tǒng) I/O性能隨核的數(shù)量線性增長? ? 使用多隊(duì)列網(wǎng)卡: ? 每個(gè)端口支持多個(gè)發(fā)送和接收隊(duì)列,網(wǎng)卡對包的五元組進(jìn)行哈希,根據(jù)哈希結(jié)果將包分到不同的隊(duì)列,每個(gè)隊(duì)列映射到一個(gè) CPU核。 ? 擴(kuò)展了支持多隊(duì)列網(wǎng)卡的驅(qū)動(dòng)程序。 批處理 ? 在目前的操作系統(tǒng)中, ? 數(shù)據(jù)包的元數(shù)據(jù)存放在 skb buffer中,其中有一個(gè)指針指向數(shù)據(jù)包實(shí)際存放的位置。 ? CPU預(yù)先在內(nèi)存中分配好以上數(shù)據(jù)結(jié)構(gòu),并將一個(gè) skb buffer的地址(包描述符)通知給網(wǎng)卡。 ? 當(dāng)有數(shù)據(jù)包到達(dá)網(wǎng)卡時(shí),網(wǎng)卡將數(shù)據(jù)包及元數(shù)據(jù)通過 DMA存放到指定位置,然后向 CPU發(fā)送中斷,返回包描述符。 ? [4]通過處理來減少開銷: ? 網(wǎng)卡驅(qū)動(dòng)的批處理:驅(qū)動(dòng)程序每次傳輸 kn個(gè)包描述符,減少在PCIe及 I/O總線上產(chǎn)生的事務(wù)。 ? 輪詢驅(qū)動(dòng)的批處理: Click每次輪詢可最多接收 kp個(gè)包。 性能改進(jìn) ( 2) PacketShader[4] ? 硬件配置 ? 2片 Intel Nehalem 四核 CPU ? 2塊 NVIDIA GTX480顯卡 ? 4塊雙端口 10GbE網(wǎng)卡(共 8個(gè) 10G端口) 軟件配置 ? 64bit Ubuntu Linux with kernel ? 優(yōu)化的 10GbE驅(qū)動(dòng)程序( I/O engine) ? CUDA SDK Linux網(wǎng)絡(luò)棧的開銷 I/O Engine的優(yōu)化措施( 1) ? 用靜態(tài)預(yù)分配代替動(dòng)態(tài)緩沖區(qū)分配,有效減小了 : ? 包緩沖區(qū)的分配和釋放開銷 ? DMA映射開銷 ? 精簡了 skb數(shù)據(jù)結(jié)構(gòu), skb的大小從 208字節(jié)減為 8字節(jié)。 ? 將包緩沖區(qū)的大小設(shè)置為 2KB,且起始地址 2KB邊界對齊。 I/O engine的驅(qū)動(dòng)結(jié)構(gòu) P a c k e t d a t a R i n gD r i v e r K e r n e lU s e r s p a c eC h u n km m a pC h u n kc o p yD e s c r i p t o r R i n gO n e c h u n k c o n t a i n s s e v e r a l p a c k e t sR e c e i v e c h u n kO n e s y s t e m c a l l ,O n e c h u n kN I CH a r d w a r ewritewriteI/O Engine的優(yōu)化措施( 2) ? 批處理: ? 硬件批處理:網(wǎng)卡使用一個(gè) PCI事務(wù)傳輸多個(gè)包描述符,充分利用PCI總線帶寬。 ? 驅(qū)動(dòng)層批處理:驅(qū)動(dòng)程序接收或發(fā)送了多個(gè)包之后再寫網(wǎng)卡寄存器,以平攤訪問網(wǎng)卡寄存器的高額開銷。 ? 應(yīng)用層批處理:應(yīng)用程序每次系統(tǒng)調(diào)用接收多個(gè)數(shù)據(jù)包,以平攤系統(tǒng)調(diào)用的開銷。 ? 預(yù)?。? ? 驅(qū)動(dòng)程序預(yù)取下一個(gè)包的描述符和包數(shù)據(jù)到 CPU cache,消除由DMA引起的強(qiáng)制緩存缺失。 ? 采用預(yù)取隱藏?cái)?shù)據(jù)包拷貝延遲。 ? 使用輪詢代替?zhèn)鹘y(tǒng)中斷模式或 NAPI模式。 批處理獲得的性能提升 I/O engine的多核優(yōu)化 ? 使用多隊(duì)列網(wǎng)卡 ? 消除和網(wǎng)卡相關(guān)的全局統(tǒng)計(jì)變量 ? NUMA感知的數(shù)據(jù)分布與 I/O: ? 將所有的數(shù)據(jù)結(jié)構(gòu)分配在處理它們的節(jié)點(diǎn)上 ? 消除由 RSS引起的跨節(jié)點(diǎn) I/O I/O engine性能 Pa