目录
1. 开发环境
1. 技术实现
1.1      网卡发送吞吐量优化
2.2      网卡驱动实时发送
首页 运维 安全 如何实现SylixOS网卡驱动优化

如何实现SylixOS网卡驱动优化

May 14, 2023 am 11:16 AM
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

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)