Linux性能优化-网络篇

文章目录

  • 前言
  • 一、网络性能指标
  • 二、网络基准测试
    • 如何评估系统的网络性能
    • 各协议层的性能测试
      • 转发性能
      • TCP/UPD性能
      • HTTP性能
      • 应用负载性能
  • 三、网络指标的获取
    • 查询带宽
    • 网络吞吐和PPS
    • 网络连通
  • 总结


前言

如何评价一套新环境内主机和应用的网络性能,有哪些指标需要注意,如何建立网络指标基准。当系统上线后,服务运行过程中,遇到网络问题如何通过指标排查网络问题。


一、网络性能指标

  • 带宽,表示链路的最大传输速率,单位通常为b/s (比特/s)。常用的带宽有1000M、10G、40G、100G等。
  • 吞吐量,表示没丢包时的最大数据传输速率,单位通常为b/s (比特/s) 或者B/s(字节/秒)。
    吞吐量受带宽限制,而吞吐量/带宽,就是网络使用率
  • 延时,表示从网络请求发出后,一直到收到远端响应,所需要的时间延迟。在不同的场景中,这一个指标会有不同的含义。比如,他可以表示,建立连接需要的时间(比如 TCP握手延时),或一个数据包往返所需的时间(比如 RTT)(ping命令)
  • PPS, Packet Per Second (包/秒) 的缩写,表示以网络包为单位的传输速率。PPS通常用来评估网络的转发能力,比如硬件交换机,通常可以达到线性转发。而基于Linux服务器的转发,则容易受网络包大小的影响。通常用在需要大量转发的场景。对于TCP或者WEB服务来说,更多会用并发链接数和每秒请求数(Query per Second)等指标。
  • 并发连接数(TCP连接数量)
  • 丢包率
    端到端的数据包丢失。丢包率是指测试中所丢失数据包数量占所发送数据组的比率,
    计算方法为:{(发送报文-接收报文)/发送报文}*100%。
  • 重传率

二、网络基准测试

如何评估系统的网络性能

  • 基于HTTP或者HTTPS的Web应用程序,显然属于应用层,需要测试HTTP/HTTPS的性能;
  • 对于大多数游戏服务器来说,为了支持更大的同时在线人数,通常会基于TCP或UDP,与客户端进行交互,这时就需要我们测试TCP/UDP的性能;
  • 还有一些场景,把Linux作为一个软交换机或者路由器来使用,这种情况下,更关注网络包的处理能力即PPS, 重点关注网络层的转发性能。

各协议层的性能测试

转发性能

网络层,关注的是网络包的处理能力,即PPS。Linux内核自带的pktgen,可以测试这个指标。

TCP/UPD性能

iperf和netperf是最常用的网络性能测试工具,测试TCP和UDP的吞吐量。
传输层,我们关注的是TCP、UDP的传输层协议的工作状态,比如TCP连接数、TCP重传、TCP错误数等。

HTTP性能

测试HTTP性能,有大量工具可以使用,如ab、webbench等。

应用负载性能

iperf或者ab等测试工具,得到的TCP、HTTP等性能数据,和用户实际请求很可能不一致,因为用户请求往往附带各种负载(playload), 而这些负载会影响Web应用程序内部处理逻辑,从而影响最终性能。
为了得到应用程序的实际性能,需要性能工具可以模拟用户的请求负载,可以用wrk、TCPCopy Jmeter 或者 LoadRunner等实现。

三、网络指标的获取

如何通过命令查下当前主机的网络指标信息,和网络状况呢。

查询带宽

一般由网卡指标确定,可以通过 ethtool eth0 查询。
如下图,Speed: 20000Mb/s,注意这里的单位是b

[root@yks ~]# ethtool bond0
Settings for bond0:
	Supported ports: [ ]
	Supported link modes:   Not reported
	Supported pause frame use: No
	Supports auto-negotiation: No
	Supported FEC modes: Not reported
	Advertised link modes:  Not reported
	Advertised pause frame use: No
	Advertised auto-negotiation: No
	Advertised FEC modes: Not reported
	Speed: 20000Mb/s
	Duplex: Full
	Port: Other
	PHYAD: 0
	Transceiver: internal
	Auto-negotiation: off
	Link detected: yes

网络吞吐和PPS

可以通过sar命令获取网络统计信息。

[root@yks ~]# sar -n DEV 1 | grep -E 'bond0|IFACE'
10:18:58 PM     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s   %ifutil
10:18:59 PM     bond0     98.00    166.00     14.67     74.57      0.00      0.00      0.00      0.00

rxpck/s和txpck/s分别是接收和发送的PPS, 单位是包/秒。
rxkB/s和txkB/s分别是接收和发送的吞吐量,单位是KB/秒。
rxcmp/s和txcmp/s分别是接收和发送的压缩包数量,单位是包/秒。
%ifutil是网络接口的使用率,半双工模式下为(rxkB/s+txkB/s)/Bandwidth,而全双工模式下为
max(rxkB/s+txkB/s)/Bandwidth。

网络的吞吐量很多时候也可以结合监控查看网卡的读取和写入的数值。

网络连通

主机网络连通性,最常用的是基于ICMP协议的ping命令。
服务连通性,telnet也可以用来检查tcp连通性。


总结

本节是网络篇的第一节内容,主要是介绍了理论性的内容。

你可能感兴趣的:(Linux性能优化原理和实战,linux,性能优化,网络,网络学习,交付运维)