
Arm这次是真的自己下场做CPU了。上周看到“Arm首个自研CPU落地火山引擎”这个消息我第一反应是Arm终于不再只做那个卖IP授权的“军火商”而是亲自下场造“整弹”了。这事儿放在整个服务器芯片市场里分量不亚于当年苹果M1对桌面端的冲击。新紫光集团也要用这背后不只是“多了一家客户”这么简单。我在芯片行业和云厂商圈子里摸爬滚打这么多年见过太多“纸面发布”但Arm这次从架构设计到云上实例落地再到国内产业集团跟进采购链路铺得非常完整。这篇文章我就以个人视角把这件事拆开揉碎聊一聊Arm自研CPU到底强在哪、火山引擎为什么会成为首个落地平台、新紫光集团跟上意味着什么以及如果你想在云上测试或者迁移这套Arm实例具体该怎么操作、有哪些坑要避。1. 从卖图纸到造芯片Arm自研CPU的战略转身1.1 以前Arm不造芯片为什么现在改了打法先说一个很多非从业者不太清楚的事实过去几十年Arm一直是“只卖图纸不造芯片”的典型代表。手机SoC里的Cortex-A系列、嵌入式设备里的Cortex-M系列Arm只是把IP核授权给高通、联发科、苹果、华为这些客户由他们自己去设计周边电路、找代工厂流片。Arm本身既不流片也不卖整颗芯片。这个模式的好处是生态巨大坏处也很明显——Arm永远赚的是授权费天花板肉眼可见。这次Arm推出的自研CPU并不是再做一个叫Cortex的IP核去授权而是做了一颗完整的、由Arm自己设计的服务器端CPU芯片直接对标的就是Ampere的AmpereOne、英特尔的Xeon和AMD的EPYC。换句话说Arm选择了从“军火供应商”变成“参战方”这等于跟自己的客户变成了竞争者。高通和联发科那边怎么想我不知道但至少从数据中心市场的逻辑看Arm这步棋是憋了很久才走出来的。为什么现在才走三个关键词制程成熟、生态补齐、市场窗口。制程方面3nm/5nm工艺在先进节点上的成本已经被手机大厂摊薄了Arm作为设计方现在流片的经济性比五年前好太多。生态方面过去大家不敢在服务器上碰Arm最大的顾虑是软件不兼容但过去五年从数据库、中间件到容器编排主流软件的Arm原生支持早就陆续补上了。市场窗口方面全球数据中心对能效比的要求越来越高电价和散热成本逐年上涨x86在性能上面仍有优势但“每瓦性能”这个指标上Arm架构天然占优。火山引擎愿意第一个吃螃蟹Arm也愿意拿自己的头号产品出来试水两边一拍即合这件事就这么落地了。1.2 这次自研CPU和Neoverse到底是不是一个东西这里要特别强调自研CPU和Neoverse IP不是一回事。业界很多人看到新闻就喊“Arm的Neoverse V3来了”严格说这不准确。Arm近几年的Neoverse系列V1、V2、N2、V3等确实是面向服务器的IP核但它仍然是“图纸”最终做出来的芯片是英伟达GH200里的Grace Superchip还是亚马逊Graviton4那是人家自己设计整合的。这次Arm自己自研的这颗CPU我看现有信息披露核心是基于Neoverse平台但由Arm独立完成了整颗SoC级设计包括互连、内存控制器、PCIe控制器以及一致性接口不再停留在IP阶段。你可以理解为Neoverse是发动机图纸自研CPU是Arm把这台发动机装到了自己制造的车架、变速箱、底盘上面做成了一辆能直接上路的整车然后卖整车给云厂商。这一点和英伟达Grace系列的动作逻辑高度相似。英伟达买下Arm授权但后来收购失败干脆自己基于Arm指令集架构定制CPU核心整合进自家GPU生态。Arm现在也是这个套路——自己掌控从指令集到SoC设计的每一步不给中间商赚差价的机会。1.3 直接对标Grace和Graviton4参数上怎么看这就是大家最关心的性能问题了。网上目前能扒到的Arm自研CPU信息有限但结合Arm近年实验室数据和火山引擎发布时的官方口径有几个关键参数值得重点关注。维度Arm自研CPU当前型号说法C1-260系列英伟达Grace亚马逊Graviton4核心数最高可达192核心72核心192核心内存DDR5 HBM可选LPDDR5X仅为Grace方案DDR5互连自研CMN一致性总线NVLink-C2C自研单核IPC较上一代Neoverse V2提升显著基于Armv9基于Armv9重点优化虚拟化、内存带宽密度、云原生负载AI/HPC高速互连通用计算成本优化这个表我建议各位理性地看。真实性能最终要等SPECint、SPECfp这些跑分数据出来才有答案云厂商宣传的“性能提升百分之多少”往往有测试场景水分。但从架构设计的角度有几个信号能透露Arm这次是真的认真了第一是核心数做到了192个这是对标目前x86旗舰双路配置的规格说明Arm对这颗芯片在多核扩放下的一致性互连有信心。第二是内存带宽密度成了重点优化项现在的云原生应用、大模型推理、大数据分析瓶颈早就不是算力而是内存喂不喂得饱Arm把内存控制器和CCE一致性引擎放在同一维度去设计思路是对的。第三是对虚拟化做了硬件级优化x86云服务器时代让客户迁移最痛苦的就是虚拟化开销损耗Arm想说服云厂商大规模用这方面必须实打实拿出东西来。2. 火山引擎凭什么成为Arm首个自研CPU的落地平台2.1 谁会愿意当第一个“小白鼠”火山引擎的底气在哪每次有新芯片出来最难的不是流片成功而是找到第一个愿意量产的客户。回溯历史Ampere找的是Oracle CloudGraviton找的是AWS自己的云Grace找的是英伟达自家的DGX系统。Arm自研CPU找上火山引擎这件事翻译成通俗语言就是云厂商愿意拿自己的真实生产环境帮新芯片背书。火山引擎接盘这颗芯片的逻辑我看来有三个一是字节跳动的自身业务需求超级匹配。抖音、今日头条这些产品面对的是海量小请求、高并发、大内存带宽消耗的负载这类负载恰恰是Arm SoC的甜点区。字节体系内早就大规模部署过基于Arm架构的服务器此前主要是Ampere火山引擎在Arm原生的虚拟化、调度、容器化上已经积累了很长一段时间的运行经验不是从零开始。二是火山引擎的“激进”策略。中国云市场阿里云有倚天710华为云有鲲鹏腾讯云后来也有星星海火山引擎作为后来者要想在公有云占领心智必须拿出有辨识度的产品。“国内首个搭载Arm自研CPU的云服务器”这个标签比单纯拼价格有分量得多。三是能给客户一个迁移的台阶。火山引擎已经有了比较完善的Arm镜像生态和跨架构迁移工具配合Android/ARM原生应用开发热潮很多人开发移动端应用都涉及arm运行时云上Arm实例已经不是闷头自己玩而是能给开发者和企业提供迁移工具包。2.2 火山引擎上Arm实例实际性能体感怎么样我虽然没有第一手拿到实例亲测但结合此前在火山引擎上测试Ampere ARM实例的经验以及Arm自研CPU的公开规格可以做一些合理推演。最大的体感提升会是单位成本的吞吐量。以Web服务这类典型负载为例Arm实例在nginx、gRPC、Node.js这类高并发短连接场景下每核并发能力往往比同价位x86要好。核心数多、单核功耗低整机在同样功耗预算下可以提供更高的请求处理量。其次是内存带宽。如果Arm自研CPU真的在内存控制器上做了重优化Spark、Flink、Presto这类内存计算引擎以及Redis类缓存服务性能收益会比通用计算看得更明显。这类负载不看重单核绝对算力但很吃内存通道数和带宽。最容易踩坑的反而是那些强依赖SIMD指令集的应用。虽然Armv9的SVE2已经补齐了和x86 AVX-512的差距但很多老数据库和商业软件还在用SSE/AVX优化路径迁移到Arm上要么走二进制转译性能损耗20-30%要么必须等厂商出Arm原生版本。所以我的建议是互联网新一代应用、容器服务、大数据套件可以放心迁老牌重量级商业软件先做POC再决定。2.3 火山引擎上的Arm实例形态镜像、规格、计费综合火山引擎目前已经上线的Arm产品线基于Ampere和之前的自研合作以及这次公布的Arm自研CPU实例我猜测用户在控制台上会看到新增的ECS实例类型和镜像市场上的Arm优化镜像。从操作角度看最关键的点在于镜像选择火山引擎应该会提供CentOS/Ubuntu/Alinux的Arm版本或者自带优化内核的“云原生镜像”。新手建议直接选Alinux兼容版内核已经做过TCP/IP栈和内存管理的arm专项调优。实例规格大概率按型号分为通用型、计算型、内存型规格从2C4G到128C512G都会有适配不同业务。计费模式应该支持按量和包年包月价格上对比同配置x86估计能便宜20%-30%但具体情况以官方定价页为准。这里额外提醒一句别只看CPU核数要重点看网络带宽和云盘IOPS。新实例如果逻辑上是同一代产品线网络虚拟化迁移到eBPF和DPDK框架后带宽性能会比较均衡但旧一代Arm实例在极端高吞吐场景下会有网络抖动问题这个只能实测压测才知道你的业务能不能接受。3. 新紫光集团也入局国产半导体产业为什么盯着Arm自研CPU3.1 新紫光集团是做什么的和Arm合作意味着什么新紫光集团可能很多非产业人士不熟。简单说紫光集团重组后新紫光体系下涵盖了从半导体设计、制造到封测的完整链条旗下核心企业包括紫光展锐、紫光同芯、西安紫光国芯等。这次新紫光集团宣布也要用Arm自研CPU我的理解有两层一是芯片产品层面的合作。新紫光旗下的嵌入式、服务器CPU业务可能基于Arm平台进行产品定义用Arm自研CPU的参考设计快速推出服务器整机产品。这个逻辑和当年不少国产芯片厂商围绕Arm公版核做SoC是一样的只是这次基座升级成了Arm完整自研的方案。二是产业生态层的绑定。新紫光在国内的渠道、行业资源尤其金融、政务、教育等领域如果能搭上Arm自研CPU这艘船可以把Arm的CPU导入到更多国内传统行业客户。Arm提供芯片紫光提供行业方案和落地服务这个组合对双方都有利。3.2 打破x86垄断的又一个变量数据中心芯片市场多年来本质上是x86的垄断格局。国内虽然鲲鹏、飞腾、龙芯、海光都在做替代但客观说每家的生态和性能各有短板。Arm自研CPU这次进入国内市场最大的变量是既兼容全球Arm软件生态又能避开x86专利壁垒。这意味着一个开发者在macOS上写好的Apple Silicon应用理论上跨架构迁移到云上的Arm实例会非常顺滑。移动应用后端、Android模拟器集群、边缘计算网关这类天然Arm原生的负载不需要再做编译器适配就能直接跑起来。这就大大降低了开源社区里那些“arm库编译问题”的门槛很多以前在arm交叉编译环节劝退开发者的项目现在可以直接在云上Arm实例里搞了。对国内信创市场来说多一个基于开放指令集的选择总归是好事。但也要泼盆冷水任何新架构要在核心生产环境大规模落地都需要至少一年的稳定性验证周期。新紫光集团说要用初期大概率也是从政务云、办公系统、开发测试环境这些相对安全的地方切入金融核心系统这种硬骨头不会一上来就啃。3.3 服务器CPU天梯图即将大变天各位常看服务器CPU天梯图的同学今年下半年和明年的图谱估计会很精彩。以前天梯图最上面基本就是Intel Xeon Platinum和AMD EPYC轮流坐庄顶多加一个Ampere的Arm选手。Arm自研CPU进场后天梯图的高端局会变成三强混战。从技术演进的趋势看纯CPU基准性能方面Arm和x86的差距正在缩小到个位数百分比但能效比每瓦性能这个维度Arm领先优势明显。如果云厂商把物理机托管成本里电力占比摊开算Arm实例的毛利率会比x86更有竞争力。当然芯片不能只看跑分还要看整体平台成熟度。x86生态积累了二十多年服务器的BMC管理、带外监控、故障隔离机制都极其完善。Arm服务器这几年也进步很快但要说在大型数据中心里无缝替换x86还需要时间。这也是为什么我一直主张现阶段最适合Arm的场景是新业务、新应用、创新负载而不是把老旧的x86系统直接平移过去。4. 迁移到Arm自研CPU实例完整实操指南4.1 前期调研我的业务适不适合迁很多人一听说新CPU很香就想立刻迁。如果让我给一个判断框架核心就看三点代码是否开源或已有Arm原生版本。如果你用的是MySQL、Nginx、Redis、Kafka、Flink这些开源主流件Arm原生支持早就非常成熟了迁起来几乎没有心理负担。是否存在闭源老旧的SDK或依赖库。比如你在用某个只在x86平台编译过的老版本银行接口SDK或者供应商早已停止维护的商业组件那迁移就会非常痛苦。这种情况建议先小范围POC花一两个月把依赖梳理清楚再说。是否强依赖特定SIMD指令集。有些视频处理、音视频编码、科学计算库代码里直接内联汇编写了AVX-512优化这种在Arm上根本没法跑除非你愿意改成NEON/SVE并自己重新调优。如果上面三点都能过那迁移就是纯粹的工作量问题了不要怕。现在GitHub上很多开源项目的release页面都直接同步发布linux/arm64的二进制包了。4.2 环境确认与准备工作假设你已经在火山引擎控制台上开了一台Arm自研CPU实例第一步不是急着传代码而是先确认环境。登录进系统后跑几条命令看看uname -m # 预期输出aarch64 lscpu # 重点看CPU型号、核心数、架构信息确保这颗CPU确实是Arm自研型号 cat /proc/cpuinfo # 查看Flags确认支持fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics如果开头两条命令输出正常说明系统内核和发行版的Arm配置没问题。接下来建议再确认一下内核版本是不是足够新因为Arm在早期内核版本上有不少调度、中断、PCIe枚举方面的补丁版本太老跑新CPU会有兼容性问题。uname -r # 建议至少5.10以上如果是5.15或者6.x更好确认完内核后再检查一下GRUB启动参数里的ACPI表识别情况dmesg | grep -i acpi dmesg | grep -i arm重点看有没有“Firmware bug”“Failed to initialise”这类字样。如果在dmesg里看到大量ACPI相关异常建议直接提工单这往往是底层固件匹配问题个人用户处理不了。4.3 编译器选择与代码编译适配这一步是最容易出现“明明按照教程做了还是报错”的位置。在x86上编译好的二进制是不能直接在Arm上跑的这不是换一个执行文件路径那么简单而是必须重新编译并且尽量使用Arm原生编译器。我个人实际用下来推荐组合是# 安装基础编译工具链Ubuntu / Debian系 sudo apt update sudo apt install build-essential gcc g gfortran cmake autoconf libtool # 检查编译器版本 gcc --version如果你的项目依赖一些比较新版本的C标准或者OpenMP/SIMD优化建议直接安装Arm官方维护的编译器ACfLArm Compiler for Linux比发行版自带的GCC在Neoverse核心上有更好的PGOProfile Guided Optimization优化效果。# 以ACfL 23.x为例 wget https://developer.arm.com/-/media/Files/downloads/hpc/arm-compiler-for-linux/23.04/arm-compiler-for-linux_23.04_Ubuntu-22.04_aarch64.tar # 解压后配置环境变量 export PATH/path/to/arm-compiler-for-linux_23.04_Ubuntu-22.04_aarch64/bin:$PATH export LD_LIBRARY_PATH/path/to/arm-compiler-for-linux_23.04_Ubuntu-22.04_aarch64/lib:$LD_LIBRARY_PATH用ACfL编译时建议对C/C项目开启-mcpuneoverse-v2级别的优化参数具体参数看你的CPU型号说明gcc -O3 -mcpuneoverse-v2 -marcharmv9-acrypto -mtuneneoverse-v2 your_source.c -o your_binary这串参数的意思是做激进优化按Neoverse V2微架构调度指令开启armv9指令集和硬件加密扩展。性能和默认参数相比大约能有10%-20%的提升特别是涉及加解密、哈希计算的负载收益更明显。4.4 常用软件在Arm上的安装速查很多读者真正关心的是“我常用的那几十个软件装上到底能不能跑”。这里我把过去几年在Arm服务器上反复装过的软件整理成一个速查表按危险程度从低到高排列方便你对照判断软件类别典型代表Arm兼容性避坑说明Web服务器Nginx、Apache、Caddy好Nginx用发行版自带包或编译均可开TLS后OpenSSL性能不错数据库MySQL、PostgreSQL、Redis好注意MySQL 8.0以上对Arm优化充分Redis纯内存场景Arm内存带宽优势明显大数据Hadoop、Spark、Flink尚可需要全部重编译JNI本地库否则有的算子会回到纯Java模式性能下降容器与编排Docker、Kubernetes好镜像别拉amd64的一定要选--platform linux/arm64的tag否则跑起来qemu模拟性能一塌糊涂消息队列Kafka、Pulsar、RabbitMQ较好Kafka的PageCache性能吃的是内存带宽Arm这种高核心数机型很匹配AI推理框架PyTorch、ONNX Runtime较好现在主流框架都有Arm预编译包CPU推理建议开启MKLDNN或者ACL后端商业闭源软件Oracle DB、部分金融中间件差大概率没有官方Arm版本必须用仿真层性能损失严重不建议碰4.5 压测方案与性能验证如果你负责的是一个生产级系统迁移完成后不能只听供应商宣传“性能大幅提升”而是要做一套完整的压测验证。我自己的习惯是分三轮压第一轮单机冒烟压测。用wrk或ab打一下Nginx用sysbench测一下数据库的OLTP能力跑30分钟看有没有句柄泄漏、内存缓慢增长、连接断开这类问题。# sysbench CPU基准测试 sysbench cpu --threads64 --time60 run # 内存读写带宽 sysbench memory --memory-block-size1M --memory-total-size100G --memory-operread run # MySQL OLTP测试 sysbench oltp_read_write --mysql-host127.0.0.1 --mysql-userroot --mysql-passwordyourpass --tables10 --table-size1000000 --threads64 --time300 run第二轮长时间稳定性测试。至少跑72小时观察CPU核间负载是否均衡、有没有单核饿死的现象。因为Arm的核数和CCE互连拓扑和x86不同一些老调度器会导致负载倾斜这在较老内核上特别容易复现。第三轮同业务对比测试。如果预算允许建议同时开一台同规格的x86实例跑同一套压测脚本记录相同的业务指标QPS、P99延迟、CPU单核利用率再把两份数据摆在一起看。这样才能算出Arm实例的性价比真实收益率不是看厂商海报而是看自己业务的真实数据。4.6 迁移过程中的代码兼容性修复代码层面的兼容性问题一般集中在几个位置我在实际迁移中踩过很多这里列几个常见的内联汇编。有些C/C老项目在热点函数里写了x86专属的内联汇编比如cpuid指令读取CPU信息这种在Arm上直接报错。解决办法是用__builtin_cpu_supports这类GCC内置函数替代或者干脆删除掉让编译器决定优化方案。字节序相关逻辑。x86是小端Arm运行在Linux环境下也是小端但如果你的代码在打包网络报文或解析二进制协议时硬编码了字节序处理迁移后偶尔会出现“读出来的值反过来”的诡异问题。解决办法是所有跨端交互的二进制数据统一用htons/ntohs/htonl/ntohl处理不用手写位运算。硬编码的CPU特性检测。很多软件在启动时会用cpuid指令检测SSE/AVX指令集支持情况然后动态选择不同的代码路径。到了Arm上这段逻辑会失效。建议在代码里做架构分支判断根据__aarch64__宏切换NEON/SVE优化逻辑。4.7 Docker镜像迁移实操跑容器的话迁移逻辑稍微简单一点因为容器镜像本身就是“软件依赖”的完整打包。但有个问题特别容易踩在x86机器上构建的镜像默认就是x86架构的推到Arm机器上会直接报exec format error。解决办法是构建多架构镜像# 创建并启用buildxDocker Desktop或Linux Docker 20.10自带 docker buildx create --use # 在构建时指定多平台 docker buildx build --platform linux/amd64,linux/arm64 -t yourname/yourapp:latest . --push如果你只在Arm机器上运行也可以偷懒一点直接写Dockerfile然后拉到Arm机器上重新构建FROM ubuntu:22.04 RUN apt update apt install -y --no-install-recommends python3 python3-pip WORKDIR /app COPY requirements.txt . RUN pip3 install -r requirements.txt COPY . . CMD [python3, app.py]在Arm实例上用这个Dockerfile构建拉到的所有基础镜像层都自动是arm64版本避免qemu模拟开销。实测在没有qemu模拟的情况下容器里的Python/C应用性能损失可以降到3%以内基本可以忽略。4.8 常见问题排查与操作避坑实录我在不同Arm平台上折腾过很多项目有些问题反复出现干脆整理成一个速查表方便大家在迁移时快速对照排查问题现象可能原因解决方案镜像启动报exec format error镜像架构是amd64机器是arm64换用arm64镜像或用docker pull --platform linux/arm64Conda环境装包报错conda下载的包默认为x86版本使用CONDA_SUBDIRlinux-aarch64 conda env createNginx无法加载libluajit.so依赖库没有编译Arm版本重新编译lua-jit或改用nginx:alpine-arm64容器镜像大数据组件启动后JVM崩溃某些本地库是x86编译所有native库snappy、zstd、lz4必须使用Arm版本重新编译网络性能明显低于预期网卡队列绑定不均手动给网卡IRQ绑核用irqbalance规范化系统日志刷ACPI错误固件与内核版本不匹配更新到厂商提供的较新内核或BMC固件版本特别强调一下Conda这个坑。很多数据科学的朋友习惯用Conda管理环境但默认Conda源在Arm平台上安装包时经常出现“PackagesNotFoundError”。解决办法是换用conda-forge且安装前强制指定子目录conda config --set subdir linux-aarch64 conda install -c conda-forge numpy scipy pandas5. 开发者视角Arm生态的新机会与挑战5.1 不是简单的“重新编译一遍”每次有新架构诞生很多人就会说“只要重新编译不就可以平迁了”这个想法不能说错但把事情想简单了。代码能编译通过、能正常跑起来这只是第一层。到第二层你会发现不同的微架构对内存访问模式、分支预测、缓存预取的敏感程度是不同的。在Neoverse V2这样的大核上要发挥出性能往往需要针对数据的cache locality做代码层面的调整比如把分散的结构体合并成连续内存块、使用显式的prefetch指令、调整循环展开粒度等。这些工作量不亚于“重新编译”而是“面向新微架构做性能调优”。对中小企业来说我不建议一上来就做这种极致优化。先把业务跑通、数据验证好如果性能确实吃紧再启动性能专项这样成本可控。5.2 面向未来的开发习惯建议不管你现在用不用Arm服务器有一个习惯可以现在就养成写代码时不要绑定x86特有的行为。具体包括不用内联汇编除非有非常强的性能理由不用x86intrin.h改用跨平台SIMD库SLEEF、highway、Eigen编译选项里不要写死-marchnative再分发二进制基础软件优先选择官方提供多架构预编译包的发行来源。这些习惯不复杂但在未来芯片多元化的格局下做一次这样的适配就能让你在所有新平台上都有选择权。别等到领导说“未来一年我们要把20%的工作负载迁到Arm平台上”时才开始恐慌。5.3 新架构机会性能工程人员的红利期作为从业者我还想多说一点。每一次新硬件架构出现都会催生一轮性能工程人才的红利期。x86统治了几十年很多性能优化技巧其实已经被挖到极限。Arm架构在服务器端不算“全新”但Arm自研CPU如此高调进场意味着有大量传统软件将需要一场“面向Arm的二次性能优化”。无论是编译器调优、内核调优、还是业务代码的架构级优化经验丰富的从业者在这个节点上非常值钱。我看到有些观点说“Arm服务器自己跟自己玩生态根本起不来”——这话十年前说还有道理但现在再看就有点跟不上形势了。容器化、微服务、开源Infra的普及让跨架构迁移的难度大幅降低各大云厂商和硬件巨头都已经在Arm上站队新的机会窗口真的已经打开了。6. 结尾一点个人心得这次Arm自研CPU落地火山引擎加上新紫光集团跟进的信号给我的整体感觉是Arm的服务器芯片市场布局开始进入真正的产品化验证期而不只是停留在PPT宣发层面。作为开发者我们现在能做的最有意义的事就是保持对多架构的敏感度在自己负责的项目里逐步积累Arm下的构建、部署、压测经验。哪怕只是先把一个内部小工具的Dockerfile改成多架构构建也是在为未来的迁移做储备。我最近就在折腾把内部离线搜索服务迁到Arm实例上中间踩了双字节序的坑后面还想专门写点编译和优化方面的实战。如果你手头也在做类似的事情欢迎在评论区聊聊你的迁移体验。