.net AOT发布方案
之前介绍了手机上构建linux解决AOT的发布问题,实际上,这边还做过一些其他尝试,比如使用Qemu直接在windows上模拟一份arm64环境,做AOT发布和测试,以及一个实体的RK3568主板,基于Armbian来做发布和测试。
但是Qemu的跨架构模拟,性能折损太厉害了,AOT编译时长很难满意,这边做项目前期,是用手机做编译。
后续想到dgx spark既然也是arm,就改为直接用dgx spark,编译速度直接起飞。
这里整理下试过的.net AOT发布方案:
1.RK3568板卡+Armbian
使用的是淘来的seawo 一体机主板,烧入了github上的开源Armbian镜像。
主要问题是要解决dtb问题,让网口和hdmi能正常工作。
使用.net 10发布linux-arm64嵌入式项目,发布时长大概10分钟
如果要控制libc版本,就需要上docker,通过Ubuntu20.04镜像构建发布,这样能将libc版本依赖降低到目标版本。
2.Qemu模拟ARM64 ubuntu20环境
使用13代 i7-13700H,Qemu模拟6核a76,4G内存
好处是架构模拟基本贴近实机,但是编译速度慢
使用.net 10发布linux-arm64嵌入式项目,发布时长大概15分钟或更久
3.使用888的手机chroot+debian10
折腾环境比较费劲,加上现在linux deploy已经好几年前就放弃支持了,新版本linux无法构建。
好处是实机架构,性能很好。
使用.net 10发布linux-arm64嵌入式项目,发布时长大概2分钟出头,部分情况下120s。
4.dgx spark
原本做AI相关研究的,突然在项目中发挥了另外的作用,挺欣喜。
好处是原生ARM64架构,而且有数量足够的大核。
使用.net 10发布linux-arm64嵌入式项目,发布时长大概1分钟不到,大部分情况只要40s出头。
如果要控制libc版本,就需要上docker,通过Ubuntu20.04镜像构建发布,这样能将libc版本依赖降低到目标版本。
最近发现使用chroot构建ubuntu20.04,这种方案性能更好,而且使用也更加方便,避免需要docker中来回拷贝发布程序。
5.使用PublishAotClang实现跨平台发布
这个是近期博客园看到帖子提供的技术方案,很好很强大,基本解决了大部分问题,而且带来一些其他惊喜。感谢技术工作者的默默付出。
好处直接windows上跨平台跨(linux)发布到arm架构,包括32、64位,其中32位的arm发布彻底打消了我去购入实机Arm32的冲动(之前想找个旧A15架构的板卡,做arm32的发布的)
而且内置了musl的支持,可实现静态编译,可以搞些骚操作。
使用.net 10发布linux-arm64嵌入式项目,发布时长大概1分钟,已经很快了。
但是没有dgx spark快(即便对比发布x64本地平台,依然没有它发布arm64快),dgx spark的CPU也是真的有点东西。
下期讲些用musl弄的骚操作。
浙公网安备 33010602011771号