搜尋
首頁運維安全如何實現SylixOS網路卡驅動最佳化

1. 開發環境

  • 作業系統:SylixOS

  • #程式設計環境:RealEvo-IDE3.1

  • 硬體平台:AT9x25開發板

1. 技術實作

在編寫完成了網卡驅動,可以實現基本的發送與接收功能之後,本篇文章將簡單介紹如何優化網卡驅動的發送功能,提高發送的吞吐量和即時性。

1.1      網卡傳送吞吐量最佳化

網路卡驅動可透過零拷貝的方式來提升送運吞吐量。驅動裡呼叫enetCoreTx發送函數來實現乙太網路封包的發送。這個函數接收兩個參數,分別是netdev結構體類型指標和pbuf類型指標。 enetCoreTx會將pbuf指向的內容拷貝到發送描述符指向的DMA發送buffer中。這次拷貝對發送吞吐量造成一定影響。

因此,在最佳化時,可以將DMA描述符指向的buffer位址改為pbuf結構體成員payload指向真正需要發送封包的位址。具體實現如程序清單 21。

程式清單 21零拷貝最佳化

  if (usLen == pstPbuf->len) {
        if ((pstPbuf->type != PBUF_REF)&& (pstPbuf->type != PBUF_ROM)) {
            bCopy = LW_FALSE;
        }
    }
 
    if (!bCopy) {
        pbuf_ref(pstPbuf);
       pEnet->pTxRing[iHead].iTxBaddr = (UINT32)pstPbuf->payload;
        API_CacheFlushPage(DATA_CACHE,pstPbuf->payload, pstPbuf->payload, LW_CFG_VMM_PAGE_SIZE);
    } else {
       pEnet->pTxRing[iHead].iTxBaddr =(UINT32)pEnet->NET_pTxInfo[iHead].TXI_pvDmaAddr;
        pbuf_copy_partial(pstPbuf,(PVOID)(pEnet->pTxRing[iHead].iTxBaddr), usLen, 0);
    }

上述程式碼中的,bCopy變數表示是否需要進行零拷貝操作。

使用零拷貝最佳化時,需要注意以下幾個面向:

        1.  pbuf類型為REF或ROM類型時,不能進行零拷貝。

        2.  進行零拷貝時需要呼叫API_CacheFlushPage函數,清除cache。同時,也需要呼叫          pbuf_ref函數,使得pbuf的成員ref值加1。

   3. 呼叫pbuf_ref函數後,需要在中斷裡將進行零拷貝的pbuf手動free掉。 free時呼叫函數pbuf_free。     但是因為這個操作是在中斷中進行,因此如果在中斷服務函數中直接呼叫這個函數的話,會報      錯。具體實作時,可以採用工作佇列的方式,將需要釋放pbuf的操作加到工作佇列中進行。

2.2      網卡驅動即時發送

網卡驅動發送時,需要判斷目前的描述子是否可以用來進行封包的傳送,一般的操作是透過一個while循環來等待,當有描述符可以使用時,再進行傳送操作。這樣會對即時性有一定影響。

這裡可以採用信號量的方式來對發送流程進行最佳化,從而優化網路發送的即時性。

首先,在網路初始化的時候,建立一個數數型訊號量。數值就為目前設定的發送描述符的個數。

當需要進行傳送時,需要先呼叫API_SemaphoreCPend函數取得訊號量,成功取得後才能進行下面的傳送操作。

同樣的,在中斷服務函數裡,如果偵測為傳送成功中斷,則需要呼叫API_SemaphoreCPost函數釋放訊號量。

具體實作如程式清單 22 ,程式清單 23所示。

程式清單 22取得信號量

#ifAT_TX_REALTIME > 0
    API_SemaphoreCPend(pEnet->NET_hTxRdyCnt,LW_OPTION_WAIT_INFINITE);
#else

程式清單 23釋放信號量

#ifAT_TX_REALTIME > 0
     API_SemaphoreCPost(pEnet->NET_hTxRdyCnt);
#endif

以上是如何實現SylixOS網路卡驅動最佳化的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:亿速云。如有侵權,請聯絡admin@php.cn刪除

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),