经典 OSD 与 Seastore Crimson 的性能比较

Crimson 中使用 Seastore 作为原生对象存储 ¶
我们非常高兴地向大家展示 Classic OSD 和 Seastore(Crimson OSD 中的原生对象存储引擎)之间的性能比较。Crimson OSD。
我们表明,对于 4K 随机读取,Seastore 的性能优于 Classic OSD,并且对于顺序 64K 读取和写入工作负载,两者具有相同的性能。只有随机写入 4k 显示 Seastore 的性能略低,我们正在积极努力进行优化,Samuel Just 领导这项工作。
这些结果保持一致,并且在性能方面没有相对于 2025 年 5 月(内部技术报告,可在 Crimson slack 频道 中找到)中显示的 build 6aab5c07ae 的结果出现倒退。
简而言之,以下是比较的关键点
我们对所有测试运行使用了来自 main 分支的相同的 Ceph dev 构建(哈希值为 785976e3179)。
单个 OSD,32 个大小为 2 GB 的 RBD 卷,每个卷四个 FIO 作业。
Crimson 的所有配置均使用平衡的 OSD 算法,在单个 NUMA socket 上(这与之前的测试保持一致)。
我们使用了传统的 workload(随机读取 4k、随机写入 4k、顺序读取 64k 和顺序写入 64k)。
我们使用了 Seastore 的双反应堆配置(使用 NUMA socket 0 中的最大 56 个 CPU 核心),同样也用于 Classic OSD。有关详细信息,请参阅我们之前的 博客文章。
Seastore vs Classic OSD - 最大 CPU 核心配置
在本节中,我们将展示双反应堆配置下 OSD Classic 与 Crimson/Seastore 之间的性能比较。这包括使用系统(Intel(R) Xeon(R) Platinum 8276M CPU @ 2.20GHz)的 NUMA socket 0 中的最大 56 个 CPU 核心。这是与 2025 年 5 月 29 日发布的报告中使用的相同 CPU 配置。测试是在相同的硬件和软件配置下进行的,有关详细信息,请参阅下面的附录。
Randread 4k ¶

与 Classic 相比,Seastore 在此 workload 上显示出显著的性能提升,最大吞吐量为 400K IOPS,而 Classic 为 130K IOPS。
点击查看 CPU 利用率。
| Classic | Seastore |
|---|---|
![]() | ![]() |
注意:我们不在图表中显示内存利用率,因为其基本保持恒定,并且对分析没有太大帮助。
在下表中,我们显示了每个 workload 的详细测量结果。所有小写字母的列名都来自基准测试 FIO,而只有两个大写字母的列是使用
top命令测量的,即 OSD CPU 和 OSD 内存利用率。
Classic OSD - rand4read k - 详细统计信息 ¶
| iodepth | iops | total_ios | clat_ms | clat_stdev | usr_cpu | sys_cpu | OSD_cpu | OSD_mem |
|---|---|---|---|---|---|---|---|---|
| 1 | 108365.87 | 32509868.00 | 0.29 | 0.11 | 1.41 | 1.26 | 353.20 | 53.66 |
| 2 | 124779.61 | 37434134.00 | 0.51 | 0.31 | 1.55 | 1.40 | 426.76 | 66.35 |
| 4 | 130072.33 | 39022090.00 | 0.98 | 0.86 | 1.59 | 1.44 | 440.62 | 66.60 |
| 8 | 130657.61 | 39197807.00 | 1.96 | 2.59 | 1.56 | 1.43 | 442.40 | 66.60 |
| 16 | 131217.62 | 39366729.00 | 3.90 | 8.30 | 1.40 | 1.36 | 437.58 | 66.60 |
| 24 | 132017.46 | 39607879.00 | 5.81 | 18.94 | 1.30 | 1.30 | 429.83 | 66.60 |
| 32 | 131567.99 | 39477765.00 | 6.81 | 27.08 | 1.37 | 1.42 | 418.12 | 66.60 |
| 40 | 134032.49 | 40220335.00 | 6.22 | 26.81 | 1.78 | 1.87 | 416.35 | 66.60 |
| 52 | 135246.36 | 40576206.00 | 5.34 | 24.46 | 2.57 | 2.71 | 414.86 | 66.60 |
| 64 | 136637.79 | 40993659.00 | 4.85 | 23.90 | 3.32 | 3.44 | 408.23 | 66.60 |
Seastore OSD - randread 4k - 详细统计信息 ¶
| iodepth | iops | total_ios | clat_ms | clat_stdev | usr_cpu | sys_cpu | OSD_cpu | OSD_mem |
|---|---|---|---|---|---|---|---|---|
| 1 | 126108.05 | 37832541.00 | 0.25 | 0.07 | 1.75 | 1.62 | 4259.31 | 3479.04 |
| 2 | 186270.38 | 55881299.00 | 0.34 | 0.13 | 2.50 | 2.34 | 4792.02 | 3628.80 |
| 4 | 272327.60 | 81698825.00 | 0.47 | 0.20 | 3.56 | 3.18 | 5148.66 | 3628.80 |
| 8 | 313378.57 | 94014512.00 | 0.81 | 0.47 | 3.56 | 2.97 | 5258.81 | 3628.80 |
| 16 | 396901.06 | 119071509.00 | 1.29 | 0.89 | 4.36 | 3.18 | 5365.52 | 3628.80 |
| 24 | 362284.30 | 108688913.00 | 2.12 | 4.81 | 3.67 | 2.75 | 5362.52 | 3639.44 |
| 32 | 387618.69 | 116296461.00 | 2.64 | 14.40 | 4.36 | 3.23 | 5368.53 | 3645.60 |
| 40 | 346395.63 | 103929773.00 | 3.69 | 18.48 | 3.65 | 2.73 | 5354.85 | 3645.60 |
| 52 | 371220.47 | 111386558.00 | 4.48 | 33.79 | 4.24 | 3.11 | 5349.68 | 3645.60 |
| 64 | 328832.78 | 98673511.00 | 6.23 | 50.75 | 3.51 | 2.69 | 5328.60 | 3645.60 |
Randwrite 4k ¶

Seastore 在此 workload 上的性能有明显提升的空间。这是 Samuel Just 领导的一个非常活跃的领域,涉及对 Seastore 的许多优化。
点击查看 CPU 利用率。
| Classic | Seastore |
|---|---|
![]() | ![]() |
Classic OSD - randwrite 4k - 详细统计信息 ¶
| iodepth | iops | total_ios | clat_ms | clat_stdev | usr_cpu | sys_cpu | OSD_cpu | OSD_mem |
|---|---|---|---|---|---|---|---|---|
| 1 | 65903.70 | 19771176.00 | 0.48 | 1.00 | 1.36 | 1.01 | 781.41 | 75.73 |
| 2 | 86286.07 | 25885995.00 | 0.73 | 0.52 | 2.03 | 1.50 | 993.70 | 57.47 |
| 4 | 96025.22 | 28807854.00 | 1.33 | 0.70 | 2.51 | 1.91 | 1094.53 | 74.25 |
| 8 | 103263.42 | 30979542.00 | 2.47 | 1.03 | 3.34 | 2.57 | 1158.53 | 76.47 |
| 16 | 103583.23 | 31075901.00 | 4.94 | 5.42 | 2.23 | 1.30 | 1158.31 | 76.22 |
| 24 | 103991.81 | 31199311.00 | 7.38 | 10.90 | 1.99 | 1.09 | 1143.36 | 75.73 |
| 32 | 104675.98 | 31405724.00 | 9.78 | 17.08 | 1.86 | 0.98 | 1145.61 | 75.73 |
| 40 | 104459.77 | 31342317.00 | 12.25 | 23.81 | 1.81 | 0.89 | 1144.96 | 76.47 |
| 52 | 104192.40 | 31264494.00 | 15.97 | 34.90 | 1.72 | 0.82 | 1142.14 | 75.97 |
| 64 | 104833.30 | 31463618.00 | 19.53 | 47.70 | 1.64 | 0.79 | 1137.10 | 76.22 |
Seastore OSD - randwrite 4k - 详细统计信息 ¶
| iodepth | iops | total_ios | clat_ms | clat_stdev | usr_cpu | sys_cpu | OSD_cpu | OSD_mem |
|---|---|---|---|---|---|---|---|---|
| 1 | 31367.49 | 9410655.00 | 1.01 | 2.37 | 0.62 | 0.49 | 3648.14 | 3941.28 |
| 2 | 42493.17 | 12748376.00 | 1.50 | 3.97 | 0.75 | 0.59 | 4160.04 | 5390.00 |
| 4 | 58204.73 | 17461826.00 | 2.19 | 3.76 | 0.95 | 0.73 | 4680.48 | 6027.28 |
| 8 | 65861.89 | 19759489.00 | 3.88 | 5.34 | 1.06 | 0.79 | 4748.00 | 6194.16 |
| 16 | 69801.80 | 20942843.00 | 7.33 | 29.56 | 1.11 | 0.81 | 4928.67 | 6199.20 |
| 24 | 68240.35 | 20477292.00 | 11.25 | 46.16 | 1.11 | 0.79 | 4815.88 | 6199.20 |
| 32 | 71570.20 | 21477716.00 | 14.31 | 60.14 | 1.16 | 0.82 | 390.35 | 6199.20 |
| 40 | 10710.19 | 3363.00 | 354.63 | 691.85 | 0.08 | 0.07 | 4281.69 | 6199.20 |
| 52 | 16412.43 | 5810.00 | 160.41 | 334.38 | 0.25 | 0.17 | 4969.02 | 6199.20 |
| 64 | 7648.09 | 2608.00 | 394.05 | 527.43 | 0.08 | 0.16 | 4545.87 | 6199.20 |
Seqread 64k ¶

请注意,Seastore 的性能比 Classic 低不到 10%,在实际应用中,它们可以被认为是相同的。
点击查看 CPU 利用率。
| Classic | Seastore |
|---|---|
![]() | ![]() |
Classic OSD - seqread 64k - 详细统计信息 ¶
| iodepth | bw | total_ios | clat_ms | clat_stdev | usr_cpu | sys_cpu | OSD_cpu | OSD_mem |
|---|---|---|---|---|---|---|---|---|
| 1 | 2259.54 | 10591650.00 | 0.90 | 0.45 | 0.49 | 0.44 | 244.69 | 78.03 |
| 2 | 2252.25 | 10557518.00 | 1.82 | 1.16 | 0.47 | 0.43 | 264.26 | 80.91 |
| 4 | 2226.41 | 10436444.00 | 3.68 | 2.35 | 0.46 | 0.43 | 260.60 | 79.92 |
| 8 | 2229.90 | 10453186.00 | 7.34 | 4.71 | 0.45 | 0.43 | 258.87 | 79.67 |
| 16 | 1867.48 | 8754162.00 | 16.28 | 26.08 | 0.40 | 0.40 | 226.63 | 78.19 |
| 24 | 1771.64 | 8304783.00 | 16.63 | 30.38 | 0.53 | 0.59 | 224.78 | 78.19 |
| 32 | 1686.78 | 7906337.00 | 15.32 | 24.54 | 0.72 | 0.84 | 226.87 | 78.44 |
| 40 | 1620.78 | 7597046.00 | 15.36 | 30.58 | 0.84 | 1.03 | 215.50 | 79.18 |
| 52 | 1537.75 | 7207264.00 | 15.81 | 40.05 | 0.96 | 1.27 | 213.59 | 79.18 |
| 64 | 1457.19 | 6829824.00 | 14.76 | 46.98 | 1.21 | 1.59 | 215.77 | 77.95 |
Seastore OSD - seqread 64k - 详细统计信息 ¶
| iodepth | bw | total_ios | clat_ms | clat_stdev | usr_cpu | sys_cpu | OSD_cpu | OSD_mem |
|---|---|---|---|---|---|---|---|---|
| 1 | 1473.66 | 6907887.00 | 1.38 | 0.78 | 0.42 | 0.38 | 2849.74 | 5953.20 |
| 2 | 1690.21 | 7923018.00 | 2.42 | 1.61 | 0.44 | 0.41 | 2957.45 | 6199.20 |
| 4 | 1780.62 | 8346807.00 | 4.60 | 3.25 | 0.45 | 0.43 | 3092.81 | 6199.20 |
| 8 | 1868.70 | 8759887.00 | 8.76 | 7.66 | 0.46 | 0.43 | 2992.76 | 6199.20 |
| 16 | 1957.45 | 9176207.00 | 16.74 | 15.61 | 0.48 | 0.44 | 3235.70 | 6199.20 |
| 24 | 2037.46 | 9552208.00 | 24.12 | 26.46 | 0.47 | 0.46 | 3335.78 | 6199.20 |
| 32 | 2130.58 | 9988723.00 | 30.76 | 35.76 | 0.49 | 0.48 | 3437.99 | 6199.20 |
| 40 | 2181.19 | 10227339.00 | 37.55 | 49.96 | 0.49 | 0.48 | 3284.56 | 6199.20 |
| 52 | 2293.93 | 10757006.00 | 46.42 | 59.17 | 0.52 | 0.50 | 3502.08 | 6199.20 |
| 64 | 2241.97 | 10514348.00 | 42.65 | 61.72 | 0.63 | 0.65 | 3315.77 | 6199.20 |
Seqwrite 64k ¶

与之前的 workload 类似,Seastore 的性能在 Classic 的 10% 以内,因此可以被认为是相同的。
点击查看 CPU 利用率。
| Classic | Seastore |
|---|---|
![]() | ![]() |
Classic OSD - seqwrite 64k - 详细统计信息 ¶
| iodepth | bw | total_ios | clat_ms | clat_stdev | usr_cpu | sys_cpu | OSD_cpu | OSD_mem |
|---|---|---|---|---|---|---|---|---|
| 1 | 2413.60 | 11313833.00 | 0.83 | 0.36 | 1.90 | 0.65 | 597.74 | 40.63 |
| 2 | 2629.75 | 12326994.00 | 1.54 | 0.55 | 2.02 | 0.75 | 684.49 | 48.59 |
| 4 | 2679.76 | 12561442.00 | 3.04 | 1.28 | 1.95 | 0.69 | 698.03 | 55.99 |
| 8 | 2688.72 | 12603496.00 | 6.08 | 3.87 | 1.99 | 0.51 | 716.50 | 60.68 |
| 16 | 2701.16 | 12661982.00 | 12.11 | 15.45 | 2.33 | 0.43 | 697.26 | 61.17 |
| 24 | 2703.43 | 12673303.00 | 18.17 | 34.59 | 2.48 | 0.41 | 682.33 | 61.91 |
| 32 | 2596.58 | 12173046.00 | 24.76 | 57.19 | 2.54 | 0.41 | 679.37 | 61.91 |
| 40 | 2672.83 | 12533910.00 | 23.34 | 55.86 | 3.29 | 0.49 | 674.92 | 61.91 |
| 52 | 2607.49 | 12226048.00 | 20.86 | 47.36 | 4.62 | 0.69 | 650.55 | 62.16 |
| 64 | 2655.01 | 12446451.00 | 19.10 | 42.89 | 6.06 | 0.88 | 639.84 | 61.67 |
Seastore OSD - seqwrite 64k - 详细统计信息 ¶
| iodepth | bw | total_ios | clat_ms | clat_stdev | usr_cpu | sys_cpu | OSD_cpu | OSD_mem |
|---|---|---|---|---|---|---|---|---|
| 1 | 1895.08 | 8883327.00 | 1.07 | 1.12 | 1.21 | 0.43 | 3177.55 | 6001.82 |
| 2 | 2220.36 | 10408096.00 | 1.83 | 1.97 | 1.29 | 0.48 | 3184.46 | 6249.60 |
| 4 | 2244.20 | 10519929.00 | 3.64 | 3.36 | 1.27 | 0.48 | 3345.72 | 6249.60 |
| 8 | 2301.54 | 10788847.00 | 7.11 | 6.38 | 1.53 | 0.49 | 3213.67 | 6249.60 |
| 16 | 2381.86 | 11165433.00 | 13.74 | 12.08 | 2.16 | 0.49 | 3493.73 | 6249.60 |
| 24 | 2479.99 | 11627449.00 | 19.80 | 20.33 | 2.43 | 0.50 | 3431.81 | 6249.60 |
| 32 | 1557.10 | 7299365.00 | 42.07 | 36.08 | 2.05 | 0.50 | 3732.99 | 6249.60 |
| 40 | 1521.37 | 7131945.00 | 53.83 | 49.44 | 2.03 | 0.48 | 3723.61 | 6249.60 |
| 52 | 1563.37 | 7328734.00 | 68.10 | 64.74 | 2.13 | 0.49 | 3810.17 | 6249.60 |
| 64 | 1571.50 | 7367144.00 | 70.18 | 71.46 | 2.52 | 0.58 | 3860.27 | 6249.60 |
结论 ¶
在本篇博文中,我们展示了 Seastore OSD 与 Classic OSD 的性能。结果表明,Seastore 在随机读取 4k 方面性能更好,在顺序读取和写入 64k 工作负载方面性能相同。只有随机写入 4k 显示 Seastore 的性能较低,我们正在积极进行优化。我们将继续监控 Seastore OSD 的性能,并在未来的博文中报告任何重大变化。我们感谢 Samuel Just 对 Seastore 性能的见解,如在 Crimson 社区会议电话中所讨论的。
附录:配置详细信息 ¶
测试是在 Sepia Lab 中的单个节点集群 o05 上执行的。
以下是硬件和软件配置的摘要
CPU:2 x Intel(R) Xeon(R) Platinum 8276M CPU @ 2.20GH (每个 56 个核心)
内存:384 GB
存储:驱动器:8 x 93.1 TB NVMe
OS:Centos 9.0 on kernel 5.14.0-511.el9.x86_64
内核:5.4.0-91-generic
Ceph:squid dev 构建来自 main 分支,哈希值为 785976e3179 (Fri Aug 29 2025)
podman 版本 5.2.2
FIO:3.28(使用 librbd 引擎进行 workload,使用 AIO 引擎对 NVMe 驱动器进行预处理)。
我们以开发模式构建 Ceph,选项如下
WITH_CRIMSON=true ./install-deps.sh
$ ./do_cmake.sh -DWITH_CRIMSON=ON -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_CXX_FLAGS="-fno-omit-frame-pointer" -DWITH_TESTS=OFF && ninja -C build -j 20 -l 20 -k 20 && ninja -C build install
本报告的所有测试均使用 vstart.sh 进行集群创建,使用单个节点。在存储方面,测试的单个配置涉及 32 个 RBD 卷,每个卷的大小为 2 GB。
RBD 池是无复制创建的(大小为 1)。在下面的代码片段中,我们显示了用于 RBD 池和卷的选项。
点击查看 RBD 配置详细信息。
if pgrep crimson; then
bin/ceph daemon -c /ceph/build/ceph.conf osd.0 dump_metrics > /tmp/new_cluster_dump.json
fi
# basic setup
bin/ceph osd pool create rbd 128
bin/ceph osd pool application enable rbd rbd
bin/ceph osd pool set rbd size 1 --yes-i-really-mean-it
[ -z "$NUM_RBD_IMAGES" ] && NUM_RBD_IMAGES=1
[ -z "$RBD_SIZE" ] && RBD_SIZE=2GB
for (( i=0; i<$NUM_RBD_IMAGES; i++ )); do
bin/rbd create --size ${RBD_SIZE} rbd/fio_test_${i}
rbd du fio_test_${i}
echo "Prefilling rbd/fio_test_${i}"
bin/rbd bench -p rbd --image fio_test_${i} --io-size 64K --io-threads 1\
--io-total ${RBD_SIZE} --io-pattern seq --io-type write && rbd du fio_test_${i}
done
bin/ceph status
bin/ceph osd dump | grep 'replicated size'
# Show pool’s utilization statistics:
rados df
# Turn off auto scaler for existing and new pools - stops PGs being split/merged
bin/ceph osd pool set noautoscale
# Turn off balancer to avoid moving PGs
bin/ceph balancer off
# Turn off deep scrub
bin/ceph osd set nodeep-scrub
# Turn off scrub
bin/ceph osd set noscrub
# Turn off RBD coalescing
bin/ceph config set client rbd_io_scheduler none







