openEuler/QoS-Deployment-Test:如何扩展测试套件支持更多资源类型
【免费下载链接】QoS-Deployment-TestDocker-based openEuler Online-Offline Co-scheduling Test Suite.项目地址: https://gitcode.com/openeuler/QoS-Deployment-Test
前往项目官网免费下载:https://ar.openeuler.org/ar/
想要为openEuler在线/离线混部测试套件添加对新资源类型的支持吗?本文将为您详细介绍扩展QoS-Deployment-Test测试套件的完整指南,帮助您轻松实现GPU、存储、网络带宽等更多资源类型的测试验证。🚀
项目概述与扩展价值
openEuler/QoS-Deployment-Test是一个基于Docker的在线/离线混部QoS资源隔离能力验证测试套件。它通过**"基线测试 → 直接混部 → QoS混部"**的三阶段对比方法,自动评估CPU、内存、网络、IO四种资源在混部场景下的性能干扰程度和QoS压制效果。
随着云原生技术的发展,更多资源类型需要QoS保障。扩展测试套件支持更多资源类型,可以帮助您:
- 🔍 全面评估系统资源隔离能力
- 📊 发现潜在的性能瓶颈和干扰问题
- 🛠️ 验证新硬件资源的QoS机制有效性
- 📈 为系统调优提供数据支撑
现有架构分析
在开始扩展之前,让我们先了解现有测试套件的架构设计:
核心目录结构
├── start.sh # 主入口脚本 ├── common/common.sh # 公共函数库 ├── config/ # 配置文件目录 │ ├── cpu.conf # CPU测试配置 │ ├── mem.conf # 内存测试配置 │ ├── net.conf # 网络测试配置 │ └── io.conf # IO测试配置 ├── deployment/ # Docker部署脚本 ├── init/ # 测试初始化与清理 │ ├── cpu/ # CPU初始化脚本 │ ├── mem/ # 内存初始化脚本 │ ├── net/ # 网络初始化脚本 │ └── io/ # IO初始化脚本 ├── benchmark/ # 基准测试执行 │ ├── cpu/ # CPU基准测试 │ ├── mem/ # 内存基准测试 │ ├── net/ # 网络基准测试 │ └── io/ # IO基准测试测试执行流程
现有测试类型遵循统一的执行模式:
- 初始化阶段(
init/目录):准备测试环境,配置资源限制 - 基准测试阶段(
benchmark/目录):执行在线/离线负载测试 - 清理阶段:恢复环境,收集结果
扩展新资源类型的完整指南
第1步:定义新资源类型配置文件
在config/目录下创建新的配置文件,例如gpu.conf:
# ============================================================================== # GPU QoS Co-deployment Test — Benchmark Parameters # ============================================================================== # # Format: KEY=VALUE (no spaces around '=') # --- GPU Configuration --- GPU_DEVICE_ID=0 # GPU设备ID GPU_MEMORY_LIMIT=4096 # GPU内存限制(MB) GPU_COMPUTE_UNITS=80 # GPU计算单元百分比 # --- Benchmark Parameters --- gpu_server_ip=127.0.0.1 gpu_server_port=12222 online_gpu_util=30 # 在线业务GPU使用率(%) offline_gpu_util=70 # 离线业务GPU使用率(%)第2步:创建初始化脚本
在init/目录下创建对应的初始化脚本目录,例如init/gpu/:
init/gpu/gpu_init.sh:
#!/bin/bash gpu_init() { local log_file=$1 local config_file=$2 source "$config_file" log_info "Initializing GPU test environment" "$log_file" # 检查GPU设备 if ! command -v nvidia-smi &> /dev/null; then log_error "nvidia-smi not found. GPU test requires NVIDIA drivers." "$log_file" return 1 fi # 配置GPU QoS限制 if [[ -f /sys/fs/cgroup/gpu/gpu.qos_level ]]; then echo "-1" > /sys/fs/cgroup/gpu/gpu.qos_level log_info "GPU QoS level configured" "$log_file" fi # 配置GPU内存限制 if [[ -f /sys/fs/cgroup/gpu/gpu.memory.high ]]; then echo "${GPU_MEMORY_LIMIT}M" > /sys/fs/cgroup/gpu/gpu.memory.high log_info "GPU memory limit configured: ${GPU_MEMORY_LIMIT}MB" "$log_file" fi return 0 }init/gpu/gpu_clean.sh:
#!/bin/bash gpu_clean() { local log_file=$1 log_info "Cleaning GPU test environment" "$log_file" # 清理GPU进程 nvidia-smi --gpu-reset # 恢复GPU默认设置 if [[ -f /sys/fs/cgroup/gpu/gpu.qos_level ]]; then echo "0" > /sys/fs/cgroup/gpu/gpu.qos_level fi return 0 }第3步:创建基准测试脚本
在benchmark/目录下创建对应的基准测试脚本目录,例如benchmark/gpu/:
benchmark/gpu/gpu_run.sh:
#!/bin/bash gpu_run_online() { local log_file=$1 local result_file=$2 local online_container=$3 log_info "GPU ONLINE test starting" "$log_file" # 启动在线GPU负载(例如:深度学习推理) docker exec -d "$online_container" \ bash -c "python3 /app/gpu_benchmark.py --mode=inference --util=${online_gpu_util}" # 收集性能指标 docker exec "$online_container" \ bash -c "nvidia-smi --query-gpu=utilization.gpu,memory.used --format=csv -l 1" >> "$result_file" } gpu_run_offline() { local log_file=$1 local offline_container=$2 log_info "GPU OFFLINE test starting" "$log_file" # 启动离线GPU负载(例如:模型训练) docker exec -d "$offline_container" \ bash -c "python3 /app/gpu_benchmark.py --mode=training --util=${offline_gpu_util}" } gpu_run() { cur_dir=$1 run_dir=$2 gpu_conf=$3 log_file=$4 output_result=$5 online_container=$6 offline_container=$7 source "$cur_dir/common/common.sh" source "$gpu_conf" log_info "Starting GPU benchmark test" "$log_file" # 执行在线测试 gpu_run_online "$log_file" "$output_result.online" "$online_container" # 执行离线测试 gpu_run_offline "$log_file" "$offline_container" log_info "GPU benchmark completed" "$log_file" }第4步:创建QoS配置脚本
benchmark/gpu/gpu_co-deployment_config.sh:
#!/bin/bash gpu_co_deployment_config() { local log_file=$1 local online_container=$2 local offline_container=$3 log_info "Configuring GPU QoS for co-deployment" "$log_file" # 为在线容器配置高优先级GPU QoS docker update "$online_container" \ --cgroup-parent=/sys/fs/cgroup/gpu/online # 为离线容器配置低优先级GPU QoS docker update "$offline_container" \ --cgroup-parent=/sys/fs/cgroup/gpu/offline log_info "GPU QoS configuration completed" "$log_file" }benchmark/gpu/gpu_co-deployment_unconfig.sh:
#!/bin/bash gpu_co_deployment_unconfig() { local log_file=$1 local online_container=$2 local offline_container=$3 log_info "Removing GPU QoS configuration" "$log_file" # 恢复默认GPU配置 docker update "$online_container" \ --cgroup-parent="" docker update "$offline_container" \ --cgroup-parent="" log_info "GPU QoS configuration removed" "$log_file" }第5步:修改主入口脚本
在start.sh中添加对新资源类型的支持:
# 在TEST_TYPE参数处理部分添加新类型 case "$TEST_TYPE" in "ALL") test_types=("CPU" "MEM" "NET" "IO" "GPU") ;; "CPU"|"MEM"|"NET"|"IO"|"GPU") test_types=("$TEST_TYPE") ;; *) log_error "Unsupported test type: $TEST_TYPE" usage exit 1 ;; esac # 在测试执行循环中添加GPU处理 for test_type in "${test_types[@]}"; do case "$test_type" in "GPU") log_info "Starting GPU test..." # 调用GPU测试函数 gpu_test ;; # ... 其他现有测试类型 esac done扩展示例:存储QoS测试
除了GPU,您还可以扩展支持存储QoS测试。以下是存储测试的配置示例:
config/storage.conf:
# ============================================================================== # Storage QoS Co-deployment Test — Benchmark Parameters # ============================================================================== # STORAGE_DEVICE=/dev/sdb # 存储设备 STORAGE_MOUNT_POINT=/mnt/test # 挂载点 ONLINE_IOPS_LIMIT=1000 # 在线业务IOPS限制 OFFLINE_IOPS_LIMIT=5000 # 离线业务IOPS限制 BLKIO_WEIGHT_ONLINE=500 # 在线业务权重 BLKIO_WEIGHT_OFFLINE=100 # 离线业务权重**benchmark/storage/storage_run.sh**核心函数:
storage_run_online() { # 使用fio测试在线存储性能 docker exec "$online_container" \ fio --name=online-storage-test \ --rw=randread \ --bs=4k \ --iodepth=32 \ --size=1G \ --runtime=300 \ --output-format=json } storage_run_offline() { # 使用fio测试离线存储性能 docker exec "$offline_container" \ fio --name=offline-storage-test \ --rw=randwrite \ --bs=64k \ --iodepth=128 \ --size=10G \ --runtime=300 \ --output-format=json }最佳实践与注意事项
1. 保持架构一致性
- 遵循现有目录结构:
config/、init/、benchmark/ - 使用统一的函数命名规范:
{resource}_init、{resource}_run、{resource}_clean - 复用公共函数库
common/common.sh中的日志和工具函数
2. 配置管理
- 所有配置参数集中放在
config/{resource}.conf中 - 使用
KEY=VALUE格式,避免空格 - 提供合理的默认值和注释说明
3. 错误处理
- 在关键步骤添加错误检查和回滚机制
- 使用
log_error记录错误信息 - 确保测试失败时能正确清理环境
4. 性能指标收集
- 定义清晰的性能指标收集格式
- 输出结果到统一的
output/目录 - 支持JSON、CSV等结构化格式以便后续分析
5. 文档维护
- 更新
README.md文档,说明新资源类型的测试方法 - 在
docs/目录下添加详细的技术文档 - 提供配置示例和故障排除指南
验证与测试
完成扩展后,通过以下步骤验证新资源类型:
单元测试:单独测试每个组件功能
sh init/gpu/gpu_init.sh sh benchmark/gpu/gpu_run.sh集成测试:验证与现有系统的集成
sh start.sh -t GPU端到端测试:完整执行测试流程
sh start.sh -d -t ALL结果验证:检查输出结果是否符合预期
cat output/gpu_test_result.txt
总结
扩展openEuler/QoS-Deployment-Test测试套件支持更多资源类型是一个系统化的工程,但遵循现有的架构模式和设计原则,您可以轻松实现对新资源类型的支持。通过本文提供的完整指南,您可以:
✅ 快速添加GPU、存储等新资源类型的测试支持
✅ 保持与现有架构的一致性
✅ 确保测试结果的准确性和可比性
✅ 为系统QoS能力评估提供更全面的覆盖
记住,良好的扩展性设计是测试套件长期可维护的关键。每次扩展都应考虑向后兼容性和代码复用,让您的测试套件随着技术发展而不断演进!🎯
现在就开始扩展您的测试套件,为openEuler系统的资源隔离能力提供更全面的验证吧!
【免费下载链接】QoS-Deployment-TestDocker-based openEuler Online-Offline Co-scheduling Test Suite.项目地址: https://gitcode.com/openeuler/QoS-Deployment-Test
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考