搜索

[USB芯片] CH340的驱动CPU占用率比竞品高很多

[复制链接]
5788|31
手机看帖
扫描二维码
随时随地手机跟帖
imdx|  楼主 | 2021-6-30 11:50 | 显示全部楼层 |阅读模式
看到有人反馈CH340一个串口能占15%的CPU,一台电脑多插几个CH340同时跑基本就没法用了。于是利用手头的工具测试了下:
同一台PC,Win7x64,同一个软件sscom4.2,115200波特率自发自收sqlite3.c文本文件。
CH340N的占用率在6%到10%之间跳动,没有到15%但是最高也超过10%了,偏差不是太大。
FT2232D方案的USBTTL CPU占用率2%左右跳动。
是不是驱动的bug?

使用特权

评论回复
WCH@TECH39| | 2021-6-30 18:06 | 显示全部楼层
您好,您反馈的现象可能与串口应用软件开启了显示功能有关。您可以使用我司的串口软件,在是否显示接收2种情况下看下CPU的占用率情况。软件地址:http://www.wch.cn/downloads/COMTransmit_ZIP.html

使用特权

评论回复
imdx|  楼主 | 2021-7-1 08:10 | 显示全部楼层
WCH@TECH39 发表于 2021-6-30 18:06
您好,您反馈的现象可能与串口应用软件开启了显示功能有关。您可以使用我司的串口软件,在是否显示接收2种 ...

测试是在同样一个sscom4.2软件下进行的,只有底层驱动有差异。因此你说的与应用有关是不成立的。
你们可以使用FTDI的芯片同样软件对比测试一下,很容易复现出结果。用这个软件的原因是它支持发送文件,可以对串口进行压力测试。

使用特权

评论回复
imdx|  楼主 | 2021-7-1 08:22 | 显示全部楼层
WCH@TECH39 发表于 2021-6-30 18:06
您好,您反馈的现象可能与串口应用软件开启了显示功能有关。您可以使用我司的串口软件,在是否显示接收2种 ...

既然你提到这个软件,我也顺手下载测试了下。实验结果如下:
使用CH340N,115200自发自收,CPU占用率在10%-12%之间跳动。
使用FT2232D,115200自发自收,CPU占用率在3%-6%之间跳动。
整体上这个软件的占用率比sscom4.2要高,但是这只能说明这个软件CPU占用率比sscom4.2高。
同样软件下,CH340驱动的CPU占用率确实比FT2232D要高很多。
建议你们还是检查下CH340驱动代码,如果开源出来的话我可以帮你们检查。
有的人做测试平台,需要一台PC插多个USBTTL串口,CPU占用率会限制能插的USBTTL个数。

使用特权

评论回复
90houyidai| | 2021-7-1 10:12 | 显示全部楼层
CPU占用率还好吧,我现在怕的是内存占用率

使用特权

评论回复
567| | 2021-7-1 10:39 | 显示全部楼层
不仅如此,CH340还会影响同一电脑其它USB端口的设备。
saleae逻辑分析仪,自身没有缓存,将采样数据通过高速USB实时传输至PC进行存储和分析,最高支持24M采样率8通道。
如果电脑上插了CH340,即使没有打开串口,没有数据传输,saleae逻辑分析仪最高采样率下会出错,只有将采样率降至很低才能用。
测试了其它几家USB转串口芯片,包括FT232,PL2303,CP2102,XR21等,均无此种毛病。
测试环境为win7 x64,均为独立USB端口,没有使用HUB。

使用特权

评论回复
dandantcb| | 2021-7-1 10:55 | 显示全部楼层
听你们这么一说,我得持续关注一下。。后面有项目要做USB转串口的模块给客户。之前一些小的项目喜欢用CH340,主要是管脚少,好用。

使用特权

评论回复
WCH@TECH39| | 2021-7-2 09:37 | 显示全部楼层
本帖最后由 WCH@TECH39 于 2021-7-2 10:15 编辑

#9

使用特权

评论回复
imdx|  楼主 | 2021-7-2 12:32 | 显示全部楼层
此外,我还测试了CH340和FT2232D在Linux下的表现,实测两者差不多,CPU占用率都是10%左右。

使用特权

评论回复
LiuShuai1981| | 2021-7-2 13:34 | 显示全部楼层
本帖最后由 LiuShuai1981 于 2021-7-2 14:55 编辑

感谢楼上的分享,如上问题,为什么楼上会看到340与同类不一样的情况,与驱动给应用层传输数据方式也有关系,如有数据时实时报,还是等到一定数量后再报。
1.实时报,数据到达的实时性会好,驱动收到数据后,实时上报,不拼包,不等待;
在与外设通讯时,对应答时间一般会要求,此时要求驱动收到数据就要上报,过长延时,会造成通讯超时;
2.非实时报,传输效率会好,但实时性可能会受影响。注重每次请求尽可能多传递数据,而串口速率较慢,如115200波特率,100毫秒只有1.1K字节。而电脑的主频普遍在1GHZ以上。
两种方式中,第一种方式均能兼顾数据的实时性和传输效率(应用层增加读取间隔,串口数据速度不高,没有必要每一毫取就读)。
CH340等芯片目前采用的是如上第一种,FT默认会启用16MS延时。
针对这种情况,我们是可以考虑在驱动里增加一个等待机制的设置。

楼上会看到不一样的效果,见解如下:
1.CPU占用率,是因为显示数据频率过高占用了过多的CPU,任务管理器内是可以直接看到。内核驱动的占用率,任务管理器不会直接显示,但可以用100-应用程序的占用率。
2.显示频繁,是与取数据的频率有关,频率高,执行次数就多。
3.读串口数据的写法有很多种:同步,异步,事件,查询串口缓冲区加串口读,这些方法与实际应用有关。
   SSCOM软件写法是,先查询串口缓冲区再进行指定长度的串口读,所以使用CH340等芯片时,串口软件的读写次数与使用FT芯片相比会多,间接导致SSCOM软件CPU占用率上升。
   串口工具一般注重实时显示,基于楼上的意见,串口工具倒时可以增加一个读间隔超时,以适应楼上的需求。

使用特权

评论回复
WCH@TECH39| | 2021-7-2 21:26 | 显示全部楼层
您好,根据如上测试,我们做了相关对比验证,详细测试过程见链接中视频。
结论是:CH340驱动的CPU占用率没有异常,电脑上多个CH340同时使用也不受影响。
测试计算机
CPU:i3-6100
系统:Win7 64位
测试硬件
CH340C
CP2102
FT232R
1、使用COMTransmit软件测试,115200波特率,回环测试,关闭接收显示,发送文件,平均CPU占用率:
CH340:约3%
CP2102:约3%
FT232:约3%
2、使用COMTransmit软件测试,115200波特率,回环测试,开启接收显示,发送文件,平均CPU占用率:
CH340:约15%
CP2102:约15%
FT232:约3%
对现象1和2进行分析,原因为FT驱动内部包含“延迟计时器”参数,接收到USB数据后不会立刻传递给串口,该延迟设定会使得应用软件单次读取较多数据量,相当于减小串口读取的次数,间接降低了界面刷新速率,FT驱动该时间参数可支持设定,如下图所示。默认设定为“16”毫秒。
1.png
当在串口属性中设置延时时间为1”毫秒后,再次进行如上测试,结果为:
FT232:约24%
因CH/CP芯片驱动考虑收发实时性,驱动中接收到数据默认不会经过任何延时处理,所以会出现如上测试的不同。
感谢您对于我司产品的测试与意见反馈,如若方便,您可以留个联系方式,便于随时与我司技术人员沟通和分享有关产品与技术。

测试过程视频链接:https://pan.baidu.com/s/1FOmMSBF9EwRo0SMbBSz3iQ
提取码:bivq

使用特权

评论回复
imdx|  楼主 | 2021-7-2 21:59 | 显示全部楼层
WCH@TECH39 发表于 2021-7-2 21:26
您好,根据如上测试,我们做了相关对比验证,详细测试过程见链接中视频。结论是:CH340驱动的CPU占用率没有 ...

测试1和2的差异在于2开了接收显示,CH/CP的CPU占用率由3%增加到了15%,也就是数据从串口的TXD输出,到RXD接收,回到PC的内存中,FT的驱动可以设置一个等待时间,比如16ms,然后统一读取16ms内收到的数据,而CH/CP是收到数据就读取数据,造成读取次数过多,增加了CPU占用,这样理解准确吗?

本质上还是由于驱动程序对实时性和CPU占用率的折衷选择造成的吧?

使用特权

评论回复
WCH@TECH39| | 2021-7-3 10:33 | 显示全部楼层
imdx 发表于 2021-7-2 21:59
测试1和2的差异在于2开了接收显示,CH/CP的CPU占用率由3%增加到了15%,也就是数据从串口的TXD输出,到RXD ...

您好,驱动中设置延迟定时器的作用,可理解为驱动上传给USB主机的超时等待时间,上传的规则是芯片串口接收大于62字节时立刻上传或者缓冲区至少1字节但不满62字节定时器超时上传。另,也可以通过修改上图中“USB传输大小”的设置,如将4096修改为512,来提升实时性。详细细节,您可以查阅FT相关资料,这里不过多展开。

接收相同数据量的情况下,数据分多次小包读取时,每读取到数据界面会相应刷新一次,因此界面刷新率与CPU占用率相对于大包读取时频率高出很多。一般应用下,如数据采集和串口下载场景无需实时打印串口接收内容的,也是不会增加CPU负担的。

一般情况下,类似于CH/CP系列芯片驱动的做法,会优先考虑串口收发实时性。若用户实际需要,我们也可以帮其定制类似FT驱动的处理方式。


使用特权

评论回复
imdx|  楼主 | 2021-7-3 14:15 | 显示全部楼层
WCH@TECH39 发表于 2021-7-3 10:33
您好,驱动中设置延迟定时器的作用,可理解为驱动上传给USB主机的超时等待时间,上传的规则是芯片串口接收 ...

下面是FT2232D和CH340的串口设置,可以看到,FT的设置明显选择更多一些,建议CH340驱动借鉴FT的做法,默认还是使用现在的设置。
用户可以手工设置延时计时器,给那些不在乎延迟,在乎CPU占用率的用户一个设置机会。单独维护一个私有驱动是不可取的。

2021-07-03_141016.jpg
2021-07-03_141106.jpg

使用特权

评论回复
daichaodai| | 2021-7-3 18:40 | 显示全部楼层
这个平时还没怎么注意

使用特权

评论回复
WCH@TECH39| | 2021-7-5 09:59 | 显示全部楼层
imdx 发表于 2021-7-3 14:15
下面是FT2232D和CH340的串口设置,可以看到,FT的设置明显选择更多一些,建议CH340驱动借鉴FT的做法,默 ...

感谢您的建议与反馈。

使用特权

评论回复
imdx|  楼主 | 2021-7-6 08:50 | 显示全部楼层
本帖最后由 imdx 于 2021-7-6 08:53 编辑
WCH@TECH39 发表于 2021-7-3 10:33
您好,驱动中设置延迟定时器的作用,可理解为驱动上传给USB主机的超时等待时间,上传的规则是芯片串口接收 ...

下面的“驱动”的意义理解是否准确?

驱动(这里的“驱动”指的是PC中的驱动程序?)中设置延迟定时器的作用,可理解为驱动(这里的“驱动”指的是CH340的固件?)上传给USB主机的超时等待时间,上传的规则是芯片串口接收大于62字节时立刻上传或者缓冲区至少1字节但不满62字节定时器超时上传。

也就是说,目前FT芯片的这个特性,是在FT芯片内部的固件中实现的,对于已经上市的CH340(固件无法更新)是无法通过更新PC的驱动程序来解决的,这样理解对吗?

这个规则:“上传的规则是芯片串口接收大于62字节时立刻上传或者缓冲区至少1字节但不满62字节定时器超时上传”,是FT芯片的规则吧?对于CH340,这个规则是否是相同的?如果相同,只是超时时间固定不能设置?如果固定不能设置的话,这个固定的时间是多少ms?

使用特权

评论回复
WCH@TECH39| | 2021-7-6 13:42 | 显示全部楼层
本帖最后由 WCH@TECH39 于 2021-7-6 13:55 编辑

1、驱动是指PC端驱动程序;
2、串口超时参数,默认各家芯片都会包含,CH340同样支持驱动设定默认超时,根据波特率不同,会自动计算速率并设定超时时间。
3、不建议通过修改串口超时来达到大包返回的效果,如之前回帖,FT的特性根本上不是由“串口超时”决定。而是由“USB传输大小”参数起到特殊作用。
事实上,帖子中所讨论的效果均通过驱动可以实现。



使用特权

评论回复
kiwis66| | 2021-7-7 19:06 | 显示全部楼层
看到你们如此严谨的讨论资源占用的问题并进行对比
想想平时根本没关心这些
惭愧啊

使用特权

评论回复
LiuShuai1981| | 2021-7-7 21:14 | 显示全部楼层
必须关注。而且那么多用户使用。
给出详细的信息,只是想给你们更清楚的回答。

使用特权

评论回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 我要提问 投诉建议 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

本版热帖

本版活跃用户

优质原创写原创,赢大奖

编辑推荐

  • 1 kk的回忆 得到打赏 ¥561.01
  • 2 火星国务卿 得到打赏 ¥518.00
  • 3 呐咯密密 得到打赏 ¥295.00
  • 4 小叶三千 得到打赏 ¥210.00
  • 5 jinglixixi 得到打赏 ¥190.00
  • 6 Gavin3389 得到打赏 ¥180.00
  • 7 神圣雅诗人 得到打赏 ¥170.00
  • 8 xyz549040622 得到打赏 ¥150.00
  • 9 linghz 得到打赏 ¥120.00
  • 10 137017878 得到打赏 ¥115.00
在线客服 快速回复 返回顶部 返回列表