Jumbo Frames and RAC tips

概述

默认情况下,以太网的可变帧大小最大为 1,500 字节。最大传输单元 (MTU) 定义此上限并默认为 1,500 字节限制。如果通过网络发送数据,数据将被分成不大于 MTU 帧大小的片段。马上,我们可以看到 Oracle RAC 集群互连的 MTU 限制问题。许多 Oracle 数据库都配置了 8KB 的数据库块大小。如果出于缓存融合的目的需要通过专用网络传输一个块,则 8KB 块将被分成六个帧。即使块大小为 2KB,块也会被分成两个帧。到达目的地时,这些部件需要重新组装起来。去把事情弄得更糟, db_block_size参数由 db_file_multiblock_read_count参数初始化 。 一次采用 128 个块的 8KB 块大小导致需要传输 1 兆字节的数据。

 

巨型帧允许最大 9,000 字节的 MTU 值。遗憾的是,并非所有平台都允许使用巨型帧。不仅操作系统需要支持Jumbo Frames,服务器中的网卡和私有网络后面的网络交换机也需要支持Jumbo Frames。当今的许多 NIC 和交换机都支持巨型帧,但巨型帧不是 IEEE 标准,因此,可能存在不同的实现,但可能无法很好地协同工作。并非所有配置都支持更大的 MTU 大小。配置网络片段时,请务必记住路由中任何组件的最小 MTU 是从 A 点到 B 点的最大 MTU。您可以将网卡配置为支持 9000 字节,但如果交换机配置为MTU 为 1,500 字节,则不会使用 Jumbo Frames。Infiniband 支持最大 65,000 字节的巨型帧。

 解决方案

提供有关如何在网络交换机中启用巨型帧的指导超出了本书的范围。您应该与他们的网络管理员交谈,后者可能需要查阅交换机供应商的文档以了解更多详细信息。在 OS 网络接口端,很容易配置更大的帧大小。以下示例来自 Oracle Linux 6。首先,我们需要确定哪个设备用于 Cluster Interconnect。

 

[root@host01 ~]$ oifcfg getif

eth0   192.168.56.0  全球  公共

eth1   192.168.10.0  全局  cluster_interconnect

 

eth1设备支持私有网络。 现在我们配置更大的 MTU 大小。

 

[root@host01 ~]# ifconfig eth1 mtu 9000

[root@host01 ~]# vi /etc/sysconfig/network-scripts/ ifcfg-eth1

 

在 ifcfg-eth1文件中,添加了一行内容为 ?MTU=9000? 这样设置在服务器重新启动时仍然存在。

 

验证接口以确保使用更大的 MTU。

 

[root@host01 ~]# ifconfig ?a

eth0      链路封装:以太网  HWaddr 08:00:27:98:EA:FE 

          inet地址:192.168.56.71  广播:192.168.56.255  掩码:255.255.255.0

          inet6 地址:fe80::a00:27ff:fe98:eafe/64 范围:链接

          向上广播运行多播MTU:1500指标:1   

          RX 数据包:3749 错误:0 丢弃:0 溢出:0 帧:0

          TX 数据包:3590 错误:0 丢弃:0 溢出:0 运营商:0

          碰撞:0 txqueuelen:1000

          RX 字节:743396 (725.9 KiB)   TX 字节:623620 (609.0 KiB)

eth1      链路封装:以太网  HWaddr 08:00:27:54:73:8F 

          inet地址:192.168.10.1  广播:192.168.10.255  掩码:255.255.255.0

          inet6 地址:fe80::a00:27ff:fe54:738f/64 范围:链接

          向上广播运行多播MTU:9000指标:1   

          RX 数据包:268585 错误:0 丢弃:0 溢出:0 帧:0

          TX packets:106426 errors:0 dropped:0 overruns:0 carrier:0

          碰撞:0 txqueuelen:1000

          RX 字节:1699904418 (1.5 GiB)   TX 字节:77571961 (73.9 MiB)

 

请注意,设备eth1具有较大的 MTU 设置。 traceroute实用程序可用于验证最大可能的数据包大小

 

[root@host01 ~]# traceroute host02-priv ?mtu

traceroute 到 host02-priv (192.168.10.2),最多 30 跳,9000 字节数据包

   host02-priv.localdomain (192.168.10.2)   0.154 毫秒 F=9000   0.231 毫秒  0.183 毫秒

 

接下来,沿路由发送一个 9,000 字节的数据包。?F 选项确保数据包不会被分成更小的帧。

 

[root@host01 ~]# traceroute -F host02-priv 9000

traceroute 到 host02-priv (192.168.10.2),最多 30 跳,9000 字节数据包

   host02-priv.localdomain (192.168.10.2)   0.495 毫秒  0.261 毫秒  0.141 毫秒

 

该路由成功运行。

 

现在一个大一个字节的数据包沿着路由发送。

 

[root@host01 ~]# traceroute -F host02-priv 9001

指定的 packetlen 9001 太大

 

traceroute 实用程序的错误显示 9,001 字节的数据包太大。这些步骤验证巨型帧是否正常工作。让我们验证更改是否提高了集群互连上的可用带宽。为此,使用了 iperf实用程序。iperf实用程序可以使用 ?l 参数强制指定数据包长度。公共接口没有为巨型帧配置,并且没有应用程序连接到节点,因此公共网络可以用作基线。

 

[root@host02 ~]# iperf -c host01 -l 9000

---------------------------------------------- ----------

客户端连接到 host01,TCP 端口 5001

TCP 窗口大小:22.9 KB(默认)

---------------------------------------------- ----------

  3]本地192.168.56.72端口18222与192.168.56.71端口5001相连

[ ID] 间隔       传输     带宽

  3]   0.0-10.0 秒923 MBytes 774 Mbits/秒     

 

对启用巨型帧的专用网络重复相同的测试。

 

[root@host02 ~]# iperf -c host01-priv -l 9000

---------------------------------------------- ----------

客户端连接到 host01-priv,TCP 端口 5001

TCP 窗口大小:96.1 KB(默认)

---------------------------------------------- ----------

  3]本地192.168.10.2端口40817与192.168.10.1端口5001相连

[ ID] 间隔       传输     带宽

  3]   0.0-10.0 秒1.28 GBytes 1.10 Gbits/秒   

 

在这里我们看到带宽从 774 Mbs/秒增加到 1.10 Gbs/秒,增加了 42%!对于同样的 10 秒间隔,传输的字节数从 923 兆字节增加到 1.28 GB,增加了 65%!

 

如果 Oracle RAC 系统为集群互连使用以太网(Gig-E 或 10Gig-E),则建议为专用网络利用巨型帧。为公共网络接口使用巨型帧的情况不太常见。巨型帧要求端到端的所有网络组件都支持更大的 MTU 大小。在某些情况下,诊断巨型帧在系统中不起作用的问题可能很棘手,但即便如此,付出的努力也是值得的

posted @ 2023-01-03 16:25  雪竹子  阅读(184)  评论(0编辑  收藏  举报