ClickHouse 上手 NVIDIA Vera CPU:登顶 ClickBench 硬件榜的缩放效率实测

NVIDIA 最近给 ClickHouse 送了一台尚未发布的 Vera CPU 平台早期访问机器。ClickHouse 工程师做的第一件事很符合直觉:把自家热门分析基准 ClickBench 跑上去。用的是官网标准二进制,没有为 Vera 做任何数据库侧优化——结果它立刻以大幅优势登上 ClickBench 硬件排行榜头名。

Vera 登顶 ClickBench 硬件榜(原文配图,作者发的推文截图)
Vera 登顶 ClickBench 硬件榜(原文配图,作者发的推文截图)

Vera 是什么机器

项目 规格
核心 每路 88 个 NVIDIA Olympus 核,完全兼容 Arm-v9.2
双路合计 176 核 / 352 硬件线程(NVIDIA Spatial Multithreading)
缓存 每核 L1 数据/指令 96/64 KB,L2 2 MB,共享 L3 164 MB
内存带宽 1.0-1.2 TB/s(视 DRAM 容量)

真问题:机器翻倍,查询能不能快一倍

硬件更强当然什么都更快——这篇文章真正回答的是缩放效率:CPU 核数、缓存、内存带宽全部翻倍时,查询应该快一倍,而不是不到一倍。数据怎么组织、怎么进内存、怎么处理,每一层都影响数据库能不能”吃满”这台机器。

为什么现在关心这个:过去绝大多数查询来自 Grafana、Tableau 这类仪表盘和 BI 工具,而 ClickHouse Cloud 里Agent 自主回答数据问题的比例在上升。Agentic 查询有三个特征——形状更 ad-hoc 且题与题差异大、到达时间不可预测且成批爆发、大量并行(Agent 会派生子 Agent)。这类负载对缩放效率的要求比传统 BI 苛刻得多。

测试方法:三个模拟基本操作的微基准——过滤(WHERE)、聚合(GROUP BY)、连接(JOIN)。数据全部放内存(Memory 表引擎),排除磁盘 I/O 干扰:单列 625 亿条随机字符串(5-10 个 ASCII 字符),表大小正好 1 TB,不压缩。ClickHouse 的查询层与存储层解耦,所以结果可以直接映射到云上和开源版的 MergeTree 表。

基准一:过滤——先撞上内存墙

最简单的子串匹配 WHERE s LIKE '%ab%',按线程数记录耗时:

max_threads 耗时 加速比 效率 吞吐
1 50.44 s 1.00x 100% 19.83 GB/s
16 3.25 s 15.52x 97.0% 307.69 GB/s
64 1.23 s 41.01x 64.1% 813 GB/s
256 1.11 s 45.44x 17.8% 900.9 GB/s

耗时随线程数线性下降——直到 64 线程撞墙,加到 256 线程几乎没有增益。用 1TB 除以耗时验证:撞墙时内存 I/O 达 813-900 GB/s,正好是 Vera 的物理内存带宽。这条查询是内存受限的,加核没用。

把查询改成对每行跑正则 match(s, '[0-9][a-z][A-Z]'),变成 CPU 密集后,缩放几乎完美:

max_threads 耗时 加速比 效率
32 37.8 s 32.00x 100.0%
128 9.8 s 123.44x 96.4%
176(物理核数) 7.4 s 163.47x 92.9%
352 5.3 s 228.25x 64.8%

效率从 176 核(物理核数)开始下滑:之后的线程由逻辑线程(SMT)服务。SMT 擅长掩盖缓存未命中、分支预测失败这类停顿,对纯计算负载只能帮 10-30% 的忙——曲线形状和教科书预测完全一致。

基准二:聚合——低基数也要算得动

按首字符分组(255 组,典型低基数聚合),用 sipHash64 保证查询 CPU 密集:

max_threads 耗时 加速比 效率
32 27.4 s 32.27x 100.8%
64 13.9 s 63.60x 99.4%
176 5.4 s 163.72x 93.0%
352 4.9 s 180.43x 51.3%

64 线程前接近完美缩放,之后同样在物理核数后回落。Vera 的神经分支预测和预取帮 ClickHouse 高效读写哈希表、掩盖数据倾斜带来的访问延迟。执行计划里主要算子都带 × 352——表被切成 352 个虚拟块并行处理,聚合哈希表按流建立后合并,全程满并行。

基准三:连接——事实表 × 维表

从 1TB 大表抽样 62.5 万行(0.001%)建维表,跑一个典型的事实表-维表 JOIN:

max_threads 耗时 加速比 效率
32 35.9 s 31.55x 98.6%
128 9.3 s 121.78x 95.1%
176 7.3 s 155.15x 88.2%
352 6.1 s 185.67x 52.8%

耗时几乎与线程数成比例下降。底层是 ClickHouse 的 parallel_hash join 算法——哈希表由所有查询线程并行构建,同时构建运行时过滤(runtime filter)加速探测。真实场景里连接列通常是事实表主键(外键连接),还能解锁另一项近期加入的优化,这篇实验里没用上。

附赠:SIMD,单线程下的 3.5 倍

多线程之外,正交的另一条并行路线是 SIMD。25 亿行 UInt32 上跑 WHERE x > 2000000000,单线程耗时 0.42 秒;在比较循环前加 pragma 关掉编译器自动向量化,同一查询变 1.48 秒,慢 3.5 倍。向量化开着时,ClickHouse 用 Vera 的 128 位 NEON 指令一次比较 4 个 32 位整数。NEON 之外 Vera 还有更强的 6×128 位 SVE2 实现,ClickHouse 对 SVE2 的支持正在和开源社区一起加(PR #122860)。

CTO 怎么看

> “NVIDIA Vera 是我们见过最快、最强大的服务器平台。ClickHouse 承诺把它的巨大潜力转化为世界级的分析性能。” —— Alexey Milovidov,ClickHouse CTO

文章结尾留了钩子:后续会有一篇讲 ClickHouse 如何分析、优化、测试大规模查询性能的工程文章。

小夏点评

  1. 1. 这篇的价值不在”Vera 很快”,在缩放效率曲线——内存受限查询在 64 线程撞墙、CPU 密集查询在物理核数(176)后效率从 93% 滑向 65%,两条曲线就是下一代 ARM 服务器容量规划的教科书:SMT 线程别按满线程数做预算。
  2. 2. Agentic 查询是被点名的负载方向——形状多变、爆发到达、大量并行,恰好是最吃缩放效率的形态。数据库在 ARM 高核数平台上的表现差异,会从”跑分”变成真金白银的成本差。
  3. 3. 对中国 IT 运维/开发者的启示:国内数据库跑 x86 为主,Vera 这类 ARM 高核数平台正在进入采购视野(国内也有多家 ARM 服务器厂商)。迁移前别只看单核跑分,用这篇的方法自测:跑一个内存带宽打满的过滤查询和一个 CPU 密集的聚合查询,看效率曲线在哪里弯下去——弯点就是你的实际并发上限,这比厂商宣传的核数靠谱得多。

参考链接

  • – 原文:https://clickhouse.com/blog/clickhouse-performance-on-nvidia-vera
  • – NVIDIA Vera CPU 官方介绍:https://developer.nvidia.com/blog/nvidia-vera-cpu-boosts-ai-factory-throughput-to-accelerate-agentic-workloads/

您可能还喜欢...

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注