[玩电脑] Hi3536网络应用调优
作者:CC下载站 日期:2023-10-11 19:32:06 浏览:33 分类:玩电脑
1. 为什么UDP接收或发送会丢包?
用户态应用程序在接收 UDP 数据时(单播或组播报文),同时进行其它有延时的操作(如写码流数据到 USB 存储设备),应该程序将延迟接收 UDP 数据包,而 socket 默认接收缓存只有108544Byte,这样可能会使 socket 接收缓存满,无法接收新的 UDP 数据包,出现丢包现象。可在内核下通过执行下面命令进行确认:
cat /proc/net/snmp | grep Udp
如果 RcvbufErrors 字段增加较多,说明确实是 socket 接收缓存满导致的丢包。以下命令可以增加接收缓冲区大小(设置为 20,000,000 字节 (即 20 MB)),解决以上问题。
echo 20000000 > /proc/sys/net/core/rmem_max echo 20000000 > /proc/sys/net/core/rmem_default echo 20000000 > /proc/sys/net/core/netdev_max_backlog
这样做的目的是提高网络传输性能,特别是在处理大量数据流时。这种改动,需要根据实际码流发送速度和接收程序的延时进行参数调优。
UDP 发送可能会丢包,一种原因是 CPU 发送 UDP 报文的速率超过了网卡 MAC 的发包速率,导致网卡MAC的发送缓冲队列满,引起了丢包。可以在内核下通过执行下面命令进行确认:
ifconfig eth0
如果打印的信息中 TX dropped 和 overruns 值基本相等,都增加较多,说明是网络MAC的发送缓冲队列满导致的丢包。以下命令可以减小发送缓冲区,让CPU发包速率慢一点,解决以上问题。
echo 20000 > /proc/sys/net/core/wmem_max echo 20000 > /proc/sys/net/core/wmem_default
这种改动,需要根据码流发送速率和丢包率的要求进行参数调优。
2. 使用 socket 接口时,如何正确工作在非阻塞模式下?
在网络编程中对于一个网络句柄会遇到阻塞IO 和非阻塞IO 的概念, 这里对于这两种 socket 先做一下说明:
阻塞IO:socket 的阻塞模式意味着必须要做完IO 操作(包括错误)才会返回。
非阻塞IO:非阻塞模式下无论操作是否完成都会立刻返回,需要通过其他方式来判断具体操作是否成功。
对于一个 socket 是阻塞模式还是非阻塞模式有两种方式来处理:
方法1:fcntl 设置;用 F_GETFL 获取 flags,用 F_SETFL 设置 flags | O_NONBLOCK; fcntl 函数可以将一个 socket 句柄设置成非阻塞模式:
flags = fcntl(sockfd, F_GETFL, 0); //获取文件的flags值 fcntl(sockfd, F_SETFL, flags | O_NONBLOCK); //设置成非阻塞模式
设置之后每次对于 sockfd 的操作都是非阻塞的。
flags = fcntl(sockfd, F_GETFL, 0); //获取文件的flags值 fcntl(sockfd, F_SETFL, flags & ~O_NONBLOCK); //设置成阻塞模式
设置之后每次对于sockfd 的操作都是阻塞的。
方法2:recv、send 系列的参数 (读取、发送时,临时将 sockfd 或 filefd 设置为非阻塞)。 recv、send 函数的最后有一个 flag 参数可以设置成 MSG_DONTWAIT,临时将 sockfd 设置为非阻塞模式,而无论原有是阻塞还是非阻塞。
recv(sockfd, buff, buff_size, MSG_DONTWAIT); //非阻塞模式的消息发送 send(scokfd, buff, buff_size, MSG_DONTWAIT); //非阻塞模式的消息接受
3. TOE 使能及使用注意事项
TOE 模块(TCP Offload Engine,TCP 卸载引擎) 同时实现两个网络接口数据的接收和发送,可以工作在 10/100/1000Mbit/s 模式下,支持半双工和全双工工作模式,提供 MII、RMII 和 RGMII 接口。TOE 模块能够通过硬件部分实现 TCP/IP 加速处理的功能,不但能够提升网络接口的吞吐量,还可以显著的降低 CPU 占用率。
Hi3536 网口默认使用的是 bypass 功能,使能 TOE 功能只需要如下操作即可:
修改文件系统的 /etc/init.d/S81toe 启动脚本:
将 insmod /hitoe/stmmac.ko 注释掉;
再将下列三句话使能,打开 TOE 功能:
echo 8192 > /proc/sys/vm/min_free_kbytes echo 200 > /proc/sys/vm/vfs_cache_pressure insmod /hitoe/stmmac.ko hitoe=1
由于这里保留空间增大了,相应的 bootargs 中 MEM 的配置也要相应的增大,否则会出现内存不够用的情况。
Hi3536 GMAC 每次使用 TOE 发送数据时,需要大块连续的物理内存,但是内核中大块连续内存的数量非常少。因此在使用前需要做如下处理,确保能够分配到足够多的物理内存。下述处理只是简单的举例,具体的数值需要根据业务场景使用的连接数来决定。
echo 8192 > /proc/sys/vm/min_free_kbytes echo 200 > /proc/sys/vm/vfs_cache_pressure
min_free_kbytes 表示最小保留内存的大小,缺省值为 8192,vfs_cache_pressure 表示设置了虚拟内存回收 directory 和 i-node 缓冲的倾向,缺省值为 100,推荐设置为 200,因为该参数的值越大,回收的倾向越严重。这样 TOE 就会有更多的物理内存使用。Hi3536 ETH 使用时如果网口出现内存分配不足的情况下可以在 shell 下进行如下设置(增大最小保留内存):
echo 16384 > /proc/sys/vm/min_free_kbyte
TOE 不支持选择性重传功能,而内核默认打开了网络模块的选择性重传,为了 Hi3536 在 TOE 模式下能与对端设备协商一致,需要关闭选择性重传:
echo 0 > /proc/sys/net/ipv4/tcp_sack
TOE 接收描述子个数可以配置,默认 4096,消耗 8MB 内存(每个描述子 2K)。补充说明:个数可以根据内存大小或应用场景配置。CPU 压力越大,网络压力越大,则配置描述子大可以提高性能,其他情况下可以减少配置,一般简单场景 256 即可,可以节省内存,配置范围 256~8192。配置方法举例:
insmod stmmac.ko hitoe=1 tnk_rx_fifo=4096
增加 socket 选项,可以通过 setsocketopt 来实现某个 socket 是否使用 TOE 功能,目前默认每个 socket 都使能 TOE。实现方法:在具体的业务 socket 层代码中定义如下宏:
#define SO_TOE_ENABLE 76
在创建 socket 连接的代码实现中添加 TOE 使能开关:
int val = 0; /* DISABLE TOE : val = 0 ENABLE TOE: val = 1*/ int len = sizeof(int); setsockopt(sockfd, SOL_SOCKET, SO_TOE_ENABLE, &val, len);
增加 socket 选项,可以通过 getsockopt 来获取某个 socket 是否处于 tcp 连接加速状态。实现方法:在具体的业务 socket 层代码中定义如下宏:
#define SO_TOE_STATE 77
当用户创建并使用 socket 后,用户可以通过如下代码在任意时刻获取 tcp 连接的加速状态:
int val; int len = sizeof(int); getsockopt(sockfd, SOL_SOCKET, SO_TOE_STATE, &val, &len);
如果返回的 val 值为 1,说明 tcp 连接处于加速状态,如果返回的 val 值为 0,说明 tcp 连接处于非加速状态。
增加对所有连接默认是否开启 TOE 加速的支持。如果用户希望默认所有连接不开启 TOE 加速,仅当主动通过 setsockopt 设置某条连接开启 TOE 时,这条连接才开启 TOE 加速特性,那么用户可通过内核文件系统 /proc 下的参数来进行设置。其中,/proc/sys/tnk/tnk_tcp_gmac0_enable 是网口 0 口的 TOE 使能开关,/proc/sys/tnk/tnk_tcp_gmac1_enable 是网口 1 口的 TOE 使能开关,向该 proc 节点写 1 表示所有连接默认开启 TOE 加速,写 0 表示所有连接默认不开启 TOE 加速。如果用户希望网口 0 默认所有连接不开启 TOE 加速,使用命令如下:
echo 0 >/proc/sys/tnk/tnk_tcp_gmac0_enable
这样,网口 0 所有连接默认都不会开启 TOE 加速,客户可以通过 setsockopt 来使能某条 socket 进入 TOE 加速。
4. TOE 模式下使用 socket 接口时的注意事项
在 TOE 模式下,不管是阻塞模式还是非阻塞模式,协议处理是由硬件完成的,当出现内核 buffer满时,都会给上层应用返回 EAGAIN,而在 Bypass 模式下,如果是阻塞模式,则出现内核 buffer 满时,不会返回 EAGAIN,而阻塞继续发送!
另外经过查询得知 send 的返回值是这样处理的:阻塞模式与非阻塞模式下,send 返回值 < 0 && (errno == EINTR || errno == EWOULDBLOCK || errno == EAGAIN) 表示暂时发送失败,需要重试,如果 send 返回值 <= 0, && errno != EINTR && errno != EWOULDBLOCK && errno != EAGAIN 时,连接异常,才需要关闭。
因此,建议应用程序在调用 send 时,若返回值 < 0 && (errno == EINTR || errno == EWOULDBLOCK || errno == EAGAIN) 应该延时等待一段时间再重新尝试发送,而不要直接调用 close 断开连接,则不会出现此问题。
- 上一篇:[外设篇] 设备驱动操作指南
- 下一篇:[福利线报] 天猫超市翻牌抽1~5元猫超卡
猜你还喜欢
- 03-29 [玩系统] Windows下强大的命令终端-Cmder
- 03-29 [系统技巧] Win10右键菜单添加“获取文件管理员权限”选项
- 03-29 [系统技巧] win10删除文件夹需要Administrator权限
- 03-09 [网络技巧] 如何使用IPv6地址直接访问http,https服务及Windows共享文件夹[UNC路径]
- 11-05 [系统技巧] 真的有后悔药!Win10超给力的备份功能你用过吗
- 11-05 [系统技巧] 发现Win11、Win10备份已禁用?帮你快速解决!
- 11-05 [电脑技巧] 科普|F1-F12快捷键有什么用?
- 11-05 [系统技巧] 永劫无间游戏卡顿、闪退 只需检查电脑这个设置
- 11-05 [系统技巧] Win10出现Runtime Error如何修复
- 11-05 [系统技巧] Win 10任务栏假死、无响应如何解决
- 11-05 [系统技巧] Win10的备份系统与还原 竟然这么简单
- 10-12 [系统技巧] ubuntu18.04安装openCV3.2.0详解(附加源码+第三方库)
取消回复欢迎 你 发表评论:
- 精品推荐!
-
- 最新文章
- 热门文章
- 热评文章
[文件传输] 双轨快传 v1.1.1 (同时使用USB和WIFI传输文件到电脑)
[系统辅助] 最快快捷键V1.2.47 一键切换窗口、启动程序、复制粘贴、按键映射、切换输入法
[实用工具] 老板键工具-呼来唤去v0.6.0 一键显隐窗口
[书籍] 《炁体源流(上下册)》 道家养生经典辑录 米晶子[pdf]
[即时翻译] 实时打字翻译工具-Typing-translationV3.0
[转换工具] TMSpeech 1.0免费实时语音转字幕软件
[Android] 电工计算器 v10.0.2.1-h
[美食] 曾经的黑龙江第一城,藏着中国烧烤王者
[媒体编辑] pyVideoTrans视频翻译和配音 v1.42
[趣味工具] 【桌面动态小装扮】蝴蝶1.0、蟑螂1.2、苍蝇1.3
[资料] [大学期末救急课] 猴博士+高斯课堂+斐多课堂,全集视频合集
[云资源] 价值2万元的老男孩Python教程
[书库] 史上最全摄影书推荐(附700本PDF版打包下载)
[云资源] 花了一千多元买的私人健身教程
[下载工具] Internet Download Manager 6.42.7 (IDM)
[影视] 灌篮高手 WEB-DL版下载/Slam Dunk/スラムダンク/灌篮高手:THE FIRST/灌篮高手电影版 2022 The First Slam Dunk 61.35G
[资料] 3000 套电影电视剧 LOGO 宣传片常用音效合集包
[安卓软件] 酷我音乐APP_v10.7.6.4 去广告破解豪华VIP版
[即时通讯] 微信PC版WeChat 3.9.9.43 多开防撤回绿色版
[安卓软件] Solid Explorer文件管理器APP 2.8.38 破解版
[云资源] 价值2万元的老男孩Python教程
[影视] 灌篮高手 WEB-DL版下载/Slam Dunk/スラムダンク/灌篮高手:THE FIRST/灌篮高手电影版 2022 The First Slam Dunk 61.35G
[云资源] 花了一千多元买的私人健身教程
[书库] 史上最全摄影书推荐(附700本PDF版打包下载)
[动画] 北斗神拳(1984) [两季合集] [MKV]
[资料] 抗战阵亡将士资料+续编
[电视剧] 三体 (2024) 全8集 网飞版本 中文字幕 合集
[纪录片] 河西走廊【10集 国语 中文字幕 1080P 10.8G MP4】
[电影] 2024年喜剧片·热辣滚烫 [mp4]
[影视] 铁爪 WEB-DL版下载 2023 The Iron Claw 23.48G
- 最新评论
-
我想看看mw2ddyy 评论于:04-26 好东西阿zfy123123 评论于:04-18 谢谢楼主xiaoqi 评论于:04-12 勿在线解压,勿手机解压,请在电脑上用最新款压缩软件解压!推荐360压缩或者好压CC下载站 评论于:04-10 无法解压啊,客服能不能给个解压教程ravengrey 评论于:04-10 谢谢支持!!CC下载站 评论于:03-26 很棒的资源,感谢分享云体风身 评论于:03-26 感谢分享,好东西云体风身 评论于:03-26 谢谢支持!CC下载站 评论于:03-14 央视精品,感谢付出提供。qwer9009 评论于:03-14
- 热门tag