网卡开开门之从青涩少女到成熟少妇

来源:互联网 发布:找工作软件软件排行榜 编辑:程序博客网 时间:2024/05/01 21:32

、#

那不太遥远的往事青春

说到青涩少女,脑海里首先浮现的是当年的神仙姐姐刘亦菲,当年的神仙姐姐真是仙气十足,天龙八部里面的王语嫣,神雕侠侣里面的小龙女,仙剑中的赵灵儿无不见证了刘亦菲的美,那是一种少女才有的美丽,美的超凡脱俗,不食人间烟火,当时成了很多人的梦中情人。
抛开神仙姐姐,说到网卡中的青涩少女,DM9000应该是怎么也绕不过去的一个。也许不同年代的人有着不同大看法,正如冯小刚说许晴是他那一带人的梦中情人,可是在我们80,90这一代,至少是在我看来,许晴就只是个大妈而已,只不过保养的还不错。DM9000对我而言,是启蒙,是初恋,是永恒而美好的回忆。
就我而言,首次的接触的网卡是DM9000,是在大三的时候,距离现在有5,6年的样子,现在回头再看看DM9000,才发现青涩的不是DM9000,而是当年的自己。不过相比于目前越来越强悍的网卡,DM9000也算是略显青涩,我们就从DM9000开始。

青涩的DM9000

了解一款网卡,首先当然要看他的feature list,DM9000的feature list如下:

  1. 支持10/100M。目前网卡基本上最少都是千兆网卡,DM9000在这点上已经明显落后了。
  2. 支持流控功能。所谓流控就是当网卡来不及处理对端发过来的报文时,通过发送pause帧到对端,对端设备如果支持流控的话,就会暂时停止发送报文,过一段时间再发送报文;当然如果对端不支持流控,整个流控机制就玩不转了。
  3. 内置16K SRAM。这16K的数据有3K用来存放要发送的数据,13K用来存放接收的数据,发送接收的报文都直接放在内部SRAM里面,简单,粗暴,限制大,很明显DM9000的DMA是非常弱的。后面我们可以看到目前成熟的网卡是如何优雅的处理报文收发的。
  4. 支持checksum的生成和校验。这个主要是为了保证报文的一致性,当然软件上做也可以,网卡来做就减轻了CPU的负担,这是个简单而实用的特性。
  5. 支持节电模式。DM9000这个功能的实现看起来是一个私有的实现方案,目前的节电方案基本都采用EEE。
  6. 支持MII接口。MII只支持10M/100M模式,且是并行接口,这个也挺落后了,目前的成熟网卡基本上都支持多种接口模式。将并行数据转换成串行数据是目前很多网卡都会提供的一种方案,这需要加入一个并/串互转的模块,学名叫serdes。串行接口的好处显而易见,管脚少,简单方便,速度还快。

从DM9000的这份功能清单可以看出来,DM9000真的是非常的简单,一如未出阁的少女,处处透露着未经世事的清纯,简单。简单是一种美,人们可能因为DM9000的简单之美而喜爱她,然而对于CPU来说却不见得如此。因为网卡做的事情越少,就意味着CPU需要做的事情就越多,CPU资源是非常昂贵的,网卡或者说所有的控制器理应把自己能做的事情都处理好,以将CPU从繁重的任务中解脱出来。所以,目前比较成熟的网卡实现了很多CPU offload功能,将之前需要CPU处理的事务包揽过来,由网卡自身来处理,如支持TCP/IP协议栈,PTP,黑白名单过滤,哈希过滤,CRC,Pading,此外还有QOS功能,为某些报文提供优质服务,Flow Ctrl提供流控方案,EEE提供节电方案。当然DM9000也支持了其中部分的特性,但是总的来说,她还不够成熟。

光彩照人ST MAC 

从名字就可以看出来,这是ST的一款网卡。实际上这款网卡是牛逼烘烘的sysnopsys设计的,ST实际上是买了sysnopsys的IP授权,然后做了一层封装,从而才有了ST MAC。
如果将DM9000比作未出阁的少女,那么ST MAC无疑是善解人意的少妇。她不仅能做好自己分内的事,如收发数据,还能帮CPU分担不是不少麻烦事。要了解ST MAC,还是得从ST MAC的特性列表开始:
1. 支持10M/100M/1000M。1000M基本上是标配了,还不错。
2. 支持MII,RMII和RGMII接口。虽然接口模式增加了两个,不过还是全部都是并行接口。
3. 支持Flow Ctrl。
4. 支持帧长度检查,并丢弃不符合规定长度的报文。
5. 支持对发送帧SFD自动添加和接受帧SFD自动删除。
6. 支持是否接收广播帧,多播帧和单播帧。
7. 提供可配置的MAC地址过滤功能。

这份列表只是一份MAC层的特性列表,报文过了MAC层之后会经过TOE层,TOE模块主要实现对TCP/IP协议栈的加速处理。实际上,MAC层只是实现了最基本的报文收发功能,外加一些二层协议栈的offload。DMA模块大可以将MAC层收到的报文直接接收进来或者将用户配置的报文直接通过MAC层发出去,这样的话就跟DM9000差别不大了。然而ST MAC善解人意的地方就在于她实现了TOE层,之前很多需要CPU做的事情,被她接手过来了。当然,她只是做了部分事情,CPU也不能啥事都不管。
TOE模块的功能列表如下:
8. 支持最多254个TCP加速处理。
9. 支持TCP协议和IP协议硬件加速。也就是说ST MAC本身可以直接解析和封装TCP/IP报文。
10. 支持VLAN报文解析和封装。
鉴于我自己对网络协议栈不太了解,这里只是列了几个我自己看的懂的特性。
除了这两份特性列表之外,ST MAC在存储收发报文的方式上,实现了一种更加善解人意的方案。DM9000收发的报文都存储在DM9000内部的RAM中,这种方案的缺点显而易见,内部RAM太大增加成本,太小影响性能。ST MAC或者说目前大多数成熟的网卡采用一种称为报文描述符的方案。报文描述符是对一个frame的描述,多个报文描述符组成一个环形链表。对于发送报文来说,CPU将报文放在内存,并将报文的起始物理地址及报文长度填充到报文描述符;报文描述符自身可以存放在网卡内部也可以存放在内存,后者是一种更为通用的做法,只需要将第一个报文描述符的起始地址告诉网卡就可以了;网卡识别报文描述符,将报文从内存取出,并通过GMAC发送出去,最后网卡回写该报文描述符,一般来说回写的是发送的结果,如发送的报文长度,是否有错误等信息。对于接收报文来说,报文首先进入网卡RX FIFO,然后网卡首先解析报文,并识别接收描述符,根据接收描述符,将报文送到内存,并将回写接收描述符,一般来说会回写接收报文的长度,是否出错,以及TCP/IP协议栈解析结果。采用这种方案有很好的扩展性,如果内存资源充裕,可以缓存更多的报文,如果内存资源紧缺则可以适当减少报文描述符的数量。不过这种方案有两点需要特别注意,一是要注意虚拟地址和物理地址的转换,CPU看到的是虚拟地址,DMA看到的是物理地址;二是要认识到Dcache的存在,CPU读写数据首先操作的是Dcache,而DMA是直接操作内存的。

成熟优雅的eTSEC

eTSEC是freescale设计的一款片上网卡,不过现在freescale被NXP收购了,所以这款网卡应该冠名NXP了。相比于ST MAC,eTSEC更显成熟一些。她表面看起来略微复杂,不太好接近,然而她的复杂源于她见证了网卡发展历史中遇到的种种需求,慢慢探索,你会发现她成熟而优雅,包容又很开放。
同样,首先来看下eTSEC的功能列表:
1. 支持10M/100M/1000M。
2. 支持多种接口模式,MII,RMII,RGMII和SGMII。其中SGMII属于串行接口。
3. 支持TCP/IP协议栈。相比于ST MAC来说,eTSEC的TCP/IP协议栈功能更加丰富。
4. 支持QoS。发送和接收各八条数据通道,每条通道权限不同,如果某类报文优先级比较高,可以让其走高优先级的通道,在拥堵状况下,会首先保证高优先级通道的报文被接收或发送。
5. 支持MAC地址识别,并根据MAC地址做黑白名单过滤或者哈希过滤。黑名单过滤是指加入黑名单的报文会被过滤掉,白名单过滤是指加入白名单的报文才可以接收,哈希过滤是指先对MAC地址过哈希计算,然后根据哈希值决定是否接收报文。这些过滤机制主要是为了防止某些不受欢迎的报文占用内存及CPU资源。
6. 支持PTP功能。PTP功能主要是在接收和发送报文的时候为报文打上精准的时间戳,以同步PTP域中所有网络节点的时间。具体需要参考PTP协议。
7. 此外,eTSEC还非常体贴地提供了中断结合功能。一般情况下,网卡收到一个报文就会通过中断通知CPU,CPU开始接收报文;同样,当网卡发送完一个报文后,也会通过中断通知CPU,CPU进而判断报文的发送情况以及回收资源。eTSEC提供了一种方案,在一段时间内,接受或者发送多个报文才会中断CPU,否则要在超时后才中断CPU。这可以在一定程度上减少CPU被中断的次数。

从DM9000到eTSEC,基本见证了网卡成熟的过程。当然,比DM9000更简单的网卡也有,比eTSEC更强大高端的网卡也不会少。本文旨在对我自己这几年所接触的网卡做一次剖析,并希冀帮助初入网卡门径的少年们打开网卡世界的大门,至于大门后面的世界,需要各自去探索了。

原创粉丝点击