打印
[USB芯片]

CH340的驱动CPU占用率比竞品高很多

[复制链接]
15633|36
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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 | 只看该作者
本帖最后由 WCH@TECH39 于 2021-10-3 17:39 编辑

您好,您反馈的现象可能与串口应用软件开启了显示功能有关。您可以使用我司如下串口 软件,并在是否显示接收 2 种情况下看下 CPU 的占用率情况。软件地址: http://wch.cn/downloads/COMTransmit_ZIP.html
CPU占用率差别与串口软件数据的刷新显示的频率有关。关闭显示时,CH、CP、FT的CPU占用率均为3%左右,所以不是驱动程序问题,而是显示刷新的原因。
打开显示后不同,是因为CH340和CP2102侧重于工业应用和实时性,有数据就尽快通知应用层(串口工具频繁来取、频繁刷新显示),而FT默认是积聚一段时间的数据再通知应用层(工具显示刷新少),这只是FT产品定位与CH/CP不同,如调试类工具软件需要显示,而协议软件不需要显示,更注重实时性。






使用特权

评论回复
板凳
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个数。

使用特权

评论回复
5
90houyidai| | 2021-7-1 10:12 | 只看该作者
CPU占用率还好吧,我现在怕的是内存占用率

使用特权

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

使用特权

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

使用特权

评论回复
8
WCH@TECH39| | 2021-7-2 09:37 | 只看该作者
本帖最后由 WCH@TECH39 于 2021-7-2 10:15 编辑

#9

使用特权

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

使用特权

评论回复
10
LiuShuai1981| | 2021-7-2 13:34 | 只看该作者
本帖最后由 LiuShuai1981 于 2021-10-3 16:33 编辑

见2楼回复,CPU占用率区别是频繁显示刷新所致。刷新快肯定比刷新慢占用的CPU会多一点。
工程师对比过CH340、CP2102和FT的,CH340和CP2102测试结果差不多,因CH和CP侧重于工业应用和实时性,有数据就立即通知应用层,而FT默认是积聚一段时间的数据再通知应用层。

使用特权

评论回复
11
WCH@TECH39| | 2021-7-2 21:26 | 只看该作者
本帖最后由 WCH@TECH39 于 2021-10-3 16:14 编辑

您好,根据如上测试,我们做了相关对比验证,详细测试过程见链接中视频。
结论是: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%
FT驱动的“延迟计时器”参数(默认16毫秒)会影响串口读取/刷新显示次数,FT如果要达到CH/CP的实时性,可设置参数为1毫秒,结果为:
FT232:约24%

测试视频链接:https://pan.baidu.com/s/1wjmZCAGSX4ALKVEAe_tZvA
提取码:hhhc

使用特权

评论回复
12
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占用率的折衷选择造成的吧?

使用特权

评论回复
13
WCH@TECH39| | 2021-7-3 10:33 | 只看该作者
本帖最后由 WCH@TECH39 于 2021-10-3 18:23 编辑
imdx 发表于 2021-7-2 21:59
测试1和2的差异在于2开了接收显示,CH/CP的CPU占用率由3%增加到了15%,也就是数据从串口的TXD输出,到RXD ...

我们可以再增加这种低刷新、低实时的选项,毕竟有些调试打印类应用,没必要按工业级应用那样对待。
可这样理解:CH340和CP2102采用了小包快跑的模式,类似5个18人小巴,即满即开,对应的另一模式是2个45人拼大巴,运载能力强。





使用特权

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

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




使用特权

评论回复
15
daichaodai| | 2021-7-3 18:40 | 只看该作者
这个平时还没怎么注意

使用特权

评论回复
16
WCH@TECH39| | 2021-7-5 09:59 | 只看该作者
本帖最后由 WCH@TECH39 于 2021-10-3 18:26 编辑
imdx 发表于 2021-7-3 14:15
下面是FT2232D和CH340的串口设置,可以看到,FT的设置明显选择更多一些,建议CH340驱动借鉴FT的做法,默 ...

感谢您的建议与反馈。

使用特权

评论回复
17
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?

使用特权

评论回复
18
WCH@TECH39| | 2021-7-6 13:42 | 只看该作者
本帖最后由 WCH@TECH39 于 2021-10-3 18:26 编辑

1、驱动是指PC端驱动程序,如上所指均为“驱动程序”特性与芯片无关。
2、CH340是实时处理,有数据就立刻通知应用层来取,无延迟。
3、FT默认是非实时处理,会积聚数据再通知应用层来取。




使用特权

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

使用特权

评论回复
20
LiuShuai1981| | 2021-7-7 21:14 | 只看该作者
必须关注。而且那么多用户使用。
给出详细的信息,只是想给你们更清楚的回答。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

120

主题

901

帖子

8

粉丝