6)小结
本节所涉及的概念有文件储结构(包括索引节点和目录项)、虚拟文件系统VFS、Linux I/O分类和磁盘的性能指标。涉及到的命令有stat、 df、iostat、 cat /proc/slabinfo、slabtop、pidstat和iotop。
在大学的时候,都学过网络的协议栈。OSI为7层,TCP/IP模型为4层,其对应关系如图3-32所示。
图3-32 OSI 7层协议与TCP/IP模型4层协议对照表
OSI模型仅为教学提供,在日常工作中使用TCP/IP协议。在Linux中TCP网络包如图3-33所示。
图3-33 Linux中的TCP网络包
在应用层仅为具体要用到的应用数据;到了传输层在头部加上TCP头信息;向下进入网络层,在TCP头信息头部再加上IP头信息;最后到达网络接口层,在数据包的头尾部各加上帧头和帧尾两部分。
在TCP/IP的传输过程中,发送方从上而下一层一层地在应用数据前后加上头信息与尾信息,接受方从下而上一层一层地把头信息与尾信息去除,直到在应用层只剩下应用信息为止,如图3-34所示。
图3-34 TCP/IP数据包的发送与接受
Linux的网络栈如图3-35所示。
图3-35 Linux的网络栈
同磁盘一样,网络也有对应的性能指标。
•带宽。
表示链路的最大传输速率。单位通常为b/s(比特/秒)。
•吞吐量。
表示没丢包时的最大数据传输速率。单位通常为b/s(比特/秒)或者 B/s(字节/秒),吞吐量受带宽限制,而吞吐量/带宽,也就是该网络的使用率。
•延时。
表示从网络请求发出后,一直到收到远端响应,所需要的时间延迟。在不同场景中,这一指标可能会有不同的含义。比如,它可以表示,建立连接需要的时间(比如 TCP 握手延时)或一个数据包往返所需的时间(比如 RTT)。
•PPS。
是 Packet PerSecond(包/秒)的缩写,表示以网络包为单位的传输速率。PPS 通常用来评估网络的转发能力,比如硬件交换机,通常可以达到线性转发(即PPS 可以达到或者接近理论最大值)。而基于Linux服务器的转发,则容易受网络包大小的影响。
•网络的可用性。
网络能否正常通信。
•并发连接数。
TCP 的并发连接数量。
•丢包率。
传输过程中丢包的数量与总包的数量的百分比。
•重传率。
重新传输的网络数据包占所有包的百分比。
# ifconfig ens33
ens33:flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.0.108 netmask 255.255.255.0 broadcast192.168.0.255
inet6 fe80::dacc:9183:6dd2:2c6e prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:55:10:1f txqueuelen 1000 (Ethernet)
RX packets 23667 bytes 34981398 (34.9 MB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 18467 bytes 1668920 (1.6 MB)
TX errors 0 dropped 0 overruns 0 carrier0 collisions 0
ifconfig是linux中用于显示或配置网络设备(网络接口卡)的命令,英文全称是network interfaces configuring。在这里。
•RUNNING。
表示这个网卡是连通的。
•mtu 1500。
表示MTU的当前值为1500。MTU为最大传输单元,其默认值为1500,MTU越大,需要的分包也就越少,自然网络吞吐能力就越好。
•inet 192.168.0.108 netmask255.255.255.0 broadcast 192.168.0.255。
表示当前的IPv4地址,子网掩码和广播地址。
•inet6 fe80::dacc:9183:6dd2:2c6e prefixlen 64 scopeid0x20<link>。
表示IPv6地址和子网掩码。
# ip -s addr show dev ens33
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP>mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 00:0c:29:55:10:1f brd ff:ff:ff:ff:ff:ff
inet192.168.0.114/24 brd 192.168.0.255 scope global dynamic noprefixroute ens33
valid_lft 6024sec preferred_lft 6024sec
inet6fe80::dacc:9183:6dd2:2c6e/64 scope link noprefixroute
valid_lft forever preferred_lft forever
RX:bytes packets errors dropped overrun mcast
1066174744 1153443 0 0 0 0
TX: bytes packets errors dropped carrier collsns
313697585 701189 0 0 0 0
root@ubuntu:/home/ebusiness#
linux的ip命令和ifconfig类似,但ip功能更为强大,并旨在取代ipconfig之意。
•LOWER_UP。
表示这个网卡是连通的。
•mtu 1500。
表示MTU为1500。
•inet 192.168.0.108/24 brd 192.168.0.255。
表示当前的IPv4地址,子网掩码和广播地址。
•inet6 fe80::dacc:9183:6dd2:2c6e/64 scope link noprefixroute。
表示IPv6地址和子网掩码。
在ifconfig、ip中其他参数如表3-14所示。
表3-14 ifconfig、ip中其他参数
参数 | 解释 |
---|---|
errors | 发生错误的数据包的数量,比如校验错误、帧同步错误等 |
dropped | 丢弃的数据包数,即数据包已经收到了 Ring Buffer,但因为内存不足等原因丢包 |
overruns | 超限数据包的数量,即网络 I/O 速度过快,导致 Ring Buffer 中的数据包来不及处理(队列满)而导致的丢包 |
carrier | 发生 carrirer 错误的数据包数,比如双工模式不匹配、物理电缆出现问题等 |
collisions | 碰撞数据包数 |
# sar -n DEV 1
Linux 4.15.0-66-generic (ubuntu) 12/11/2019_x86_64_(4 CPU)
12:45:31 AM IFACE rxpck/s txpck/s rxkB/stxkB/s rxcmp/s txcmp/s rxmcst/s %ifutil
12:45:32 AM ens33 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
12:45:32 AM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
sar命令配合-n参数可以查看网络的相关信息,有6个不同的开关:DEV、EDEV、 NFS、NFSD、SOCK和ALL 。DEV显示网络接口信息,EDEV显示关于网络错误的统计数据,NFS统计活动的NFS客户端的信息,NFSD统计NFS服务器的信息,SOCK显示套 接字信息,ALL显示所有5个开关。它们可以单独或者一起使用。这里的参数如表3-15所示。
表3-15 sar -nDEV参数
参数 | 含义 | 单位 |
---|---|---|
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(全双工模式下) | ||
Bandwidth 可以用 ethtool 来查询,它的单位通常是 Gb/s 或者 Mb/s,不过注意这里小写字母 b ,表示比特而不是字节。 |
ping命令通过ICMP协议查看网络的连通性和延时。
# ping 192.168.0.106 -c3
PING 192.168.0.106 (192.168.0.106) 56(84) bytes ofdata.
64 bytes from 192.168.0.106: icmp_seq=1 ttl=128time=0.280 ms
64 bytes from 192.168.0.106: icmp_seq=2 ttl=128time=0.208 ms
64 bytes from 192.168.0.106: icmp_seq=3 ttl=128time=0.351 ms
--- 192.168.0.106 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss,time 2007ms
rtt min/avg/max/mdev = 0.208/0.279/0.351/0.061 ms
•ttl。
表示生存时间,或者跳数。
•time。
表示往返延时。
•icmp_seq。
表示ICMP 序列号。
•rtt min/avg/max/mdev = 0.208/0.279/0.351/0.061 ms。
表示ttl的最小值为208ms、平均值为279ms、最大值为351ms以及平均偏差0.061 ms (mdev = SQRT(SUM(RTT×RTT) / N – (SUM(RTT)/N) 2,RTT(Round-Trip Time)。往返时延。是指数据从网络一端传到另一端所需的时间。时延由发送时延、传播时延、排队时延、处理时延四个部分组成)。