新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 一種面向云架構的高性能網絡接口實現技術

        一種面向云架構的高性能網絡接口實現技術

        作者: 時間:2015-03-02 來源:網絡 收藏

          0概述

        本文引用地址:http://www.104case.com/article/270287.htm

          在傳統的電信IT產品中,高性能一般采用特殊的硬件模塊來實現,比如網絡處理器、ASIC、等等。這些特殊硬件模塊一般會采用特殊的架構和指令集對網絡數據收發過程進行優化以達到更好的性能。然而,這也相應使得開發和維護這些模塊的成本非常的昂貴,同時還有一個無法解決的問題是基于這些特殊硬件模塊實現的不能移植到云中,因為它們跟硬件的耦合度太高了。摩爾定律的出現,使得通用處理器的性能得到了極大的提升,這也為基于通用處理器實現高性能提供了可能,同時也為移植到云中提供了前提條件。

          

         

          圖1 網絡接口實現的發展趨勢

          本文對基于通用X86架構處理器和Linux下的傳統網絡接口實現模式進行了分析,同時針對其不足提出了一種高性能網絡接口實現方案-HPNI.

          1傳統網絡接口實現分析

          傳統網絡接口實現如圖2所示,Linux下傳統網絡接口處理流程一般包含以下幾個步驟:

          

         

          圖2 傳統網絡接口實現

          (1)系統啟動之后,內核中的驅動程序進行相應的資源分配以及網卡寄存器配置,比如分配數據包緩沖區,使能DMA傳輸通道等等;

          (2)網卡初始化完成以后,當網卡從網絡收到數據包的時候,會將數據包通過DMA方式傳送到內核中的數據包緩沖區中,并生成相應的數據包描述符存放在環形隊列里面;

          (3)網卡觸發硬中斷通知內核,內核在中斷處理程序中產生相應軟中斷給應用程序收包任務;

          (4)應用程序收包任務通過系統調用收取數據包,數據包也將從內核空間拷貝到用戶空間;

          (5)收包任務通過共享隊列把數據包傳遞給處理任務;

          (6)處理任務通過共享隊列把處理好的數據包傳遞給發包任務;

          (7)發包任務通過系統調用把數據包傳遞給內核,通過采用一次內存拷貝實現;

          (8)驅動程序根據存放在環形隊列里面的數據包描述符啟動相應的DMA傳輸任務;

          (9)數據包傳輸完成后,網卡觸發中斷通知內核做相應處理。

          下面先對傳統網絡接口的性能關鍵點進行分析。

          1.1中斷和系統調用

          Linux下傳統網絡接口實現的一個關鍵因素是中斷技術,網卡通過中斷與內核保持同步。但中斷處理會引入很大的性能損失,因為當CPU處理中斷的時候,它必須儲存和恢復自己的狀態,進行上下文切換以及在進入和退出中斷處理程序的時候可能引入緩存(cache)操作。在進行大流量數據包處理的時候,由于CPU被頻繁地中斷,由此帶來的性能損失會非常嚴重。

          當使用Linux系統提供的標準socket接口來實現網絡通信時,會觸發大量的系統調用,當應用程序通過socket系統調用進行網絡通信時,需要經歷從用戶態到內核態的切換以及其反向過程,在切換過程當中需要進行上下文的保存,比如對相關寄存器進行堆棧壓棧操作,保存當前指令指針等等。這些操作都會消耗系統資源,當處理高速的數據流量時,隨著系統調用數量的急劇增加而導致系統資源的大量消耗。

          1.2內存相關性能問題

          1.2.1內存拷貝

          在使用標準套接字進行數據包收發時,數據在應用程序和內核之間進行傳遞必須通過內存拷貝來完成,原因在于用戶空間的內存和內核空間的內存是處在物理內存不同的位置上。內存拷貝是一個非常消耗資源的過程,當需要收發的數據包流量很大時,這種開銷將會極大地影響系統的性能。


        上一頁 1 2 3 4 5 下一頁

        關鍵詞: 網絡接口 FPGA

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 志丹县| 卓尼县| 宜兴市| 环江| 石河子市| 错那县| 右玉县| 监利县| 乌恰县| 油尖旺区| 清苑县| 乌审旗| 团风县| 韶关市| 平乐县| 岑巩县| 大足县| 渑池县| 松溪县| 长宁区| 绥化市| 军事| 墨竹工卡县| 扬州市| 谢通门县| 连州市| 丹阳市| 梁河县| 田阳县| 黄骅市| 浦北县| 榆社县| 枣阳市| 山丹县| 宣城市| 余干县| 嘉禾县| 綦江县| 洱源县| 宝兴县| 孟村|