一般MySQL安装环境,很少进行硬件的调配。但为了调整服务器的最佳性能,有时也需要在硬件方面进行优化。下面介绍MySQL环境中如何优化网卡MTU。
网络MTU值介绍
MTU是网络调节的重要因素,通过调节MTU能够达到优化网络传输性能的效果。本文主要介绍了MTU的概念、MTU的作用、MTU在网络传输中的具体表现,并结合应用场景分析了MTU设置时需要注意的要点。
- MTU(Maximum Transmission Unit,最大传输单元)是网络通信中的一个重要参数,它定义了网络中能够传输的最大数据包大小,通常以字节为单位。这个参数直接影响到数据传输的速度和效率,因为它决定了网络设备在单次传输中能够携带的最大数据量。MTU的设置并非一成不变,它需要根据不同的网络环境进行调整,以确保最佳的传输效率和兼容性。
- MTU的影响:一个较大的MTU可以让网络设备在单次传输中携带更多的数据量,从而减少数据分组的数量,降低开销和延迟。然而,如果MTU设置得太小,会导致数据被分割成多个小分组进行传输,增加网络拥塞的可能性。不正确的MTU设置可能会导致网络性能问题,如数据传输失败。
- MTU的设置:在以太网中,MTU的默认值通常是1500字节,这个值是经过精心计算的,既能确保传输效率,又能避免网络拥塞。但在不同的网络环境下,最优的MTU值可能会有所不同。例如,在高速网络环境中,可能会采用更大的MTU值以提高传输效率;而在异构网络中,为了保证兼容性和可靠性,可能需要采用较小的MTU值。
- MTU与网络路径:当两个计算设备通过多个路由器、交换机和服务器进行通信时,需要考虑网络路径上所有设备的MTU。超过网络路径中任一点之MTU的数据包都会被分片,这会增加网络通信的延迟和低效率。因此,应当尽量避免数据包的分片。
- MTU与网络性能:正确理解和配置MTU对于确保网络的高效运行至关重要。不同厂商的设备对MTU的定义和分片机制可能有所不同,这可能导致网络问题。因此,对MTU进行合理的设置和调整是必要的。
不同链路介质类型的网络有不同的默认MTU值,以下是一些常见网络的默认值:
网络类型 | MTU(byte) |
---|---|
Ethernet | 1500 |
IEEE 802.3 | 1492 |
IEEE 802.4 | 8166 |
FDDI | 4352 |
Token Ring(16Mbps) | 17914 |
Token Ring(4Mbps) | 4464 |
X2.5 | 576 |
PPP | 296 |
在Linux类系统查看MUT值设置方式如下:
shell# ifconfig eth0 eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 172.17.27.48 netmask 255.255.192.0 broadcast 172.17.63.255 inet6 fe80::216:3eff:fe23:e2cc prefixlen 64 scopeid 0x20<link> ether 00:16:3e:23:e2:cc txqueuelen 1000 (Ethernet) RX packets 20007623 bytes 12091641629 (11.2 GiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 12863250 bytes 2804068632 (2.6 GiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 #更改MUT值 shell# ifconfig eth0 mtu 2000 shell# ifconfig eth0 eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 2000 inet 172.17.27.48 netmask 255.255.192.0 broadcast 172.17.63.255 inet6 fe80::216:3eff:fe23:e2cc prefixlen 64 scopeid 0x20<link> ether 00:16:3e:23:e2:cc txqueuelen 1000 (Ethernet) RX packets 20007734 bytes 12091651283 (11.2 GiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 12863320 bytes 2804088342 (2.6 GiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
复制
MTU值对MySQL的影响:
下面测试是通过VMWare虚拟机实现。
1.中间网络设备MTU不一致导致网络超时。
1)设置虚拟机1250字节传输限制(1kbps等于125字节/秒)
2)通过ping传输包查看情况:
1000字节传输没问题,但传输1500就直接超时。
2.MTU值不同情况下拆包,影响传输性能。
左边图是MTU=80,右边是MTU=1500,employees表底层文件大概40M。
因为MTU的限制,导致多次拆包发送。拆包多,消耗时间就越长。
备注:可以使用tcpdump抓包,,之后使用wareshark进行分析。
MUT的传输优化
按照网上提供的一些网卡MTU相关技术文章,目前使用TSO、GSO、LRO、GRO等自动拆/拼包技术提高网络性能。
-
TSO(TCP Segmentation Offload )是一种由网卡卸载 TCP 数据包分段的技术。在传统的方式中,当 TCP 数据包超过网卡 MTU(最大传输单元)时,操作系统需要将这些数据包分成多个小包进行传输,这会增加CPU的负担。而使用 TSO 技术,网卡可以将大的 TCP 数据包分成多个小的数据包,而不需要 CPU 的介入。这可以提高网络性能并减少 CPU 的负担。
-
LRO(Large Receive Offload )是一种由网卡卸载数据包重组的技术。在传统的方式中,当网络接收到多个小的数据包时,操作系统需要对这些小的数据包进行重组,这会增加 CPU 的负担。而使用 LRO 技术,网卡可以将多个小的数据包重组成一个大的数据包,而不需要 CPU 的介入。这可以提高网络性能并减少 CPU 的负担。LRO针对TCP在接收端网卡的组包。
-
GSO(Generic Segmentation Offload)是一种类似于TSO的技术,但是不仅限于 TCP 协议,也适用于其他协议,如 UDP。与 TSO 不同的是,GSO 通过将多个小的数据包组合成一个大的数据包来减少网络流量的开销。这样做有助于减少 CPU 的负担,并提高网络性能。
-
GRO(Generic Receive Offload)是一种类似于 LRO 的技术,但是不仅限于 TCP 协议,也适用于其他协议,如 UDP。与 LRO 不同的是,GRO 可以在协议层面上进行数据包重组,而不需要在网络层面重组数据包。这可以提高网络性能并减少 CPU 的负担。
TSO和LRO基于网卡特性,可在网卡上进行包的合并与拆分。GSO和GRO事基于协议层面进行包的合并与拆分,减轻CPU的负荷。GSO和GRO更严谨,更灵活和更通用,自动检测网卡支持特性,支持分包则直接发给网卡,否则先分包后发给网卡。新的驱动一般用 GSO/GRO。
(此图来源于网络处理)
对于这些配置网卡配置,可以通过ethtool工具查看和设置:
#查看
shell# ethtool -k eth0 | grep -E 'generic-segmentation-offload|tcp-segmentation-offload'
tcp-segmentation-offload: off
generic-segmentation-offload: on
shell# ethtool -k eth0 | grep -E 'generic-receive-offload|large-receive-offload'
generic-receive-offload: on
large-receive-offload: off [fixed]
#设置
shell# ethtool -K eth0 gso on
shell# ethtool -K eth0 tso off
复制
总结
总的来说,MTU是网络通信中的一个关键参数,它的正确配置对于提高网络性能至关重要。在MySQL应用场景中,除了要考虑对接的对象及自身设备所允许的MTU设置范围,还需要综合考虑网络带宽、厂商特殊设定、应用场景等因素,避免因联动关系导致出现新的网络问题。
评论

