当前位置: 首页 > news >正文

基于RoCE的应用程序的MTU注意事项

目录

基于RoCE的应用程序的MTU注意事项

探测网络中的MTU设置

概要

原文

MTU测试结果

DOC:

CentOS安装tshark抓包工具

基于RoCE的应用程序的MTU注意事项
原文:https://support.mellanox.com/s/article/MLNX2-117-1682kn

InfiniBand协议最大传输单元(MTU)定义了几个固定大小的MTU:256、512、1024、2048或4096字节。

使用在以太网上运行的RDMA的基于RoCE的应用程序应考虑到RoCE MTU小于以太网MTU(Ethernet MTU)。 (通常默认值为1500)。

驱动程序从上面的列表中选择比Ethernet MTU 小的最大的那个值作为最大的“active” MTU。(并考虑了RoCE传输头和CRC字段)。

例如:

对于默认的 Ethernet MTU (1500字节),RoCE将使用1024(作为active_mtu)

而对于Ethernet MTU = 4200,RoCE将使用4096作为“active MTU”。

可以使用“ ibv_devinfo”检查“ active_mtu”值。

通信两端之间用RoCE协议交换“ active_mtu”并进行协商。将使用最小的MTU。

(RoCE protocol exchanges "active_mtu" values and negotiates it between both ends. The minimum MTU will be used.)

检查端口MTU:

[root@rdma59 ~]#  ifconfig ens2f0

ens2f0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500

        inet 172.17.31.59  netmask 255.255.255.0  broadcast 172.17.31.255

        inet6 fe80::b696:91ff:fea5:9a70  prefixlen 64  scopeid 0x20<link>

        ether b4:96:91:a5:9a:70  txqueuelen 1000  (Ethernet)

        RX packets 6508  bytes 954004 (931.6 KiB)

        RX errors 0  dropped 477  overruns 0  frame 0

        TX packets 4736  bytes 361557 (353.0 KiB)

        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

检查InfiniBand MTU:

ibv_devinfo 显示所有RDMA网口的简略信息

ibv_devinfo -v显示所有RDMA网口的所有信息

ibv_devinfo -d mlx5_0显示所有mlx5_0的简略信息

ibv_devinfo  -v -d mlx5_0显示所有mlx5_0的所有信息

更多:ibv_devinfo  –h

[root@rdma63 ~]# ibv_devinfo -d mlx5_0

hca_id: mlx5_0

        transport:                      InfiniBand (0)

        fw_ver:                         16.29.1016

        node_guid:                      9803:9b03:009a:2b3a

        sys_image_guid:                 9803:9b03:009a:2b3a

        vendor_id:                      0x02c9

        vendor_part_id:                 4119

        hw_ver:                         0x0

        board_id:                       MT_0000000010

        phys_port_cnt:                  1

        Device ports:

                port:   1

                        state:                  PORT_ACTIVE (4)

                        max_mtu:                4096 (5)

                        active_mtu:             1024 (3)

                        sm_lid:                 0

                        port_lid:               0

                        port_lmc:               0x00

                        link_layer:             Ethernet

对于使用大IO的应用程序,建议扩大MTU。

注意:如果您更改端口MTU,则所有链路上的网络元素(交换机和路由器)中的MTU也应该一同修改。

一旦你修改了端口(port)的MTU后,InfiniBand的 active MTU将自动调整为适合该MTU的最大尺寸。

例如,一旦将端口MTU设置为4200,active_mtu将更改为4096。

但是,最好不要将端口MTU配置为9000,因为这会浪费内存。

建议的MTU值如下:

想让active MTU为4096-将端口MTU配置为4200

想让active MTU为2048-将端口MTU配置为2200

# ifconfig eth2 mtu 4200
# ibv_devinfo -d mlx4_0
hca_id: mlx4_0
transport: InfiniBand (0)
fw_ver: 2.31.5050
node_guid: f452:1403:0017:1b80
sys_image_guid: f452:1403:0017:1b83
vendor_id: 0x02c9
vendor_part_id: 4103
hw_ver: 0x0
board_id: MT_1090111019
phys_port_cnt: 2
port: 1
state: PORT_ACTIVE (4)
max_mtu: 4096 (5)
active_mtu: 4096 (5)
sm_lid: 0
port_lid: 0
port_lmc: 0x00
link_layer: Ethernet

port: 2
state: PORT_DOWN (1)
max_mtu: 4096 (5)
active_mtu: 4096 (5)
sm_lid: 0
port_lid: 0
port_lmc: 0x00
link_layer: InfiniBand

#

其他文章:

IP over Infiband MTU size in non homogeneous environments - IBM InfiniBand 

https://www.ibm.com/support/pages/ip-over-infiband-mtu-size-non-homogeneous-environments-ibm-infiniband

Maximum Transmit Unit (MTU) Configuration

https://www.supermicro.org.cn/wdl/driver/InfiniBand/VMWare/ESX_Server_5.X/Mellanox_IB_OFED_Driver_for_VMware_vSphere_User_Manual_Rev_1_8_0.pdf

探测网络中的MTU设置
概要
1、MTU(Maximum Transmission Unit) 大小指的是一个以太帧(Ethernet Frame)能携带的最大数据部分(payload)的大小, 当MTU值设置为9000 Bytes的时候也叫做巨型帧(Jumbo Frame)

2、一般情况下网卡的MTU大小是1500(最大可配置到9000),(增加)数据的传输效率,可以通过增加MTU只来实现,MTU的增加即每帧(Frame)传输的数据量就会更大。

3、网络中的所有节点必须同时增大MTU,网络中小MTU的节点遇到上家发来的大于MTU的Frame(且没有切分标记),则直接丢弃。

PMTUD方法:

tracepath -n 192.169.31.54

https://networkengineering.stackexchange.com/questions/13417/exactly-when-is-pmtud-performed-path-mtu-discovery

原文
原文:https://www.jianshu.com/p/ee9c32b18005

MTU(Maximum Transmission Unit) 大小指的是一个以太帧(Ethernet Frame)能携带的最大数据部分(payload)的大小, 当MTU值设置为9000 Bytes的时候也叫做巨型帧(Jumbo Frame):


以太帧(Ethernet Frame)
802.3 Ethernet MTU

+-------------+------------+-----------------+---------+----------------+
| Dest MAC(6) | Src MAC(6) | Eth Type/Len(2) | Payload | CRC Trailer(4) |
+-------------+------------+-----------------+---------+----------------+
所以说, 当使用 Ethernet 介质时确定只能传最大 1518 字节的帧后, 减去 18 字节的 L2 头和尾, 留给 IP 层的就只有 1500 字节了.

一般情况下网卡的MTU大小是1500(最大可配置到9000),然后为了在高性能的网络环境下(增加)数据的传输效率,可以通过增加MTU只来实现,换句话说通过MTU的增加,每帧(Frame)传输的数据量就会更大。 这就好比用面包车运输对比用大货车运输的区别。

然而要实现大MTU需要网络里的每个设备都必须支持巨型帧大MTU,包括发送主机,目标主机以及网络中的路由器等。

本文主要是记录如何探测网络中的MTU设置以及错误配置MTU带来的影响。

为了探测两个不同实验室的机器之间的网络是否支持Jumbo Frame, 我从实验室A的Centos主机(client) 发送ping命令到实验室B的服务器(server)。

首先检查client的MTU配置:

[root@centos ~]# ifconfig eno16777736
eno16777736: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
 

可以看到默认的MTU值为1500, 此时我们发送一个大小为100B的ICMP数据包到目标server.

[root@centos  ~]# ping -s 100 -c 1 10.245.194.61
PING 10.245.194.61 (10.245.194.61) 100(128) bytes of data.
108 bytes from 10.245.194.61: icmp_seq=1 ttl=50 time=23.0 ms
可以看到小于MTU的数据包(128 = 100 + 20(ip header) + 8(icmp header))成功地发出并得到服务器回应, 接着我们增大包的大小到2000,超过了1500的MTU值, 同样数据ping成功ping发送并得到回应:

[root@centos ~]# ping -s 2000 -c 1 10.245.194.61
PING 10.245.194.61 (10.245.194.61) 2000(2028) bytes of data.
2008 bytes from 10.245.194.61: icmp_seq=1 ttl=50 time=24.2 ms
 

wireshark抓包

或许这里会有疑问,不是说最大只能发送1500字节的包吗? 为何2000字节也能成功发出?为了解答这个问题,我们通过wireshark抓个包来看看怎么回事

[root@centos ~]# tcpdump -i eno16777736 -s 50 -w mtu_1500.pcap
[root@centos ~]# tshark -t ud -P -O icmp,ip -Y "ip.addr==10.245.194.61" -r mtu_1500.pcap000>>mtu_1500.txt
(参数解释:

https://www.cnblogs.com/liun1994/p/6142505.html
-t: -t a|ad|d|dd|e|r|u|ud 设置解码结果的时间格式。“ad”表示带日期的绝对时间,“a”表示不带日期的绝对时间,“r”表示从第一个包到现在的相对时间,“d”表示两个相邻包之间的增量时间(delta)。   -u: s|hms 格式化输出秒;
-P: 即使将解码结果写入文件中,也打印包的概要信息;
-O: -O <protocols>,只显示此选项指定的协议的详细信息。
-Y: -Y <display filter>,使用读取过滤器的语法,在单次分析中可以代替-R选项;
-r: -r <infile> 设置读取本地文件
)

打开mtu_1500.txt,找到ICMP包:


icmp 帧
 


可以看到,即使我们指定的数据包大小是2000字节,但是IP层会根据当前MTU的设置对超过的ICMP数据进行分片(Fragmentation),以满足发送方的MTU设置要求。那么接收方是如何判定当前IP包是否被分片过?可以通过More Fragments 标志位(上图93行)和Flags字段(上图第90行)的值来判断,, 当接收方的IP层收到最后一个切片后(More Fragments: Not set),就会组装收到的所有切片包然后交给上层协议, 这里我们停下来想一想,IP层如何保证切片重组的顺序?其实很简单,IP包里有个Fragment offset属性,接收方可根据此属性的顺序重组切片, 此列中,理论上应当只有两个切片(1500 + 500 =2000), 所以接下来的一个Frame就是最后一个IP 切片:


第二个Fragment
 


上图第二个切片也是最后一个,其IP包的大小为548字节,也就是着总的数据传输量为2048(1500+548)字节,其中1个icmp头(8B), 2个ip头(20B+20B)和icmp的数据部分(2000). 所以可以看到,即便发送数据量超过了MTU的值,在IP层也会进行切片来适配所设置的MTU大小。

那么将发送发的MTU设置为9000字节启用巨型帧的话,会出现什么结果呢?

[root@centos ~]# ifconfig eno16777736 mtu 9000 up
[root@centos ~]# ifconfig eno16777736
eno16777736: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 9000
设置好巨型帧以后,再来ping一个大数据包看看这次结果有什么不一样。

[root@centos ~]# ping -s 2000 -c 1 10.245.194.61
PING 10.245.194.61 (10.245.194.61) 2000(2028) bytes of data.
 
--- 10.245.194.61 ping statistics ---
1 packets transmitted, 0 received, 100% packet loss, time 0ms
额。。。 增大了MTU之后,反而ping不成功!这是怎么回事??? 在看看网络包:


ping with jumbo frame
 

嗯,没问题,MTU设置应该是成功的,这次IP层没有分片,发送的数据也是2000字节,但是为什么服务器没有回应呢?

其实,这恰恰说明了此网络是不支持巨型帧的,只要网络里有一个转发节点的MTU值不是9000B并且发送方要求不分片(第170行, DF: Set)的情况下,转发节点会丢弃该报文。这也就是为什么会返回超时丢包的错误了。


简单来说,当一个转发点收到一个IP报文以后,先检查该报文的大小是否超过自己的MTU值,如果超过,再检查是否设置了DF标志(Don't Fragment), 如果设置,此报文将会被直接丢弃,如果没有设置DF,那么该节点会对报文进行切片后再转发到下一个路由节点。


作者:hynoor
链接:https://www.jianshu.com/p/ee9c32b18005
 

MTU测试结果
谷歌搜索 MTU Test / Great Jumbo Frames /图片搜索

《The Great Jumbo Frames Debate》https://longwhiteclouds.com/2013/09/10/the-great-jumbo-frames-debate/

《Jumbo Frames on vSphere 5》https://longwhiteclouds.com/2012/02/20/jumbo-frames-on-vsphere-5/

《Hardware Offloads - Test results》https://docs.openstack.org/performance-docs/latest/test_results/hardware_features/hardware_offloads/test_results.html

《Large MTUs and Internet Performance》http://irep.ntu.ac.uk/id/eprint/13183/1/221075_PubSub2797_Lee_K.pdf

《AWS Performance Test Results》https://docs.aviatrix.com/HowTos/insane_mode_perf.html

《Jumbo Frames for RAC Interconnect》https://blogs.oracle.com/exadata/jumbo-frames-for-rac-interconnect-v2

谷歌搜索 “mtu latency”,图片

DOC:
基于RoCE的应用程序的MTU注意事项

InfiniBand自动选择的MTU与端口MTU有关
 

InfiniBand协议最大传输单元(MTU)定义了几个固定大小的MTU:256、512、1024、2048或4096字节。

基于RoCE的应用程序应考虑到RoCE MTU小于以太网MTU(Ethernet MTU)。 (通常默认值为1500)。

驱动程序从上面的列表中选择比Ethernet MTU 小的最大的那个值作为active_mtu(即实际使用的MTU)。(并考虑了RoCE传输头和CRC字段)。

例如:

对于默认的 Ethernet MTU (1500字节),RoCE将使用1024(作为active_mtu)

而对于Ethernet MTU = 4200,RoCE将使用4096作为active_mtu。

通信两端之间用RoCE协议交换“ active_mtu”并进行协商,将使用最小的MTU。

(Mellanox :RoCE protocol exchanges "active_mtu" values and negotiates it between both ends. The minimum MTU will be used.)

(IBM:When an SMC-R link is initially established between two peer hosts, the MTU size is exchanged and negotiated to the lowest value for both hosts. The negotiated MTU size must account for transport headers and cyclic redundancy check (CRC) information that is used by the underlying RoCE protocols.)

查看端口MTU和InfiniBand MTU
检查端口MTU:
 

检查端口MTU:

netstat -i

也可以:

基于RoCE的应用程序的MTU注意事项

InfiniBand自动选择的MTU与端口MTU有关
 

InfiniBand协议最大传输单元(MTU)定义了几个固定大小的MTU:256、512、1024、2048或4096字节。

基于RoCE的应用程序应考虑到RoCE MTU小于以太网MTU(Ethernet MTU)。 (通常默认值为1500)。

驱动程序从上面的列表中选择比Ethernet MTU 小的最大的那个值作为active_mtu(即实际使用的MTU)。(并考虑了RoCE传输头和CRC字段)。

例如:

对于默认的 Ethernet MTU (1500字节),RoCE将使用1024(作为active_mtu)

而对于Ethernet MTU = 4200,RoCE将使用4096作为active_mtu。

通信两端之间用RoCE协议交换“ active_mtu”并进行协商,将使用最小的MTU。

(Mellanox :RoCE protocol exchanges "active_mtu" values and negotiates it between both ends. The minimum MTU will be used.)

(IBM:When an SMC-R link is initially established between two peer hosts, the MTU size is exchanged and negotiated to the lowest value for both hosts. The negotiated MTU size must account for transport headers and cyclic redundancy check (CRC) information that is used by the underlying RoCE protocols.)

查看端口MTU和InfiniBand MTU
检查端口MTU:
 

检查端口MTU:

netstat -i

也可以:

[root@rdma59 ~]#  ifconfig ens2f0

ens2f0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500

        inet 172.17.31.59  netmask 255.255.255.0  broadcast 172.17.31.255

        inet6 fe80::b696:91ff:fea5:9a70  prefixlen 64  scopeid 0x20<link>

        ether b4:96:91:a5:9a:70  txqueuelen 1000  (Ethernet)

        RX packets 6508  bytes 954004 (931.6 KiB)

        RX errors 0  dropped 477  overruns 0  frame 0

        TX packets 4736  bytes 361557 (353.0 KiB)

        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

检查InfiniBand MTU
可以使用“ ibv_devinfo”检查“ active_mtu”值。

ibv_devinfo 显示所有RDMA网口的简略信息

ibv_devinfo -v显示所有RDMA网口的所有信息

ibv_devinfo -d mlx5_0显示网口mlx5_0的简略信息

ibv_devinfo  -v -d mlx5_0显示网口mlx5_0的所有信息

更多:ibv_devinfo  –h

[root@rdma63 ~]# ibv_devinfo -d mlx5_0

hca_id: mlx5_0

        transport:                      InfiniBand (0)

        fw_ver:                         16.29.1016

        node_guid:                      9803:9b03:009a:2b3a

        sys_image_guid:                 9803:9b03:009a:2b3a

        vendor_id:                      0x02c9

        vendor_part_id:                 4119

        hw_ver:                         0x0

        board_id:                       MT_0000000010

        phys_port_cnt:                  1

        Device ports:

                port:   1

                        state:                  PORT_ACTIVE (4)

                        max_mtu:                4096 (5)

                        active_mtu:             1024 (3)

                        sm_lid:                 0

                        port_lid:               0

                        port_lmc:               0x00

                        link_layer:             Ethernet

max_mtu:   infiniband网口支持的最大MTU         

active_mtu:  infiniband网口实际使用的MTU    

MTU设置建议和注意事项
MTU设置建议
对于使用大IO的应用程序,建议扩大MTU。

注意事项
注意:如果您更改端口MTU,则所有链路上的网络元素(交换机和路由器)中的MTU也应该一同修改,否则大MTU端口发出的大帧遇到小MTU端口会发生数据丢弃,且没有反馈,问题难以排查。

(MTU:最大传输单元,最大接收单元MRU,即MTU >MRU时,接收方就丢弃数据)

一旦你修改了端口(port)的MTU后,InfiniBand的 active MTU将自动调整为适合该MTU的最大尺寸。

例如,一旦将端口MTU设置为4200,active_mtu将更改为4096。

但是,最好不要将端口MTU配置为9000,因为这会浪费内存。

建议的MTU值如下:

想让active MTU为4096-将端口MTU配置为4200

想让active MTU为2048-将端口MTU配置为2200

# ifconfig eth2 mtu 4200
# ibv_devinfo -d mlx4_0
hca_id: mlx4_0
transport: InfiniBand (0)
fw_ver: 2.31.5050
node_guid: f452:1403:0017:1b80
sys_image_guid: f452:1403:0017:1b83
vendor_id: 0x02c9
vendor_part_id: 4103
hw_ver: 0x0
board_id: MT_1090111019
phys_port_cnt: 2
port: 1
state: PORT_ACTIVE (4)
max_mtu: 4096 (5)
active_mtu: 4096 (5)
sm_lid: 0
port_lid: 0
port_lmc: 0x00
link_layer: Ethernet

port: 2
state: PORT_DOWN (1)
max_mtu: 4096 (5)
active_mtu: 4096 (5)
sm_lid: 0
port_lid: 0
port_lmc: 0x00
link_layer: InfiniBand

#

确定路径的MTU
原理
用来确定到达目的地的路径的最大传输单元(MTU)的大小的策略/技术叫PMTUD(路径MTU发现)

[路径MTU发现] (PMTUD)通过在IP报头中设置不分片DF(Don't Fragment)标志来探测路径中的MTU值。一旦DF位置1,将不允许中间设备对该报文进行分片,那么在遇到IP报文长度超过中间设备转发接口的MTU值时,该IP报文将会被中间设备丢弃。在丢弃之后,中间设备会向发送方发送ICMP差错报文。

(注意:如果通信路径中间有防火墙阻止了ICMP错误消息,那么会阻止PMTUD正常执行。)

http://www.vants.org/?post=109

检测
 

(ping的参数解释,可以执行 man ping 查看)

在Windows主机上,还可以使用“-f” ping参数将“不分段(DF)”位设置为1。

C:\ Users \ ScottHogg> ping 192.168.10.1 -l 1500 -f

在Linux上,命令为:

RedHat# ping -s 1500 -M do 192.168.10.1

通过改变ping包的大小,来回逼近的方法确定MTU

环境测试实践结果
intel集群的172.17.31.55、172.17.31.59
 

在intel集群的172.17.31.55、172.17.31.59上测试:

只要两个网口的MTU不一致,使用ping测试传输大于一端MTU的数据包就会失败。

例如:

172.17.31.55 设置eth的MTU为4200(ib的MTU自动为4096):

ifconfig ens2f0 mtu 4200

172.17.31.59 的eth的MTU默认1500

在172.17.31.55上向172.17.31.59 ping 200 byte的包会成功,ping 2000 byte的包会失败:

ping -s 200 -c 1 172.17.31.59    #成功

ping -s 2000 -c 1 172.17.31.59   #失败

反过来也一样。

172.17.31.55 、172.17.31.59都设置eth的MTU为4200(ib的MTU自动为4096):

ping -s 2000 -c 1 172.17.31.59   #成功

windows检查MTU size
 

ping  -f -l 2000 182.200.31.59

-l size        发送缓冲区大小。

-f            在数据包中设置“不分段”标志(仅适用于 IPv4)


返回中提示需要拆分,说明MTU 小于2000

PS C:\Users\l24514> ping 182.200.31.59 -l 1500 -f

正在 Ping 182.200.31.59 具有 1500 字节的数据:
来自 182.200.31.254 的回复: 需要拆分数据包但是设置 DF。
来自 182.200.31.254 的回复: 需要拆分数据包但是设置 DF。
来自 182.200.31.254 的回复: 需要拆分数据包但是设置 DF。
来自 182.200.31.254 的回复: 需要拆分数据包但是设置 DF。

设置方法
设置:

# ifconfig eth2 mtu 4200

查看:

# ibv_devinfo -d mlx4_0

(eth2网口对应的 device是mlx4_0)

为什么以太网mtu默认值为1500?
https://www.zhihu.com/question/21524257/answer/118266374

理想状态帧越大传输效率越高。(MTU越大允许的帧越大)
MTU过大引起的副作用:
传送一个数据包的延迟也越大
 

对于上行链路,会有多个计算机的数据帧排队等待传输,如果某个数据帧太大的话,那么其他数据帧等待的时间就会加长,导致体验变差。

需要更大的缓存区(内存)
网络I/O控制器需要从Host端主存中的缓冲区中取数据,缓冲区的大小是有限制的,Host主存资源有限,一般无法分配太大的缓冲区,只能将数据碎片化,一小份一小份的放置,并用环形队列追踪组织起来。

并且MTU越大,数据包中 bit位发生错误的概率也越大
 

如果一次传送太大量的数据,一旦该数据中有一小部分被干扰,那么接收方的数据校验算法由于无法判断具体是哪里产生了错误以及如何修复错误,所以只能将这份数据全部丢弃,并通知发送方重传,这极度浪费了网络带宽资源

所以折衷的长度:1518 byte ! 对应的IP packet 就是 1500 byte:

https://www.zhihu.com/question/21524257/answer/118266374

其他相关内容
Path MTU Discovery (PMTUD) 
PMTUD:

路径MTU发现(PMTUD),用于确定计算机网络中使用互联网协议(IP)主机间的最大传输单元(MTU)的大小,通常目标是避免IP分片。PMTUD原定应用在IPv4的路由器上,然而所有现代操作系统都是在终端应用它。在IPv6中,这个方法只应用在终端之间的会话。对于IPv4包,路径MTU发现通过在传出包的IP头中设置Don't Fragment (DF)标志位来工作。然后,任何路径上MTU小于数据包的设备都将丢弃它,并返回包含其MTU过大的ICMPv4(类型3、代码4)数据包,从而允许源主机适当地减小其路径MTU。 [1] 

探测网络中的MTU设置 实践
 

《探测网络中的MTU设置》: https://www.jianshu.com/p/ee9c32b18005

概要:

1、MTU(Maximum Transmission Unit) 大小指的是一个以太帧(Ethernet Frame)能携带的最大数据部分(payload)的大小, 当MTU值设置为9000 Bytes的时候也叫做巨型帧(Jumbo Frame)

2、一般情况下网卡的MTU大小是1500(最大可配置到9000),(增加)数据的传输效率,可以通过增加MTU只来实现,MTU的增加即每帧(Frame)传输的数据量就会更大。

3、网络中的所有节点必须同时增大MTU,网络中小MTU的节点遇到上家发来的大于MTU的Frame(且没有切分标记),则直接丢弃。

MTU Size Issues
https://www.networkworld.com/article/2224654/mtu-size-issues.html

RDMA 信息常用命令
查看RDMA device列表
 

[root@rdma63 tcpdump]# ibv_devices

    device                 node GUID

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

    mlx5_1              98039b03009a4296

    mlx5_0              98039b03009a2b3a

查看device信息
 

[root@rdma63 tcpdump]# ibv_devinfo -v -d mlx5_1

hca_id: mlx5_1

        transport:                      InfiniBand (0)

        fw_ver:                         16.29.1016

        node_guid:                      9803:9b03:009a:4296

        sys_image_guid:                 9803:9b03:009a:4296

        vendor_id:                      0x02c9

        vendor_part_id:                 4119

        hw_ver:                         0x0

        board_id:                       MT_0000000010

        phys_port_cnt:                  1

        Device ports:

                port:   1

                        state:                  PORT_ACTIVE (4)

                        max_mtu:                4096 (5)

                        active_mtu:             1024 (3)

                        sm_lid:                 0

                        port_lid:               0

                        port_lmc:               0x00

                        link_layer:             Ethernet

[root@rdma63 ~]# ibv_devinfo --help

ibv_devinfo: unrecognized option '--help'

Usage: ibv_devinfo             print the ca attributes

Options:

  -d, --ib-dev=<dev>     use IB device <dev> (default all devices found)

  -i, --ib-port=<port>   use port <port> of IB device (default 0: all ports)

  -l, --list             print only the IB devices names

  -v, --verbose          print all the attributes of the IB device(s)

查看网口映射关系
 

mellonx:

[root@rdma64 ibdump-master]# ibdev2netdev

mlx5_0 port 1 ==> eth18-0 (Up)

mlx5_1 port 1 ==> ib3b-0 (Up)

intel:

ibv_devices|awk '{system("echo "$1"\"-->\"`ls /sys/class/infiniband/"$1"/device/net`")}'

检查InfiniBand MTU
可以使用“ ibv_devinfo”检查“ active_mtu”值。

ibv_devinfo 显示所有RDMA网口的简略信息

ibv_devinfo -v显示所有RDMA网口的所有信息

ibv_devinfo -d mlx5_0显示网口mlx5_0的简略信息

ibv_devinfo  -v -d mlx5_0显示网口mlx5_0的所有信息

更多:ibv_devinfo  –h

[root@rdma63 ~]# ibv_devinfo -d mlx5_0

hca_id: mlx5_0

        transport:                      InfiniBand (0)

        fw_ver:                         16.29.1016

        node_guid:                      9803:9b03:009a:2b3a

        sys_image_guid:                 9803:9b03:009a:2b3a

        vendor_id:                      0x02c9

        vendor_part_id:                 4119

        hw_ver:                         0x0

        board_id:                       MT_0000000010

        phys_port_cnt:                  1

        Device ports:

                port:   1

                        state:                  PORT_ACTIVE (4)

                        max_mtu:                4096 (5)

                        active_mtu:             1024 (3)

                        sm_lid:                 0

                        port_lid:               0

                        port_lmc:               0x00

                        link_layer:             Ethernet

max_mtu:   infiniband网口支持的最大MTU         

active_mtu:  infiniband网口实际使用的MTU    

MTU设置建议和注意事项
 

对于使用大IO的应用程序,建议扩大MTU。

注意:如果您更改端口MTU,则所有链路上的网络元素(交换机和路由器)中的MTU也应该一同修改,否则大MTU端口发出的大帧遇到小MTU端口会发生数据丢弃,且没有反馈,问题难以排查。

(MTU:最大传输单元,最大接收单元MRU,即MTU >MRU时,接收方就丢弃数据)

一旦你修改了端口(port)的MTU后,InfiniBand的 active MTU将自动调整为适合该MTU的最大尺寸。

例如,一旦将端口MTU设置为4200,active_mtu将更改为4096。

但是,最好不要将端口MTU配置为9000,因为这会浪费内存。

建议的MTU值如下:

想让active MTU为4096-将端口MTU配置为4200

想让active MTU为2048-将端口MTU配置为2200

# ifconfig eth2 mtu 4200
# ibv_devinfo -d mlx4_0
hca_id: mlx4_0
transport: InfiniBand (0)
fw_ver: 2.31.5050
node_guid: f452:1403:0017:1b80
sys_image_guid: f452:1403:0017:1b83
vendor_id: 0x02c9
vendor_part_id: 4103
hw_ver: 0x0
board_id: MT_1090111019
phys_port_cnt: 2
port: 1
state: PORT_ACTIVE (4)
max_mtu: 4096 (5)
active_mtu: 4096 (5)
sm_lid: 0
port_lid: 0
port_lmc: 0x00
link_layer: Ethernet

port: 2
state: PORT_DOWN (1)
max_mtu: 4096 (5)
active_mtu: 4096 (5)
sm_lid: 0
port_lid: 0
port_lmc: 0x00
link_layer: InfiniBand

#

为什么以太网mtu默认值为1500?
https://www.zhihu.com/question/21524257/answer/118266374

理想状态帧越大传输效率越高。(MTU越大允许的帧越大)
MTU过大引起的副作用:
传送一个数据包的延迟也越大
 

对于上行链路,会有多个计算机的数据帧排队等待传输,如果某个数据帧太大的话,那么其他数据帧等待的时间就会加长,导致体验变差。

需要更大的缓存区(内存)
网络I/O控制器需要从Host端主存中的缓冲区中取数据,缓冲区的大小是有限制的,Host主存资源有限,一般无法分配太大的缓冲区,只能将数据碎片化,一小份一小份的放置,并用环形队列追踪组织起来。

并且MTU越大,数据包中 bit位发生错误的概率也越大
 

如果一次传送太大量的数据,一旦该数据中有一小部分被干扰,那么接收方的数据校验算法由于无法判断具体是哪里产生了错误以及如何修复错误,所以只能将这份数据全部丢弃,并通知发送方重传,这极度浪费了网络带宽资源

所以折衷的长度:1518 byte ! 对应的IP packet 就是 1500 byte:

https://www.zhihu.com/question/21524257/answer/118266374

其他相关内容
Path MTU Discovery (PMTUD) 
PMTUD:

路径MTU发现(PMTUD),用于确定计算机网络中使用互联网协议(IP)主机间的最大传输单元(MTU)的大小,通常目标是避免IP分片。PMTUD原定应用在IPv4的路由器上,然而所有现代操作系统都是在终端应用它。在IPv6中,这个方法只应用在终端之间的会话。对于IPv4包,路径MTU发现通过在传出包的IP头中设置Don't Fragment (DF)标志位来工作。然后,任何路径上MTU小于数据包的设备都将丢弃它,并返回包含其MTU过大的ICMPv4(类型3、代码4)数据包,从而允许源主机适当地减小其路径MTU。 [1] 

探测网络中的MTU设置 实践
 

《探测网络中的MTU设置》: https://www.jianshu.com/p/ee9c32b18005

概要:

1、MTU(Maximum Transmission Unit) 大小指的是一个以太帧(Ethernet Frame)能携带的最大数据部分(payload)的大小, 当MTU值设置为9000 Bytes的时候也叫做巨型帧(Jumbo Frame)

2、一般情况下网卡的MTU大小是1500(最大可配置到9000),(增加)数据的传输效率,可以通过增加MTU只来实现,MTU的增加即每帧(Frame)传输的数据量就会更大。

3、网络中的所有节点必须同时增大MTU,网络中小MTU的节点遇到上家发来的大于MTU的Frame(且没有切分标记),则直接丢弃。

MTU Size Issues
https://www.networkworld.com/article/2224654/mtu-size-issues.html

CentOS安装tshark抓包工具
 

准备在服务器上用tshark抓包,分析一下数据。直接yum install tshark却发现没有这个包。网上搜索一下,各种奇葩安装方式,又是安装apt?又是安装各种环境?我相信既然CentOS已经有了yum这么好的包管理工具,那么一定有更简单的方式。
最后只好在Google上直接用我这蹩脚的英文搜索一下。果然,一句how to install tshark on centos顺利解决了我的问题。
原来一直是自己对yum这个命令了解太少了,平时只会yum install,yum update :first_quarter_moon_with_face: 。那么到底故事如何,客官且听我细细道来。
当我试图直接安装时:

$ yum install tshark
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
没有可用软件包 tshark。
错误:无须任何处理
那么,该怎么办呢? 原来yum提供了搜索功能。

$ yum whatprovides *tshark*
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
base/7/x86_64/filelists_db                                                    | 6.9 MB  00:00:00
epel/x86_64/filelists                                                         |  10 MB  00:00:00
extras/7/x86_64/filelists_db                                                  | 524 kB  00:00:00
updates/7/x86_64/filelists_db                                                 | 2.1 MB  00:00:00
1:bash-completion-extras-2.1-11.el7.noarch : Additional programmable completions for Bash
源    :epel
匹配来源:
文件名    :/usr/share/bash-completion/completions/tshark
 
wireshark-1.10.14-14.el7.i686 : Network traffic analyzer
源    :base
匹配来源:
文件名    :/usr/sbin/tshark
文件名    :/usr/share/wireshark/tshark.html
文件名    :/usr/share/man/man1/tshark.1.gz
 
wireshark-1.10.14-14.el7.x86_64 : Network traffic analyzer
源    :base
匹配来源:
文件名    :/usr/sbin/tshark
文件名    :/usr/share/wireshark/tshark.html
文件名    :/usr/share/man/man1/tshark.1.gz

我们可以看到wireshark包已经包含了tshark包。

接下来就是我们熟悉的步骤了==。

$ yum install wireshark
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
正在解决依赖关系
--> 正在检查事务
---> 软件包 wireshark.x86_64.0.1.10.14-14.el7 将被 安装
--> 正在处理依赖关系 libsmi.so.2()(64bit),它被软件包 wireshark-1.10.14-14.el7.x86_64 需要
--> 正在处理依赖关系 libcares.so.2()(64bit),它被软件包 wireshark-1.10.14-14.el7.x86_64 需要
--> 正在检查事务
---> 软件包 c-ares.x86_64.0.1.10.0-3.el7 将被 安装
---> 软件包 libsmi.x86_64.0.0.4.8-13.el7 将被 安装
--> 解决依赖关系完成
 
...
 
已安装:
  wireshark.x86_64 0:1.10.14-14.el7
 
作为依赖被安装:
    c-ares.x86_64 0:1.10.0-3.el7                                                                        libsmi.x86_64 0:0.4.8-13.el7
 
完毕!

最后我们验证一下:

 $ tshark -v

————————————————
版权声明:本文为CSDN博主「bandaoyu」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/bandaoyu/article/details/116706925

相关文章:

基于RoCE的应用程序的MTU注意事项

目录 基于RoCE的应用程序的MTU注意事项 探测网络中的MTU设置 概要 原文 MTU测试结果 DOC: CentOS安装tshark抓包工具 基于RoCE的应用程序的MTU注意事项 原文&#xff1a;https://support.mellanox.com/s/article/MLNX2-117-1682kn InfiniBand协议最大传输单元&#xff…...

springboot集成Graphql相关问题汇总

1、idea在debug运行时出现java.lang.NoClassDefFoundError:kotlin/collections/AbstractMutableMap 解决&#xff1a;禁用idea dubugger中kotlin coroutine agent 见&#xff1a;https://stackoverflow.com/questions/70796177/after-the-spring-boot-source-code-is-compile…...

Angular16的路由守卫基础使用

Angular16的路由守卫基础使用 使用ng generate guard /guard/login命令生成guard文件因新版Angular取消了CanActivate的使用&#xff0c;改用CanActivateFn&#xff0c;因此使用router跳转需要通过inject的方式导入。 import { inject } from angular/core; import { CanActi…...

leetcode228. 汇总区间

题目 给定一个 无重复元素 的 有序 整数数组 nums 。 返回 恰好覆盖数组中所有数字 的 最小有序 区间范围列表 。也就是说&#xff0c;nums 的每个元素都恰好被某个区间范围所覆盖&#xff0c;并且不存在属于某个范围但不属于 nums 的数字 x 。 列表中的每个区间范围 [a,b]…...

删除有序链表中重复的元素-II(链表)

乌&#xff01;蒙&#xff01;山&#xff01;连&#xff01;着&#xff01;山&#xff01;外&#xff01;山&#xff01; 题目&#xff1a; 思路&#xff1a; 双指针&#xff0c;slow和fast&#xff0c;并且增加标记flag初始为1。 如果slow指向节点值等于fast指向节点值&…...

element单独检验form表单中的一项

<el-form-item prop"limitDays" style"margin-left: 5px;"><el-input v-model"ruleForm.limitDays" placeholder"天数" style"width: 100px;" /> </el-form-item> <el-form-item prop"limitCount…...

Webpack node、output.jsonpFunction 配置详解

Webpack node、output.jsonpFunction 配置详解 最近尝试给一些用到 webpack 的项目升级到最新 webpack5 版本&#xff0c;其中遇到了一些问题&#xff0c;我挑了两个比较典型的问题&#xff0c;其中主要涉及到了 webpack 的 node 属性跟 output.jsonpFunction &#xff08;web…...

要跟静音开关说再见了!iPhone15新变革,Action按钮引领方向

有很多传言称iPhone 15 Pro会有很多变化&#xff0c;但其中一个变化可能意味着iPhone体验从第一天起就有的一项功能的终结。我说的是静音开关&#xff0c;它可以让你轻松地打开或关闭iPhone的铃声。 根据越来越多的传言&#xff0c;iPhone 15 Pro和iPhone 15 Pro Max将拆除静音…...

论文笔记 Graph Attention Networks

2018 ICLR 1 intro 1.1. GCN的不足 无法完成inductive任务 inductive任务是指&#xff1a; 训练阶段与测试阶段需要处理的graph不同。通常是训练阶段只是在子图上进行&#xff0c;测试阶段需要处理未知的顶点。GGN 的参数依赖于邻接矩阵A/拉普拉斯矩阵L&#xff0c;所以换了…...

看上去就很像的agree和degree有什么联系

“Agree”&#xff08;同意&#xff09;和 “degree”&#xff08;程度&#xff09;这两个词在语义上没有直接的联系&#xff0c;它们代表不同的概念。 “Agree” 意味着在意见、观点或立场上达成共识或一致。它表示同意或同意某人或某事。 例如&#xff1a; “We all agree…...

2023前端面试题第二弹(真实,一般人我还不给看)

为什么要初始化css&#xff1f; 避免浏览器差异&#xff0c;解决兼容问题 网格布局 display: grid; grid-template-columns: 1fr 1fr 1fr less的优点 可以兼容&#xff0c;可以嵌套&#xff0c;循环&#xff0c;运算&#xff0c;定义变量和继承样式&#xff08;extend&#xff…...

零基础如何学习 Web 安全,如何让普通人快速入门网络安全?

前言 网络安全现在是朝阳行业&#xff0c;缺口是很大。不过网络安全行业就是需要技术很多的人达不到企业要求才导致人才缺口大 【一一帮助安全学习&#xff08;网络安全面试题学习路线视频教程工具&#xff09;一一】 初级的现在有很多的运维人员转网络安全&#xff0c;初级…...

安全学习DAY18_信息打点-APP资产搜集

信息打点-APP资产&静态提取&动态抓包&动态调试 文章目录 信息打点-APP资产&静态提取&动态抓包&动态调试本节知识&思维导图本节使用到的链接&工具 如何获取目标APP从名称中获取APP从URL获取APP APP搜集资产信息APP提取信息分类信息提取方式信息…...

react 矩形波浪

"矩形波浪"&#xff08;Square Wave&#xff09;在信号处理和波形生成中是一种特殊类型的波形&#xff0c;通常由两个不同的值交替组成&#xff0c;一个是高电平&#xff0c;另一个是低电平&#xff0c;形成类似方波的波形。在 React 中创建一个矩形波浪的效果可以通…...

【GitHub】Pycharm本地项目打包上传到Github仓库的操作步骤

文章目录 1、Pycharm端的设置操作2、Github端的设置操作3、Pycharm上配置Github4、Git本地项目至GitHub仓库5、前往Github中查看确认6、常见报错 1、Pycharm端的设置操作 通过CtrlAltS快捷组合键的方式&#xff0c;打开设置&#xff0c;导航到版本控制一栏中的Git&#xff0c;…...

计算机网络基础

前言 在你立足处深挖下去,就会有泉水涌出!别管蒙昧者们叫嚷:“下边永远是地狱!” 博客主页&#xff1a;KC老衲爱尼姑的博客主页 博主的github&#xff0c;平常所写代码皆在于此 共勉&#xff1a;talk is cheap, show me the code 作者是爪哇岛的新手&#xff0c;水平很有限&…...

【图像分类】基于LIME的CNN 图像分类研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

回归预测 | MATLAB实现TSO-SVM金枪鱼群算法优化支持向量机多输入单输出回归预测(多指标,多图)

回归预测 | MATLAB实现TSO-SVM金枪鱼群算法优化支持向量机多输入单输出回归预测&#xff08;多指标&#xff0c;多图&#xff09; 目录 回归预测 | MATLAB实现TSO-SVM金枪鱼群算法优化支持向量机多输入单输出回归预测&#xff08;多指标&#xff0c;多图&#xff09;效果一览基…...

Pixar、Adobe 和苹果等成立 OpenUSD 联盟推行 3D 内容开放标准

导读Pixar、Adobe、Apple、Autodesk 与 NVIDIA 联手 Linux 基金会旗下的联合开发基金会&#xff08;JDF&#xff09;宣布建立 OpenUSD 联盟&#xff08;AOUSD&#xff09;以推行 Pixar 创建的通用场景描述技术的标准化、开发、进化和发展。 联盟寻求通过推进开放式通用场景描述…...

ansible剧本之role角色模块

role角色 一&#xff1a;Roles 模块1.roles 的目录结构&#xff1a;2.roles 内各目录含义解释3.在一个 playbook 中使用 roles 的步骤&#xff1a;&#xff08;1&#xff09;创建以 roles 命名的目录&#xff08;2&#xff09;创建全局变量目录&#xff08;可选&#xff09;&am…...

网络安全领域的常见攻击方式及防御手段

目录 重放攻击&#xff08;Replay Attack&#xff09;防御手段 SQL 注入&#xff08;SQL Injection&#xff09;防御手段 跨站脚本攻击&#xff08;Cross-Site Scripting&#xff0c;XSS&#xff09;防御手段 跨站请求伪造&#xff08;Cross-Site Request Forgery&#xff0c;C…...

Python应用工具-Jupyter Notebook

工具简介 Jupyter Notebook是 基于 网页的用于交互计算的 应用程序&#xff0c;以网页的形式打开&#xff0c;可以在网页页面中直接编写代码和运行代码&#xff0c;代码的运行结果也会直接在代码块下 显示&#xff0c;文档是保存为后缀名为 . ipynb 的 JSON 格式文件。 操作指令…...

音视频 FFmpeg如何查询命令帮助文档

FFmpeg如何查询命令帮助文档 一、ffmpeg/ffplay/ffprobe区别二、ffmpeg命令查看帮助文档三、ffplay命令查看帮助文档四、ffprobe命令查看帮助文档注意 一、ffmpeg/ffplay/ffprobe区别 ffmpeg:超快音视频编码器ffplay:简单媒体播放器ffprobe:简单多媒体流分析器 二、ffmpeg命令…...

回归预测 | MATLAB实现CSO-SVM布谷鸟优化算法优化支持向量机多输入单输出回归预测(多指标,多图)

回归预测 | MATLAB实现CSO-SVM布谷鸟优化算法优化支持向量机多输入单输出回归预测&#xff08;多指标&#xff0c;多图&#xff09; 目录 回归预测 | MATLAB实现CSO-SVM布谷鸟优化算法优化支持向量机多输入单输出回归预测&#xff08;多指标&#xff0c;多图&#xff09;效果一…...

元宇宙电商—NFG系统:区块链技术助力商品确权。

在国内&#xff0c;以“数字藏品”之名崛起以来&#xff0c;其与NFT的对比就从未停歇。从上链模式到数据主权&#xff0c;从炒作需求到实际应用&#xff0c;从售卖形式到价值属性&#xff0c;在各种抽丝剥茧般的比较中&#xff0c;围绕两者孰优孰劣的讨论不绝于耳。 NFT的每一…...

【云原生】Docker基本原理及镜像管理

目录 一、Docker概述 1.1 IT架构的演进&#xff1a; 1.2 Docker初始 1.3 容器的特点 1.4 Docker容器与虚拟机的区别 1.5 容器在内核中支持2种重要技术 1.6 Docker核心概念 1&#xff09;镜像 2&#xff09;容器 3&#xff09;仓库 二、安装Docker 2.1 Yum安装Docker…...

Apache Doris大规模数据使用指南

目录 发展历史 架构介绍 弹性MPP架构-极简架构 逻辑架构 基本访问架构 分区 创建单分区表...

RabbitMQ 持久化

通过持久化可以尽量防止在RabbitMQ异常情况下&#xff08;重启、关闭、宕机&#xff09;的数据丢失。持久化技术是解决消息存储到队列后的丢失问题&#xff0c;但是通过持久化并不能完全保证消息不丢失。 持久化 交换机持久化队列持久化消息持久化总结 持久化技术可以分为交换机…...

STM32 定时器复习

12MHz晶振的机器周期是1us&#xff0c;因为单片机的一个机器周期由6个状态周期组成&#xff0c;1个机器周期6个状态周期12个时钟周期&#xff0c;因此机器周期为1us。 51单片机常用 for(){__nop(); //执行一个机器周期&#xff0c;若想循环n us&#xff0c;则循环n次。 }软件…...

17-工程化开发 脚手架 Vue CLI

开发Vue的两种方式: 1.核心包传统开发模式: 基于 html/css /js 文件&#xff0c;直接引入核心包&#xff0c;开发 Vue。 2.工程化开发模式: 基于构建工具 (例如: webpack)的环境中开发 Vue。 问题: 1. webpack 配置不简单 2. 雷同的基础配置 3. 缺乏统…...

golang 分布式微服务DAO层构建

构建云原生项目的dao层 配置读写分离的mysql集群 1. 编写yml配置文件 搭建一主二从的mysql集群、单机redis db.yml mysql:source: # 主数据库driverName: mysqlhost: 127.0.0.1port: 3309database: db_tiktokusername: tiktokDBpassword: tiktokDBcharset: utf8mb4replica1…...

Java 项目日志实例:LogBack

点击下方关注我&#xff0c;然后右上角点击...“设为星标”&#xff0c;就能第一时间收到更新推送啦~~~ LogBack 和 Log4j 都是开源日记工具库&#xff0c;LogBack 是 Log4j 的改良版本&#xff0c;比 Log4j 拥有更多的特性&#xff0c;同时也带来很大性能提升。LogBack 官方建…...

什么是条件get方法?

条件GET方法通常指的是HTTP协议中的"GET"请求&#xff0c;但它带有一些条件&#xff0c;这些条件用于控制服务器是否应该返回请求的资源。这些条件通常使用HTTP标头字段来指定&#xff0c;以便客户端可以告诉服务器在某些条件下是否需要新的或更新的资源。 条件GET方…...

Python爬虫——scrapy_crawlspider读书网

创建crawlspider爬虫文件&#xff1a; scrapy genspider -t crawl 爬虫文件名 爬取的域名scrapy genspider -t crawl read https://www.dushu.com/book/1206.htmlLinkExtractor 链接提取器通过它&#xff0c;Spider可以知道从爬取的页面中提取出哪些链接&#xff0c;提取出的链…...

Spring源码编译-for mac

超详细的spring源码编译 记&#xff1a;编译成功时间&#xff1a;2023.08.19 环境准备&#xff1a; 1.idea 2023.1.1 Community Edition 2.jdk1.8 3.gradlegradle-5.6.4 4.spring源码(版本&#xff1a;spring-framework-v5.2.25.RELEASE) 一.spring源码下载 github 加速网站&…...

视频汇聚平台EasyCVR安防监控视频汇聚平台的FLV视频流在VLC中无法播放的问题解决方案

众所周知&#xff0c;TSINGSEE青犀视频汇聚平台EasyCVR可支持多协议方式接入&#xff0c;包括主流标准协议国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等。在视频流的处理与分发上&#xff0c;视频监控…...

中间件:RocketMQ安装部署

单机部署 下载 cd /opt/soft/archive wget https://archive.apache.org/dist/rocketmq/4.9.4/rocketmq-all-4.9.4-bin-release.zip unzip -d ../ rocketmq-all-4.9.4-bin-release.zip配置 broker.conf 的brokerIP1 为公网ip 启动命令&#xff1a; nohup sh bin/mqnamesrv &a…...

leetcode-动态规划-42-接雨水

题目 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 示例 1&#xff1a; 输入&#xff1a;height [0,1,0,2,1,0,1,3,2,1,2,1] 输出&#xff1a;6 解释&#xff1a;上面是由数组 [0,1,0,2,1,0,1,3,2,1…...

[静态时序分析简明教程(十一)]浅议tcl语言

静态时序分析简明教程-浅议tcl语言 一、写在前面1.1 快速导航链接 二、Tcl基础知识三、Tcl的语言结构3.1 Tcl变量3.2 Tcl表达式与运算符3.3 Tcl的控制流语句3.3.1 列表遍历3.3.2 决策3.3.3 Tcl循环3.3.4 Tcl过程 3.4 其他Tcl命令3.4.1 open/close3.4.2 gets/puts3.4.3 catch3.4…...

大数据-玩转数据-Flink 网站UV统计

一、说明 在实际应用中&#xff0c;我们往往会关注&#xff0c;到底有多少不同的用户访问了网站&#xff0c;所以另外一个统计流量的重要指标是网站的独立访客数&#xff08;Unique Visitor&#xff0c;UV&#xff09;。 二、数据准备 package com.lyh.flink06;import lombo…...

3分钟了解下cwnd和TCP拥塞控制算法

文章首发地址 cwnd是什么&#xff1f; cwnd是TCP拥塞控制中的一个重要概念&#xff0c;全称为“congestion window”&#xff0c;也被称为拥塞窗口。它用于限制发送方向网络发送数据的速度&#xff0c;以避免网络拥塞。cwnd是一个动态的值&#xff0c;可以根据网络状况动态调…...

设计模式之状态模式(State)的C++实现

1、状态模式的提出 在组件功能开发过程中&#xff0c;某些对象的状态经常面临变化&#xff0c;不同的状态&#xff0c;其对象的操作行为不同。比如根据状态写的if else条件情况&#xff0c;且这种条件变化是经常变化的&#xff0c;这样的代码不易维护。可以使用状态模式解决这…...

无涯教程-TensorFlow - Keras

Keras易于学习的高级Python库&#xff0c;可在TensorFlow框架上运行&#xff0c;它的重点是理解深度学习技术&#xff0c;如为神经网络创建层&#xff0c;以维护形状和数学细节的概念。框架的创建可以分为以下两种类型- 顺序API功能API 无涯教程将使用Jupyter Notebook执行和…...

使用SSH隧道将Ubuntu云服务器Jupyter Notebook端口映射到本地

本文主要实现了在Ubuntu云服务器后台运行Jupyter Notebook&#xff0c;并使用SSH隧道将服务器端口映射到本地 1. 生成配置文件 运行以下命令生成Jupyter Notebook的配置文件&#xff1a; jupyter notebook --generate-config这将在用户主目录下生成一个名为.jupyter的文件夹&…...

Keepalived+LVS部署高可用集群

文章目录 KeepalivedLVS(DR)部署高可用Web集群集群环境MASTER配置BACKUP配置检查Virtual IP是否漂移IPVS检查MASTERBACKUP Real Server配置附上个人写的小脚本 测试停用Real Server某一台的Apache服务停用Master上的keepalived检测Backup是否接管资源 KeepalivedLVS(DR)部署高可…...

2023河南萌新联赛第(五)场:郑州轻工业大学

A.买爱心气球 原题链接 : 登录—专业IT笔试面试备考平台_牛客网 博弈论 : #include <iostream> using namespace std; int t,n,m; string s1 "Alice",s2 "Bob"; int main() {cin>>t;while(t--){cin>>n>>m;if (n % 3 0) {cou…...

在Orangepi5开发板3588s使用opencv获取摄像头画面

先感谢香橙派群的管理员耐心指导&#xff0c;经过不断的调试修改最后成功通过opencv调用mipi摄像头获取画面 就记录分享一下大概步骤希望大家少踩点坑&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 我用的固件系统是ubuntu2022.0.4 固件是&#x…...

音视频 ffmpeg命令分类查询

命令参数内容-version显示版本 -bsfs 显示可用比特流filter-buildconf显示编译配置-formats显示可用格式(muxersdemuxers)-muxers显示可用复用器-demuxers显示可用解复用器-codecs显示可用编解码器(decodersencoders)-decoders显示可用解码器-encoders显示可用编码器-bsfs显示可…...

VSCode无法从Extensions下载工具时,把工具下载到本地并添加到VSCode编辑器

从VSCode 的 Extensions 下载 下载报错&#xff1a;Error while installing ...... extension. Please check the log for more details. 由于内网限制&#xff08;或者其他网络限制&#xff09;无法正常下载扩展工具到VSCode编辑器&#xff0c;可以把工具下载到本地再添加到V…...

WebStrom 前端项目Debug

1. 正常启动前端项目 2. 配置webStrom的JavaScript Debugger 点击Edit Configurations添加avaScript Debug填写URL 为项目启动路径配置要Debug的浏览器-remote-allow-origins* &#xff08;最重要&#xff0c;否则唤起的是一个about:blank空白页面&#xff09; 3. 启动Debug模…...