SylixOS ネットワーク カード ドライバーを最適化する方法
1. 開発環境
オペレーティングシステム: SylixOS
プログラミング環境: RealEvo-IDE3.1
ハードウェア プラットフォーム: AT9x25 開発ボード
1. 技術的な実装
ネットワーク カード ドライバーが作成され、基本的な送受信機能が実現できるようになった後, この記事では、ネットワークカードドライバーの送信機能を最適化し、送信のスループットとリアルタイムパフォーマンスを向上させる方法を簡単に紹介します。
1.1 ネットワーク カードの送信スループットの最適化
ネットワーク カード ドライバーは、ゼロ コピーを通じて送信スループットを向上させることができます。ドライバーは enetCoreTx 送信関数を呼び出して、イーサネット メッセージの送信を実現します。この関数は、netdev 構造体型ポインタと pbuf 型ポインタの 2 つのパラメータを受け取ります。 enetCoreTx は、pbuf が指すコンテンツを、送信記述子が指す DMA 送信バッファにコピーします。このコピーは、送信スループットに一定の影響を与えます。
したがって、最適化するときに、DMA 記述子が pbuf 構造体メンバーのペイロードに指すバッファ アドレスを、メッセージを実際に送信する必要があるアドレスを指すように変更できます。具体的な実装はプログラムリスト 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 関数を呼び出してキャッシュをクリアする必要があります。同時に、pbuf_ref 関数を呼び出して、pbuf のメンバー ref 値を 1 ずつ増やす必要もあります。
3. pbuf_ref 関数を呼び出した後、割り込み内のゼロコピー pbuf を手動で解放する必要があります。空きの場合は関数 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 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









