云原生

版本:24.03 LTS SP4

在离线混部测试套件 ​

概述 ​

为提升计算资源利用率,openEuler 支持在线任务与离线任务的混合部署(简称“混部”)。然而,混部面临的一个关键挑战是如何量化离线任务对在线任务的性能干扰,这对于确保该特性在生产环境中安全、可控地上线至关重要。 本测试套件可提供干扰率、时延敏感度等量化指标,并建立统一的对比基准,从而帮助用户客观评估混部的风险与成效,为业务部署提供决策依据;同时,它也补充了社区在混部测试方面的能力,有利于推动混部特性在生产环境中规模化落地。 本测试套件的测试范围主要涵盖 CPU、内存、I/O、网络四大混部场景。

本章节将重点介绍 openEuler 在离线混部测试套件的安装与部署方法,并以 openEuler 24.03-LTS-SP4 版本为例进行说明。

软硬件要求 ​

硬件要求 ​

  • 当前仅支持 x86、aarch64 架构。
  • 物理环境至少有2块硬盘,其中,/data目录要单独占用一块硬盘。
  • 网络混部测试要求提供两台机器,不建议同一台机器回环测试。

软件要求 ​

  • 操作系统:openEuler 24.03-LTS-SP4。
  • 内核:openEuler 24.03-LTS-SP4 版本内核。
  • 因测试环境部署需要下载相关软件,要求环境支持链接网络。
  • 环境需要安装Docker。

混部特性介绍 ​

典型混部测试模型 ​

测试模型onlineoffline相关内核技术
CPU混部模型SOFARPCstress-ng(cpu)调度抢占压制、SMT驱离
内存混部模型MYSQLstress-ng(mem)OOM分级回收、内存异步回收
IO混部模型MYSQLfioIO InFlight限速 或 IO Cost限速
网络混部模型iperf3iperf3BWM带宽管控

CPU混部测试 ​

CPU QOS隔离配置 ​

  1. CPU抢占压制

    通过 cpu.qos_level 标识任务优先级:

    • 在线任务:0
    • 离线任务:-1

    配置示例:

    bash
    echo -1 > cpu.qos_level   # 设为离线
    echo 0 > cpu.qos_level    # 设为在线
  2. smt驱离

    • 依赖cpu.qos_level配置,默认使能
    • 关闭方式:内核启动参数cmdline配置添加nosmtexpell。

CPU测试套工具选取 ​

  • 在线任务:sofarpc-benchmark

    特点:java工具,业务时延敏感,开源可修改

  • 离线任务:stress-ng

    特点:稳定模拟各种cpu利用率的任务

内存混部测试 ​

内存 QOS隔离配置 ​

  1. OOM分级查杀

    • 配置使能

      bash
      echo 1 > /proc/sys/vm/memcg_qos_enable
    • 配置在离线标识(在线:0 , 离线:-1)

      bash
      echo -1 > cpu.qos_level   # 设为离线
      echo 0 > cpu.qos_level    # 设为在线
  2. 内存异步回收

    内存超过memory.high * memory.high_async_ratio / 100的时候开始异步回收,回收到memory.high * (memory.high_async_ratio–10) / 100这个值结束。

    • 配置memory.high:参考memory.limit_in_bytes、memory.max_usage_in_bytes配置,基于业务实际调试

    • 配置memory.high_async_ratio:警戒水位线和安全水位线设置

内存测试套工具选取 ​

  • 在线任务:mysql + sysbench

    特点:任务性能对内存使用敏感

  • 离线任务:stress-ng

    特点:稳定模拟持续消耗内存任务

IO混部测试 ​

IO QOS隔离配置 ​

  1. IO Cost方案

    IO Cost执行获取rbps/rseqiops/rrandiops/wbps/wseqiops/wrandiops参数会将整个/dev/sda刷一遍,因此测试需要单独隔离出一块盘

    • cgroup根节点设置blkio.cost.qos

      bash
      echo "8:0 enable=1 min=100.00 max=100.00" > blkio.cost.qos // 8:0指定块设备号maj:mi
    • cgroup根节点设置blkio.cost.model

      bash
      echo "8:0 ctrl=user model=linear rbps=1057334144 rseqiops=175363 rrandiops=180459 wbps=500824931 wseqiops=75499 wrandiops=69629" > blkio.cost.model

      其中,rbps、rseqiops、rrandiops、wbps、wseqiops、wrandiops等参数可以通过以下命令获取:

      bash
      python iscost_coef_gen.py --testdev /dev/sdx

      注:脚本iscost_coef_gen.py来自openEuler-6.6内核源码,路径:tools/cgroup/iscost_coef_gen.py。另外,请根据lsblk实际查询到的硬盘盘符替换命令中的设备路径,譬如:sdm。

    • 设置具体cgroup节点blkio.cost.weight,取值范围:[1, 10000],默认值:100。

      bash
      echo "8:0 100" > blkio.cost.weight      //配置设备8:0 weight为100; 例如在线设置100,离线设置10。
    • 设置进程到cgroup子节点cgroup.procs

      bash
      echo 1053 > cgroup.procs

      注:只在叶子节点绑定进程,在中间节点绑定不生效。两个cgroup组任务竞争状态下,限制才有效果。

  2. IO Inflight方案

    IO inflight测试需要初步测试确定rlat/wlat(读写IO延时阈值)的基准值。

    • 配置QOS控制策略

      bash
      echo "8:0 enable=1 qos_enable=1 rlat=5000000 rpct=95 wlat=5000000 wpct=95 flags=0" > /sys/fs/cgroup/blkio/blkio.inf.qos
    • 权重配置

      bash
      echo "8:0 0" > /sys/fs/cgroup/blkio/$cgroup_path/blkio.inf.weight

IO测试套选取 ​

  • 在线任务:mysql + sysbench

    特点:任务性能对IO带宽敏感

  • 离线任务:fio

    特点:标准测试工具,稳定模拟持续消耗IO带宽任务

网络混部测试 ​

网络 QOS隔离配置 ​

  1. 配置在离线标识(在线:0 ,离线:-1)

    bash
    bwmcli -s /sys/fs/cgroup/net_cls/xxxx -1
  2. 限制离线网络带宽

    bash
    bwmcli -s bandwidth 10MB,1GB //有在线任务10MB/s,无在线任务是1GB/s(根据实际网络带宽修改)
  3. 配置当在线达到20MB/s时,开始限制离线带宽10MB/s以内;若低于20MB/s,则限制离线1GB/s以内

    bash
    bwmcli -s waterline 20MB
  4. 使能网络带宽隔离配置

    bash
    bwmcli -e eth0 -e eth1
  5. 去使能网络带宽隔离配置

    bash
    bwmcli -d eth0 -d eth1

网络测试套工具选取 ​

  • 在线任务:iperf

  • 离线任务:iperf

特点:测试网络带宽的通用工具

混部测试结果示例 ​

CPU混部测试结果示例 ​

  • 原始数据

    Test Namethrpt(ops/ms)avgt(ms/op)p99(ms/op)
    Online Test Only0.42337.76547.645
    Direct deployment Test0.36344.28261.145
    Co-Deployment Test0.40339.43548.431
  • 干扰率 (相比Online Test Only)

    Test Namethrptavgtp99
    Direct deployment Test14.18%17.26%28.33%
    Co-Deployment Test4.73%4.42%1.65%

结论:混部CPU隔离后,在线任务QPS干扰率从14.18%下降到4.73%,平均时延干扰从17.26%下降到4.42%,P99干扰率从28.33%下降到1.65%。

内存混部测试结果示例 ​

  • 原始数据

    Test Nametransactionsavg(ms)p95(ms)
    Online Test Only173212560.46780.61
    Direct deployment Test1263851799.682711.56
    Co-Deployment Test169118582.35801.72
  • 干扰率 (相比Online Test Only)

    Test Nametransactionsavgp95
    Direct deployment Test27.03%221.07%247.36%
    Co-Deployment Test2.36%3.91%2.70%

公式: 干扰率 = (Online - Test) / Online x 100%

  • 结论:混部内存隔离后,QPS干扰率从27.03%下降到2.36%,平均时延干扰率从221.07%下降到3.91%,P95时延干扰率从247.36%下降到2.70%。

IO混部测试结果示例 ​

  • 原始数据

    Test Nametransactionsavg(ms)p95(ms)
    Online Test Only5454176.17282.25
    Direct deployment Test1248770.721149.76
    Co-Deployment Test4189229.35376.49
  • 干扰率(相比Online Test Only)

    Test Nametransactionsavgp95
    Direct deployment Test77.12%337.49%307.36%
    Co-Deployment Test23.19%30.19%33.39%

公式: 干扰率 = (Online - Test) / Online x 100%

  • 结论:混部IO隔离后,在线任务QOS干扰率从77.12%下降到23.19%,平均时延干扰率从337.49%下降到30.19%,P95时延干扰率从307.36%下降到33.39%。

网络混部测试结果示例 ​

Test ScenarioNetwork Bandwidth (Gbits/sec)Interference Rate
Baseline0.93-
Direct Deploy0.4254.84%
Co-deployment0.876.45%
  • 结论:混部网络隔离后,在线干扰率从54.84%下降到6.45%。

SOFARPC 介绍 ​

概述 ​

SOFARPC(Scalable Open Financial Architecture Remote Procedure Call)是蚂蚁集团自研的高性能、高可扩展性、生产级 Java RPC 框架,历经十年金融级生产环境验证。作为 SOFAStack 技术栈的核心组件之一,SOFARPC 为分布式微服务提供高效、稳定的服务间远程调用能力,广泛应用于支付、交易、风控等对时延高度敏感的金融业务场景。

本测试套件选择 SOFARPC 作为 CPU 混部场景的在线业务负载,旨在模拟真实微服务调用中 CPU 密集、时延敏感的工作负载特征。

项目地址 ​

Gitee: sofa-rpc

核心特性 ​

  • 多协议支持:支持 Bolt(蚂蚁自研高性能二进制协议)、Dubbo、REST、HTTP/2 等主流通信协议,可灵活适配不同业务场景。
  • 丰富的序列化方案:支持 Hessian2(默认)、Protobuf、JSON、SofaFury 等多种序列化协议,其中 SofaFury 为蚂蚁自研极致序列化方案。
  • 完善的服务治理:内置负载均衡、容错机制(失败重试、熔断降级)、流量控制、动态路由等能力,保障服务调用的高可用与稳定性。
  • 高可扩展性:采用微内核 + SPI 扩展机制,支持协议扩展、序列化扩展、过滤器链扩展等,各扩展点内部实现与第三方实现绝对平等。
  • 分布式链路追踪:集成 SOFATracer,支持基于 OpenTracing 规范的分布式链路追踪,可透明埋点并上报至 Zipkin、Jaeger、SkyWalking 等后端。

架构与性能特征 ​

SOFARPC 采用经典的服务注册/发现/调用架构,核心组件包括服务注册中心(Registry)、服务提供者(Service)和服务消费者(Reference)。底层基于 Netty 异步事件驱动网络框架,通过 TCP 长连接复用、Reactor 多线程模型实现高性能通信。

典型性能指标(Bolt 协议,50 并发客户端,4C8G 虚拟机):

请求/响应大小TPS平均 RT(ms)
100byte / 100byte~45,0001.1
1KB / 1KB~41,0001.2
5KB / 5KB~32,0001.6

注:以上为官方压测参考数据,实际性能取决于硬件环境和业务复杂度。

作为 CPU 混部在线负载的选型依据 ​

特征说明
Java 应用JVM 运行时对 CPU 调度抢占高度敏感,CPU 资源被离线任务抢占时,JVM GC、JIT 编译、业务线程调度均受影响
RPC 时延敏感微服务调用场景要求 P99 时延可控,CPU 争抢直接导致请求排队、时延抖动放大
多线程模型服务端包含 IO 线程、业务线程池、心跳线程等多个线程组,CPU 混部时线程调度干扰特征明显
生产级负载相比纯 CPU 压测工具(如 benchmark 空转),SOFARPC 更贴近真实在线业务的 CPU 使用模式
开源可修改社区可获取、可定制,便于根据测试需求调整业务复杂度、调用频率、数据大小等参数

Benchmark 套件说明 ​

本测试套件采用 SOFARPC Benchmark 进行性能压测,模拟 RPC 调用,采集 TPS(吞吐量)、平均 RT(响应时间)、P99 时延等关键指标,并与在线独占场景(Online Test Only)的基线数据进行对比,从而计算混部干扰率。具体计算公式如下:

text
干扰率 = (Online 指标 - 混部指标) / Online 指标 × 100%

通过 CPU QoS 隔离(调度抢占压制、SMT 驱离)前后干扰率的对比,量化评估混部特性对在线业务的保护效果。

缩略语清单 ​

缩略语英文全名中文解释
SMTSimultaneous Multithreading同步多线程(超线程):指一个物理 CPU 核心内,并行跑多个逻辑线程,共享核心执行单元、Cache 等硬件资源。
OOMOut of Memory内存溢出:系统可用内存、Swap 均不足,内核触发内存回收或进程杀死机制的状态。
IO CostInput/Output CostI/O 成本:Linux cgroup 块设备 I/O 管控机制,基于权重与 IO 耗时做动态限速,保障在线业务 I/O 时延,约束离线负载。
IO InFlightInput/Output InFlight在途 I/O/ 飞行中 I/O:内核块层统计当前已下发但未完成的 I/O 请求数(inflight);限速通过控制该并发上限,防止离线 I/O 占满队列、阻塞在线业务,是 openEuler 混部 QoS 的 I/O 并发管控能力。
BWMBandwidth Management带宽管控:基于 eBPF+EDT 实现的网络 QoS 能力,区分在线 / 离线优先级,在线流量可抢占带宽,保障混部场景网络质量。
RPCRemote Procedure Call远程过程调用:分布式系统中节点间通信的基础技术,使调用远程服务如同调用本地方法一样透明。
SOFARPCScalable Open Financial Architecture RPC蚂蚁集团自研的高性能 Java RPC 框架,支持多协议、多序列化、分布式链路追踪,广泛应用于金融级微服务场景。本测试套 CPU 混部场景的在线业务负载。