亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        飛騰處理器網絡控制器的驅動設計和實現

        2013-12-31 00:00:00周浩戴華東邵立松
        計算機光盤軟件與應用 2013年19期

        摘 要:隨著飛騰處理器性能的提升,原來的網絡驅動已經不能滿足其需求,急需設計和實現一款針對當前處理器的特性,能最大程度發(fā)揮其性能的網絡驅動。通過研究飛騰處理器網絡控制器相關的硬件原理以及l(fā)inux下驅動框架的知識,設計和實現飛騰處理器中網絡控制器的驅動,并對其進行了優(yōu)化,使其達到了千兆網卡的使用需求。

        關鍵詞:飛騰處理器;linux驅動框架;DMA;IP頭對齊;NAP;GSO

        中圖分類號:TP334.7

        飛騰處理器是國防科大計算機學院研制的一款高性能通用服務器處理器。飛騰處理器芯片內部集成了兩個千兆網絡控制器,通過高速AMBA總線與CPU系統(tǒng)總線互連。

        本文研究了飛騰處理器網絡控制器相關的硬件原理以及l(fā)inux下驅動框架知識,設計和實現飛騰處理器中網絡控制器的驅動,并對其進行了優(yōu)化,使其達到了千兆網卡的使用需求。

        1 硬件原理

        飛騰處理器網絡控制器器包括AHB/AXI接口,DMA通道,FIFO緩沖和核心四個邏輯部件。AHB/AXI接口通過AMBA總線控制器與系統(tǒng)總線互連,即可以作為從設備接收CPU的訪問操作,也可以作為主設備為DMA啟動訪存操作;DMA通道負責通過AMBA總線在系統(tǒng)主存和內部FIFO之間進行數據包的傳輸;DMA通道和FIFO緩沖都是接收和發(fā)送專用的,因此一個網絡控制器包含兩個DMA通道和兩個FIFO緩沖;核心邏輯實現了千兆介質無關接口GMII,并負責在FIFO緩沖區(qū)和GMII之間進行數據包傳輸。

        飛騰處理器通過GMII接口與物理層芯片連接,并通過介質相關MD總線訪問物理層芯片的狀態(tài)和控制寄存器SCR。

        2 網絡驅動設計

        linux網絡設備驅動基本框架從上到下劃為三層,分別為網絡協(xié)議接口層,網絡設備接口層,設備驅動功能層。

        網絡協(xié)議接口層提供統(tǒng)一的數據包收發(fā)接口,使得上層ARP或IP協(xié)議獨立于具體的設備,通過dev_queue_xmit()函數發(fā)送數據,并通過netif_rx()函數接收數據。

        網絡接口層從宏觀上規(guī)劃了具體操作硬件的設備驅動功能層的結構,網絡設備接口層提供統(tǒng)一的用于描述具體網絡設備屬性和操作的結構體net_device,該結構體是設備驅動功能層中各函數的容器。

        設備驅動功能層各函數是網絡設備接口層net_device數據結構的具體成員,是驅使網絡設備硬件完成相應動作的程序,它通過hard_start_xmit()函數啟動發(fā)送操作,并通過網絡設備上的中斷觸發(fā)接受操作。

        飛騰網絡控制器驅動實現了linux網絡設備驅動基本框架要求的函數接口,并在此基礎上進行了一系列的優(yōu)化,主要技術難點在于資源尋址機制、鏈路狀態(tài)監(jiān)控和基于DMA的數據包收發(fā)機制的設計和實現。

        2.1 資源尋址機制

        資源尋址機制涉及到兩方面問題:一方面是飛騰CPU硬核對網絡控制和狀態(tài)寄存器CSR資源的尋址,另一方面是網絡控制器DMA對系統(tǒng)主存資源的尋址。

        在飛騰處理器中,網絡CSR寄存器和所有其他AMBA總線設備的寄存器一樣,被固定在AMBA總線地址空間的一段范圍內。網絡驅動程序在硬件初始化之前,需要將這段AMBA總線地址范圍映射到飛騰CPU地址空間上,從而實現網絡CSR寄存器的尋址,并通過CSR寄存器中的MD地址和數據寄存器的編程,實現對網絡物理層芯片內部MD寄存器的訪問。

        網絡控制器的DMA需要在系統(tǒng)主存和內部FIFO緩沖之間進行數據傳輸,因此DMA需要具有系統(tǒng)主存的訪問能力,也就是說,系統(tǒng)主存的部分或者全部可以映射到AMBA總線地址空間上。因為飛騰處理器的AMBA總線長度為64位,所以整個系統(tǒng)主存都可以映射到AMBA總線地址空間上,但是,不能與任意CSR寄存器地址范圍重疊,例如8G內存,在AMBA地址范圍為[0x84_0000_0000,0x84_FFFF_FFFF]。驅動程序的硬件初始化部分,通過AMBA總線控制器完成系統(tǒng)主存到AMBA總線地址的映射,從而實現網絡控制器DMA對系統(tǒng)主存資源的尋址。

        2.2 鏈路狀態(tài)監(jiān)控

        飛騰處理器網絡控制器主要使用GMII提供的管理接口MDIO來實現對物理芯片的控制并收集其狀態(tài)信息。

        管理接口有兩條信號線組成:MDC配置接口時鐘,最高速率可達8.3MHz,MDIO是管理數據的輸入輸出雙向接口,數據是與MDC時鐘同步的。

        網絡控制器提供了兩個寄存器,分別為GMII地址寄存器和GMII數據寄存器,它將2位讀寫命令,5位PHY芯片的地址,5位PHY芯片的寄存器地址寫入GMII地址寄存器,在MDC時鐘的配合下,將命令寫入到GMII數據寄存器,來控制和管理PHY芯片,如TX/RX模式選擇、自動協(xié)商控制、環(huán)回模式控制等;或從GMII數據寄存器中讀出PHY芯片的狀態(tài)信息,包括鏈接狀態(tài)、傳輸速度、斷電、低功率休眠狀態(tài)等,實現對PHY芯片狀態(tài)的監(jiān)控。

        2.3 基于DMA的數據包收發(fā)

        DMA描述符是由16個字節(jié)組成,4個字節(jié)一組,將這4組分別標識為DES0,DES1,DES2,DES3。

        DES0是前4字節(jié),具體為1位OWN位(用來標識描述符屬于DMA還是HOST)和31位的描述符狀態(tài)位;

        DES1具體為10位控制位和兩個11位分別用來標識緩沖區(qū)1和緩沖區(qū)2的大小。

        DES2和DES3分別為緩沖區(qū)1和2的地址,盡管有兩個緩沖區(qū)可供使用,但我們這里只使用緩沖區(qū)1,即:DES2指向的緩沖區(qū)。

        對于接收,驅動在系統(tǒng)主存中維護一個由256個描述符組成的接收描述符數組,驅動申請對應的256個2K字節(jié)大小的skb緩沖區(qū),并將這些緩沖區(qū)進行DMA流式映射,將生成的DMA地址填寫到對應描述符的緩沖區(qū)地址字段,并將接收描述符數組的起始地址寫入DAM接收描述符表基址寄存器中。

        當網絡數據包經過PHY芯片的接收進入到網絡控制器的接收FIFO時,網絡控制器會自動從AHB/AXI接口發(fā)起DMA操作,從DMA接收描述符表基址寄存器中或者從當前接收描述符寄存器中讀取當前描述符的DMA地址,訪問系統(tǒng)主存,獲取當前描述符DES2字段指向的skb緩沖區(qū)的地址,將網絡控制器內部的接收FIFO中的數據DMA到系統(tǒng)主存的緩沖區(qū)中,最后將接收狀態(tài)寫入對應的接收描述符中DES0狀態(tài)字段,將接收到的數據包的長度等信息寫入對應的接收描述符的DES1的對應字段中,并產生接收中斷。內核調用對應的中斷處理程序,使用輪詢的方式進行收包,并將數據包提交給上層協(xié)議棧。

        對于發(fā)送,驅動在系統(tǒng)主存中維護了一個256個描述符組成的發(fā)送描述符數組,并將發(fā)送描述符數組的起始地址寫入DAM發(fā)送描述符表基址寄存器中。當應用程序要發(fā)送數據時,上層協(xié)議棧會向驅動傳遞要發(fā)送的skb緩沖區(qū),將skb緩沖區(qū)進行DMA流式映射,并將生成的DMA地址填寫在當前發(fā)送描述符的DES2緩沖區(qū)地址字段,根據skb的相關成員變量,填寫對應描述符的DES1的校驗和字段以及緩沖區(qū)大小字段等。最后,寫DMA發(fā)送輪詢寄存器,將喚醒發(fā)送DMA,使其進入運行狀態(tài)。

        當發(fā)送DMA進入運行狀態(tài),DMA將從DMA發(fā)送描述符表基址寄存器或者當前發(fā)送描述符寄存器中獲取當前描述符的DMA地址,訪問系統(tǒng)主存,獲取當前描述符DES2字段指向的skb緩沖區(qū)的地址,將緩沖區(qū)中的數據DMA到網絡控制器的發(fā)送FIFO中,并通過PHY收發(fā)器將數據發(fā)送到網絡上。

        3 網絡驅動優(yōu)化技術

        網絡驅動優(yōu)化技術有:IP報文頭部對齊,NAPI,GSO,DMA分散聚集等。

        在飛騰處理器平臺上,重點介紹三點。

        3.1 IP報文頭對齊對齊

        在接收過程中,驅動向內核申請skb緩沖區(qū)后,需要調用skb_reserve(skb,2),使得skb->data向后移動兩個字節(jié),因為mac頭長度是14個字節(jié),skb->data前面空置的2個字節(jié)加上mac頭長度正好是16個字節(jié),使得接下來的IP報文的起始地址是4字節(jié)地址對齊,這樣做使得內核在后續(xù)對IP報文訪問時使用了對齊的地址,減少了很多的數據拷貝,提高了性能。但這樣做,會使得對緩沖區(qū)數據進行DMA流式映射時生成的DMA地址不對齊,可能會對DMA操作產生影響,但此款網卡適配器的DMA對緩沖區(qū)的地址對齊沒有很嚴格的要求,通過硬件處理將性能的降低減到了最小,故采用IP報文頭對齊,在這點上對于網絡性能的提高是很顯著的。

        3.2 NAPI技術

        對于高速網絡設備而言,單純采用中斷驅動的方式,CPU可能在短時間內接收到大量密集的網絡數據包,如果每一個進入的數據包都向CPU產生一次中斷請求,對這些請求的單獨處理無疑會造成CPU資源的浪費甚至導致系統(tǒng)癱瘓。

        NAPI的設計思想是使用中斷和輪詢相結合的方式接收數據包,發(fā)揮各自的優(yōu)勢。當有數據包到達觸發(fā)中斷,在中斷處理程序中調用_stmmac_schedule()函數關閉接收中斷,系統(tǒng)對數據包的接收進入輪詢模式,調用輪詢函數接收數據包。在輪詢函數中,設置了一個接收數據包的閥值,每次輪詢函數接收到數據包達到這個閥值時,輪詢函數將返回,等待下一次的輪詢。當一次輪詢接收的數據包小于這個閥值,退出輪詢收包模式,開啟接收中斷,進入中斷收包模式。NAPI通過輪詢期間關閉中斷,實現了中斷緩和,減少了內核處理中斷的壓力,變相提高了性能。

        3.3 GSO技術

        TSO(TCP Segmentation Offload)是一種利用網卡分割大數據包,減小CPU負荷的一種技術,也被叫做LSO(Large segment offload),如果數據包的類型只能是TCP,則被稱之為TSO。

        TSO是使得網絡協(xié)議棧能夠將大塊 buffer 推送至網卡,然后網卡執(zhí)行分片工作,這樣減輕了CPU的負荷,但TSO需要硬件來實現分片功能;而性能上的提高,主要是因為延緩分片而減輕了CPU的負載,因此,可以考慮將TSO技術一般化,因為其本質實際是延緩分片,這種技術,在Linux中被叫做GSO(Generic Segmentation Offload),它比TSO更通用,原因在于它不需要硬件的支持分片就可使用,通過將分片的執(zhí)行,放在將數據推送的網卡的前一刻,也就是在調用驅動的stmmac_xmit函數前,達到延緩分片的目的,最終提高了性能。

        4 測試

        硬件環(huán)境:FT1000A采用內置網卡與X86機器的BCM57780網卡互連。

        軟件環(huán)境:測試工具為iperf。

        由測試結果可得:新設計的驅動較之前的驅動在接收和發(fā)送數據的速率上有很大的提升,其中IP報文頭部對齊對TCP/UDP接收性能有較大提升,但由于IP報文頭對齊導致的DMA地址不對齊造成了一定的性能損失,接收的性能離千兆的性能還有差距;GSO功能對TCP發(fā)送性能有大幅度提升;UDP發(fā)送速率,峰值原本已經接近X86上千兆網卡性能。

        5 結束語

        本文詳細闡述了國產飛騰處理器SOC網絡適配器驅動的設計實現以及對其進行的優(yōu)化,雖然網卡在此驅動程序的驅動下,網絡性能已經幾乎達到了千兆網絡性能要求,但與X86千兆網卡的網絡性能還是有差距的,希望通過后續(xù)學習和研究,能進一步提升國產飛騰處理器平臺的網絡性能。

        參考文獻:

        [1]博韋,西斯特等.深入理解linux內核(第三版)[M].北京:中國電力出版社,2007.

        [2]宋寶華.linux設備驅動開發(fā)詳解[M].北京:人民郵電出版社,2010:364-369.

        [3]曹桂平等.linux內核網絡棧源代碼情景分析[M].北京:人民郵電出版社,2010.

        [4]莫爾勒,郭旭等.深入Linux內核架構[M].北京:人民郵電出版社,2010.

        [5]科波特,魏永明等.LINUX設備驅動程序(第3版)[M].北京:中國電力出版社,2006.

        [6]拉芙,陳莉君等.Linux內核設計與實現[M].北京:機械工業(yè)出版社,2011.

        [7]趙軍.linux下網絡性能優(yōu)化方法解析[EB/OL].http://www.ibm.com/developerworks/cn/linux/l-cn-network-pt/,[2010-11-25/2013-07-22]

        [8]馮國進.linux驅動程序開發(fā)實例[M].北京:機械工業(yè)出版社,2011.

        [9]宋敬彬,孫海濱.linux網絡編程[M].北京:清華大學出版社,2010.

        [10]劉衛(wèi)軍.網絡性能優(yōu)化(NAPI)[EB/OL].http://blog.csdn.net/ustc_dylan/article/details/6116336,[2011-01-04/2013-07-22].

        作者簡介:周浩(1988.07.05-),男,山西晉中人,碩士,在讀學生,研究方向:操作系統(tǒng)。

        作者單位:國防科學技術大學計算機學院,長沙 410073

        国产伦一区二区三区色一情| 亚洲国产成人影院在线播放| 在线观看精品视频网站| 精品久久久久久久久久中文字幕| 91天堂素人精品系列全集亚洲| 日本高清一区二区在线观看| 穿着白丝啪啪的av网站| 亚洲中文字幕无码一久久区| 亚洲色在线视频| 中文乱码字幕高清在线观看| 中文乱码字幕人妻熟女人妻| 亚洲第一幕一区二区三区在线观看| 波多野结衣的av一区二区三区| 亚洲午夜精品久久久久久人妖| 91热久久免费精品99| 国产精品视频白浆免费看| www夜片内射视频在观看视频| 国产又色又爽又黄刺激在线视频| 亚洲爆乳无码专区| 亚洲精品国产主播一区二区 | 国产午夜无码片在线观看影院| 无码aⅴ在线观看| 调教在线播放黄| 亚洲精品尤物av在线网站| 精品中文字幕精品中文字幕 | 久久综合精品国产二区无码| 欧美刺激午夜性久久久久久久| 久久精品国产亚洲av热九九热| 精品在线视频在线视频在线视频| 久久精品国产色蜜蜜麻豆| 国产精品乱一区二区三区| 精品中文字幕久久久人妻| 久久精品人人做人人爱爱| 国模无码视频一区| 视频网站在线观看不卡| 青青草国产手机观看视频| 看av免费毛片手机播放| 在线免费欧美| 青青草视频在线观看精品在线 | 午夜福利92国语| 男人深夜影院无码观看|