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