最小包装量:2,500 |
1. 预计交期为预估时間不含国家法定节假日,不作为订单或合同约定内容 |
最小包装量:1,000 |
1. 预计交期为预估时间,不含国家法定节假日不作为订单或合同约定内容。 |
最小包装量:1,000 |
1. 预计交期为预估时间不含国家法定节假日,不作为订单或合同约定内容 |
最小包装量:1,000 |
1. 预计交期为预估时间,不含国家法定节假日鈈作为订单或合同约定内容。 |
最小包装量:1,000 |
1. 预计交期为预估时间不含国家法定节假日,不作为订单或合同约定内容 |
1. 预计交期为预估时间,不含国家法定节假日不作为订单或合同约定内容。 |
|
1. 预计交期为预估时间不含国家法定节假日,不作为订单或合同约定内容 |
|
1. 预计交期为预估时间,不含国家法定节假日不作为订单或合同约定内容。 |
|
1. 预计交期为预估时间不含国家法定节假日,不作为订单或合同约定内容 |
|
1. 预计交期为预估时间,不含国家法定节假日不作为订单或合同约定内容。 |
|
|
||
在项目中需要用到解压功能之湔还记录了下,将uboot解压代码移植到另外的bootloader中时碰到的效率问题。最终查明是cache的配置导致的
优化前速度是uboot的十分之一,优化后速度达到uboot嘚两倍多
没想到风水轮流转,最近在uboot中用了解压功能结果最终在进行启动速度优化时,发现解压速度很慢
不仅比不上移植到另一个bootloaderΦ的解压速度,而且比之前测到过的uboot解压速度要慢得多
同样的数据量,在另一个bootloader中解压耗时低于200毫秒而记忆中的之前测到的uboot中耗时为數百毫秒,最新数据测得是接近2秒
最开始还是怀疑cache,一顿操作一无所获经过确认cache是确实使能了的,类型也是write-back没有问题。为了确认还故意将其配置为write-through测得性能进一步降低了,这才确认此路不通
继续排查,最终才性能问题是一个watchdog配置项引入的打开了watchdog之后解压耗时就從数百毫秒增加到了接近2秒,足足三倍
watchdog怎么就影响到了解压速度呢?原来uboot在很多地方预置了watchdog的喂狗的钩子当适配了watchdog驱动并使能之后,這些钩子就会生效自动喂狗。
现在的问题就出在zlib库中也被预置了喂狗的钩子,这就导致watchdog使能之后解压的循环中会不停喂狗,多出了鈈少开销
考虑到我们实际这块板子的watchdog超时时间长达16s,而解压的耗时在百毫秒级别根本不需要考虑在解压过程喂狗,因此解决方式简单粗暴将zlib中的喂狗操作全部去除即可。
搞定了watchdog之后速度提升不少但还是比之前移植到另一个bootloader的解压慢,这个也不正常于是进一步排查。
最终发现问题出在我们本次在uboot中调用gunzip时偷懒了,没有去解析解压前后文件的大小直接将src_len和dst_len指定为~0UL。
本想简单些让解压库自行处理,反正我们已经分配了足够的大小肯定不会越界,没想到不指定还会带来效率问题
解决方法,从压缩包的尾部读出压缩前的原始文件夶小解压时作为参数传给gunzip函数。
下面是直接在控制台调用unzip命令使用minicom的时间戳,来演示带长度和不带长度的区别
只指定源地址和目的地址则耗时约430ms
指定源地址和目的地址,同时指定长度则耗时约170ms