Linux系统网络性能实例分析
由于TCP/IP是使用最普遍的Internet协议 , 下面只集中讨论TCP/IP 栈和以太网(Ethernet) 。 术语 LinuxTCP/IP栈和 Linux网络栈可互换使用 , 因为 TCP/IP栈是 Linux内核的组成部分 , 也被看作是 Linux默认的网络栈 。
一、实例分析中使用的基准测试
1、 NetBench
NetBench是一种 Ziff-Davis基准测试 ,可以测量文件服务器对来自客户端(向服务器提交网络文件操作的请求)的远程文件 I/O请求进行处理的程度 。 NetBench报告关于吞吐率和客户响应时间的测量结果 。 该基准测试主要用于测量 LinuxTCP/IP发送端(NetBench服务器)的吞吐率性能 , 因为对于该基准测试而言 , 接收端客户是 32位的 Windows客户 。
2、 Netperf3 Netperf3是一种测试 Linux网络吞吐率和网络扩展性的微型基准测试 。 该版本提供了多线程支持 。IBM公司对 Netperf3的功能加以增强 , 使其包含了对多网卡(NIC)和多客户的支持 。 添加这两个特性是为了测量Linux网络 SMP和网卡的扩展性 。IBM公司还添加了另一个可旁路 TCP/IP栈的接口 , 用于测试网络驱动程序 。Netperf3所测的度量是吞吐率(以每秒兆位为单位) 。
二、Linux 2.6 内核中的增强机制
在当前的计算机系统里 , 互连总线速度和内存访问延迟并没有与处理器速度(GHz)和网络带宽容量(吉比特网络)成比例增长 。 减少对互连总线和内存等相对慢速部件的访问次数通常可以改进系统(包括网络)的性能 。 在 TCP/IP栈中 ,作为传输和接收过程的组成部分 , 会发生多次数据复制操作 , 从而在互连总线中产生巨大流量 。 这些流量引起访存次数的增加 , 从而导致低下的网络性能和扩展性问题 。 在 SMP 和 NUMA系统中 ,额外的高速CPU与相对慢速的互连总线之间的矛盾进一步加剧了扩展性问题。总线速率、总线吞吐率以及工作负荷生成的总线流量对于改进 Linux网络栈的性能至关重要 。 为了消除或减少数据流经总线的次数以及为了减少访存次数而对 Linux网络栈实施的任何改进都可以改善 Linux软件栈性能 。 下面分析2.6内核实现的一些增强特性 , 这些特性减少了在 TCP/IP 协议栈中执行的复制次数 , 从而提高了网络栈性能 。 这些增强特性具体包括以下内容:
- SendFile支持
- TCP分段卸载(TCP SegmentationOffloading ,TSO)支持
- 进程和 IRQ亲合度
- 网络设备驱动程序 API(NAPI)
- TCP卸载引擎(TCP OffloadEngine ,TOE
Linux 2.4网络栈支持 SendFileAPI , 允许通过直接内存访问(DMA)机制将应用数据从文件系统缓冲区 cache直接发送到网卡缓冲区 。通过使用网络栈和网络接口卡(NIC)中的 Zerocopy功能支持 , SendFileAPI可以将应用数据通过 DMA直接发送到网络上进行传输 , 而不必执行通常的用户空间到内核空间的复制操作 。 在典型的无 SendFile支持的情况下 ,应用程序发送文件的步骤如下:
- 分配一个缓冲区 。
- 将文件数据复制到缓冲区中(首先将文件数据从磁盘复制到内核缓冲区 cache , 然后再复制到应用程序的缓冲区) 。
- 对复制到内核 socket缓冲区中的数据执行发送操作 。
- 获取到达 NIC的 DMA 。
Linux 中对 SendFile API 的支持以及在 Linux TCP/IP 栈和网络驱动程序中对Zerocopy的支持实现了在 TCP/IP 数据处理过程中的单次复制机制 。 SendFile对于应用程序是不透明的 , 因为应用程序需要实现这个 API以便利用该特性 。 2、 TCP分段卸载
对于网络报文的每次 TCP/IP传输或接收过程 , 当数据被传输到 NIC或者从 NIC接收时会发生多次 PCI总线访问操作 。 通过使用 NIC和 Linux TCP/IP栈中的 TCP分段卸载(TCPSegmentation Offloading ,TSO)特性 , 对于以太网而言 , 发送端的 PCI总线访问次数减至对于每个 64KB大小缓冲区访问一次而不是对每个网络报文(1518B)都访问一次 。如果应用程序提供的缓冲区长度大于帧长度 ,则 TCP/IP栈将其划分成多个帧 , 为 每个帧都添加一个 TCP/IP头部 , 并将其通过DMA映射到 NIC 。如果使能了 TSO特性 ,则为 64KB数据封装一个伪报文头 ,并通过 DMA将其发送至 NIC 。网络适配器的控制器将这个 64KB数据块解析成标准的以太网报文 , 从而减少了主机的 CPU利用率和对 PCI总线的访问 。TSO通过降低 CPU利用率和提高网络吞吐率来改善效率 。 针对该任务专门设计了网络芯片(network silicon) 。 在 Linux以及针对 TSO而设计的Gigabit Ethernet芯片中激活 TSO特性能够增强系统性能 。
- 闲鱼|电诉宝:“闲鱼”网络欺诈成用户投诉热点 Q3获“不建议下单”评级
- 峰会|这场峰会厉害了!政府企业专家媒体共议网络内容生态治理
- 网络覆盖|爱立信:2020年底,将有超过10亿人口获得5G网络覆盖
- 缩小|调整电脑屏幕文本文字显示大小,系统设置放大缩小DPI图文教程
- Win10系统桌面|手机桌面秒变Win10电脑系统,这波操作太给力了!
- 系统|电子邮箱系统哪家好?邮箱登陆入口是?
- 星期一|亚马逊:黑五与网络星期一期间 第三方卖家销售额达到48亿美元
- 车轮旋转|牵引力控制系统是如何工作的?它有什么作用?
- 机器人|网络里面的假消息忽悠了非常多的小喷子和小机器人
- iphone12|菜鸟网络原副总裁被捕!此前多名高管被判刑