Home OpenEuler High-performance computing Kernel(HCK)
Post
Cancel

OpenEuler High-performance computing Kernel(HCK)

一、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)等。

image-20231218160510559

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
1kernel 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上下线和内存分配这块。

This post is licensed under CC BY 4.0 by the author.