摘 要: 以太网接口因其具有标准开放、易于扩展、低成本等优点而在工业中得到了广泛应用。传输性能是以太网接口的一个关键参数,在一些时间敏感的领域设计中要予以考虑。通过使用DMA方式提升以太网接口的性能,并用PING包试验的方式进行了验证。结果表明,通过使用DMA可以显著地提升以太网接口的性能。
关键词: DMA;Cache;以太网;性能
0 引言
以太网作为一种计算机局域网组网接口标准,具有标准开放、高传输带宽、低成本、易于扩展和维护等特点,是当今应用最为普遍的局域网技术[1-3]。伴随着当今社会信息化程度的提高,人们需要处理的数据量越来越大,以太网接口的性能成为应用中需要考虑的关键因素之一[4]。本文研究了DMA技术对于以太网接口性能提升的作用,试验平台采用了S3C2410A处理器和AX88796以太网MAC芯片。
1 系统组成
试验系统采用了S3C2410A处理器和AX88796以太网MAC芯片。
S3C2410是Samsung公司生产的一款基于ARM公司ARM920T架构的通用处理器,其具有低成本、低功耗和高性能等优点,适用于对成本和功耗比较敏感的领域,如手持设备。该处理器片上集成了丰富的外设资源,包括Timer、UART、DMA、LCD控制器和NAND闪存控制器等,最高可运行主频为203 MHz[5]。
AX88796是一款基于IEEE802.3/IEEE802.3u局域网标准的NE2000兼容型快速以太网控制器芯片,内部集成有10/100 Mb/s自适应的物理层收发器和8 KB×16位的SRAM,支持MCS-51系列、80186系列以及MC68K系列等CPU。由于提供了与NE2000寄存器级兼容的接口,其驱动程序可以很方便地移植[6]。AX88796的功能框图如图1所示。
基于S3C2410和AX88796的以太网接口设计如图2所示。
2 基于DMA的性能提升设计
DMA(Direct Memory Access)是现代计算机的一种重要特性,它可以不依赖CPU实现系统中不同硬件子系统之间的数据交换。如果不使用DMA,中央处理器需要首先将数据从源地址拷贝到内部暂存器,然后再将其复制到目的地址。这个过程会一直占用CPU资源,CPU无法处理其他工作。而DMA方式直接在两个子系统间交换数据,不需要CPU的介入,CPU只负责启动而不参与数据传送过程,整个数据传输过程完全由DMA控制器硬件实现。这时,CPU可以同时做其他的工作而互不影响,提高了系统的运行效率。不难看出,在同等程度的处理器负担下,DMA是一种快速的数据传送方式。在实现DMA传输时,总线应该由DMA控制器直接控制,因此,在使用DMA时存在总线控制权转移问题。在DMA开始前,CPU要把总线控制权交给DMA控制器,在DMA数据传输结束后再把总线控制权交还给CPU。
为了提升以太网接口的性能,本设计引入了DMA数据传输方式,并将使用DMA与不使用DMA的性能进行了对比分析。本设计使用VxWorks嵌入式操作系统,软件开发环境为Tornado2.2。DMA主要应用于以太网驱动程序的数据收发部分。为了对比性能,分别对使用DMA与不使用DMA方式进行了试验。不使用DMA的数据收发程序如下:
for(Count=0;Count<(length>>1);Count++)
{
*pData=*(pDrvCtrl->base+ENE_DATA);
pData+=2;
}
for(count=0;count<(length>>1);count++)
{
*(pDrvCtrl->base+ENE_DATA)=*pData;
pData+=2;
}
使用PING包试验测试该驱动程序的性能,效果如图3所示。
为了提升以太网接口的传输性能,在驱动程序设计中使用了DMA方式,这样可以在不太耗费CPU资源的情况下完成系统和以太网接口的数据交换,从而显著地提升系统的性能。S3C2410片上集成了四通道的DMA引擎,可以完成系统总线和外设总线间的直接数据传输。S3C2410的各个DMA引擎支持单字节和4字节两种传输大小。为了效率最大化,本设计中采用了4字节传输模式,其传输时序如图4所示。
S3C2410的DMA引擎既可以通过软件方式启动,也可以通过外部DMA请求引脚启动。本设计中采用软件方式启动。要实现DMA传输,需要进行如下的一系列操作:
(1)配置DMA引擎的数据源初始地址,将数据源初始地址写入寄存器DISRC。对于以太网数据接收,数据源初始地址就是AX88796的数据寄存器地址;而对于数据发送,数据源初始地址就是包含待发送数据的内存地址。
(2)配置DMA引擎的数据源控制寄存器,包括数据源设备所在的总线(系统总线或者外设总线)以及地址增长方式。在本设计中,发送和接收的源设备都在系统总线上。而对于地址增长方式,在接收时,源地址为AX88796的数据寄存器地址,是固定不变的,所以要配置成不变的;在发送时,源地址在内存中,其地址是递增的,所以要配置成递增式。
(3)配置DMA引擎的初始目的地址,将初始目的地址写入寄存器DIDST。对于数据接收,初始目的地址就是内存中用于存储接收数据的地址;而对于数据发送,初始目的地址就是AX88796的数据寄存器地址。
(4)配置DMA引擎的目的地址控制寄存器,包括目的地址所在的总线(系统总线或者外设总线)以及地址增长方式。这里的配置可以参考数据源控制寄存器的配置。
(5)配置DMA引擎控制寄存器,配置包括传输单元大小(1 bit或者4 bit,本设计中使用4 bit)、触发方式(软件方式或者外部硬件引脚触发,本设计中使用的软件触发方式)以及传输次数。
(6)配置DMA引擎的触发寄存器以启动数据传输。
具体的驱动代码如下:
【数据接收】
DMA_DISRC=(pDrvCtrl->base+ENE_DATA);
DMA_DISRCC=1;
DMA_DIDST=pData;
DMA_DIDSTC=0;
DMA_DCON=(0x48500000|dataShortCount);
DMA_DMASKTRI=0x3;
【数据发送】
DMA_DISRC=pData;
DMA_DISRCC=0;
DMA_DIDST=(pDrvCtrl->base+ENE_DATA);
DMA_DIDSTC=1;
DMA_DCON=(0x48500000|dataShortCount);
DMA_DMASKTRI=0x3;
为了检验DMA传输方式的性能,这里同样采用了PING包试验的方式,具体PING包结果如图5所示。
由图可见,采用DMA传输方式后,以太网接口的性能得到了显著的提升。
3 结论
传输性能是以太网接口的一个关键参数,在进行系统设计时需要予以考虑。本设计中引入了DMA方式以提升以太网接口的性能,通过PING包试验证明了DMA可以显著地提升以太网接口的性能。
参考文献
[1] IEEE Computer Society. IEEE Standard 802.3[S].2002.
[2] 谢希仁.计算机网络[M].北京:电子工业出版社,2013.
[3] 严伟,潘爱民.计算机网络[M].北京:清华大学出版社,2012.
[4] 杨宏.基于END驱动IP层转发能力的提升方法[J].信息安全与通信保密,2007(1):156-160.
[5] SAMSUNG Electronics. S3C2410A user′s manual[Z]. 2004.
[6] ASIX Electronics Corporation. AX88796L user′s manual[Z].2002.