一、HPC场景
OpnEuler22.09 白皮书:
https://www.openeuler.org/whitepaper/openEuler-whitepaper-2209.pdf 数控分离HCK
1> 背景
1、HPC介绍
1
2
3
reference:
https://www.ibm.com/cn-zh/topics/hpc
https://www.oracle.com/cn/cloud/hpc/what-is-hpc/
高性能计算: 并行工作的强大处理器集群,处理海量多维数据集(大数据),并以极高的速度解决复杂问题。
HPC利用的技术: 任务数据分割并行计算 + 集群(超级计算机)
HPC 使用场景: 基因组学 医疗卫生 航空航天 天气预报 气候建模 ….
HPC的基准测试套:HPCG(高性能共轭梯度) HPL(测试高性能计算集群系统浮点性能的基准)
2> HPC场景的难点
并行计算BSP(Bulk Synchronous Parallel Computing Model)模型: 并发计算 -> 通信 -> 屏障
1
2
系统噪声对HPC的影响
http://www.caep-scns.ac.cn/yanjiuchengguo/1576981548.pdf
通常HPC应用开发时,为了满足负载平衡需求,程序设计 人员需尽可能均匀地分割任务,保证每个进程具有相同的计算、通信、访存,从而使得所有 进程均在相同的时刻到达同步点、减少进程之间的相互等待。
如下图:左边理想情况, 右边实际情况。
由于集群规模变大,系统噪音干扰会导致HPC性能下降。
系统噪声定义:系统噪声指的是业务运行中执行的非应用计算任务,包括:系统/用户态守护进程、内核守护进程、内存管理、系统调度开销、业务应用的非计算任务、资源竞争带来的噪声(cache miss, page fault)等。
3> 解决方案
1、识别系统噪音
linux: https://docs.kernel.org/trace/osnoise-tracer.html
主要tracer:
1
2
3
硬件中断:打断(interference)进程的执行
软中断:(softirq)
线程调度:被高优先级任务抢占,时间片到
但是实际中我们基本已经知晓哪些系统噪声对应用会有影响,实际上我们是直接优化。
但是有些RT场景,可以利用这个工具抓。
2、消除系统噪音
1> intel mOS
源码: https://github.com/intel/mOS
mOS系统依然会基于Linux扩展而来,目前最新版0.8版使用的是Linux 5.4 LTS内核,但它又有自己的LWK轻量级内核,Linux内核管理少量部分CPU核心,以确保兼容性,LWK内核管理系统其他部分,类似Mutil-OS多OS。
内核设计:
1、CPU深度隔离-LWKCPU:
系统启动后将cmdline指定的cpu进行深度隔离,
1> 内核线程迁移(percpu kthread)
2> 用户态进程不允许运行
3> 中断迁移(tick中断)
2、调度: 新增支持RTC(run to complite)调度器,力求实现最简单的调度器
3、内存管理LWKMEM:
系统启动后将大部分内存从伙伴系统中隔离处理单独管理, 对单独隔离的内存使用新增的分配器。
1> mmap、munmap、brk流程走快速流程
2> 优先使用大页
3> 多级cache, 避免竞争
4、SYSFS接口
上述内存、CPU隔离资源通过sysfs接口进行申请。 并且提供用户态yod工具进行使用。
example:
1
2
3
4
https://github.com/intel/mOS/wiki/mOS-for-HPC-v0.8-Administrator's-Guide
1、kernel cmdline: lwkcpu=xxx lwkmem=xxx
https://github.com/intel/mOS/wiki/mOS-for-HPC-v0.8-Administrator's-Guide
2、 yod yod-arguments program program-arguments //yod-argument指定使用什么资源,多少资源
2> openEuler HCK
基本原理和mOS一致。
隔离计算任务和噪声任务:将 HPC 计算任务运行在轻量级内核侧;将系统任务、中断处理、内核线程等运行在 Linux 内核侧, 从而减少系统噪声对 HPC 计算任务的干扰。通过系统调用代理调度,内核单独处理高负载系统调度,保障高负载任务的高效完成,且不影响其他系统服务。
但是区别:
1、架构支持arm64/x86 ,有部分实现要在arm64实现
说起来跟mOS差不多,但是arm64实际实现中遇到很多性能波动问题,尤其在cpu上下线和内存分配这块。