最近测试了FFmpeg在RISC-V架构CPU上的编译运行情况。测试用的开发板是赛昉VisionFive 2,具体配置如下:
在开发板上编译一次FFmpeg耗时约11分钟。
$ time ./build_ffmpeg.sh
real 10m57.876s
user 22m27.586s
sys 2m27.434s
对应的编译配置如下:
configure --prefix=/home/quink/work/ffmpeg-ci/install \
--cc=gcc --cxx=g++ \
--extra-cflags=-I/home/quink/work/ffmpeg-ci/install/include \
--extra-ldflags='-L/home/quink/work/ffmpeg-ci/install/lib' \
--extra-libs='-lstdc++ -pthread -lm' \
--pkg-config-flags=--static \
--enable-libx264 \
--enable-libx265 \
--enable-libdav1d \
--enable-nonfree \
--enable-gpl \
--enable-version3 \
--enable-rpath \
--enable-libxml2 \
--enable-openssl \
--disable-doc \
--samples=/home/quink/work/ffmpeg-ci/ffmpeg-fate-sample \
--ignore-tests= \
--disable-stripping \
--enable-vulkan \
--enable-libdrm \
--enable-libzimg \
--enable-libuavs3d \
--enable-libass \
--enable-libdavs2 \
--enable-libfreetype \
--enable-libfontconfig \
--enable-debug \
--disable-optimizations
基本算是全量编译,还开启了不少第三方库。特别值得一提的是
- 关掉了编译优化(disable-optimizations),如果开启优化,耗时会更长一些,特别是开启lto链接时优化
- 关掉编译优化是为了方便个人开发调试,正常业务一定不要用disable-optimizations(看到太多业务上线用的FFmpeg关掉了汇编优化和编译优化)
再看FFmpeg fate(FFmpeg Automated Testing Environment)测试的耗时:
$ time make fate -j4
real 61m16.944s
user 220m6.735s
sys 6m51.073s
运行一次测试耗时一个小时。
虽然fate测试耗时久,但我可以配置在空闲的时候运行。开发过程中反复编译是无法避免的,所以我要找个加速的方式。
我有两块板子,可以用distcc做个分布式编译。
分布式编译是个古老的技术,distcc首次发布是2002年。如今,分布式编译已经成了CI/CD的基建部分。
distcc的安装配置非常简单,可以参考各个发行版的wiki,例如https://wiki.gentoo.org/wiki/Distcc
./configure --cc='distcc gcc' --cxx='distcc g++' ...
第一次测试结果:
real 9m14.739s
user 14m4.852s
sys 2m22.841s
提升少的可怜。观察server端的运行情况,几乎处于空闲状态,很少运行编译。
问题应该出在IO。测试两个机器的网络传输速度,不到100Mbps,且非常不稳定。
换了一个路由器,关掉distcc的日志,第二次测试结果:
real 8m52.195s
user 14m25.578s
sys 2m23.138s
两个设备分布编译耗时约9分钟,有提升,还是不太理想。client和server的CPU空闲时间太多,没有跑满。瓶颈可能在文件IO叠加网络IO。两个板子系统都是装在TF卡上的,大文件读写速度20MB/s。计划换成固态硬盘再测试下。
既然distcc提升有限,再加上ccache缓存试下吧。ccache和distcc一起使用见
https://ccache.dev/manual/3.0.html#_using_ccache_with_distcc
ccache + distcc测试结果:
real 6m21.325s
user 8m15.273s
sys 2m23.632s
以上是运行一次configure + make。开发过程中一般不需要频繁执行configure,测试make clean + make的耗时:
real 4m48.702s
user 7m18.338s
sys 2m6.419s
全量编译一次在5分钟以内,算是可以接受的结果了。
短期期待固态硬盘对编译速度的提升,长期期待下RISC-V芯片的性能提升。十年前拿ARM当PC CPU是hacker行为,今天是司空见惯,或许RISC-V也可以。
作者:quink
来源:Fun With FFmpeg
原文:https://mp.weixin.qq.com/s/opHv5Oipj9wzj1dtHIKTSg
版权声明:本文内容转自互联网,本文观点仅代表作者本人。本站仅提供信息存储空间服务,所有权归原作者所有。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至1393616908@qq.com 举报,一经查实,本站将立刻删除。