活动介绍

SLURM资源与作业管理系统的能源核算与控制

立即解锁
发布时间: 2025-08-18 00:26:47 阅读量: 4 订阅数: 16
### SLURM资源与作业管理系统的能源核算与控制 在高性能计算(HPC)领域,能源消耗一直是一个备受关注的问题。有效的能源管理不仅可以降低成本,还能提高系统的可持续性。本文将介绍如何使用SLURM资源与作业管理系统进行能源核算与控制,包括能源数据的收集、分析以及如何通过CPU频率缩放来控制能源消耗。 #### 现有能源监测与调度系统 在介绍SLURM之前,先了解一些早期的能源监测与调度系统。LoadLeveler是一款专有软件,它似乎是最早提供电源和能源监测以及基于系统根据预测模型自动设置CPU频率的能源感知调度的软件之一。在LRZ的SuperMUC超级计算机上就使用了具有这些能源感知功能的LoadLeveler。此外,Hennecke等人通过一个名为LLview的特定LoadLeveler工具,从IBM Blue Gene/P超级计算机中检索功耗数据。LLview能够以高精度(每秒约4个样本)提供每个作业的功耗数据,但该工具是闭源的,并且是专门为BlueGene/P平台开发的。 在较新的微处理器中,常见的机制是动态电压频率调整(DVFS),即动态调整频率和电压。降低CPU频率可能会导致能源消耗的减少。利用DVFS技术的各种策略已被广泛研究,以改善MPI应用程序的能源消耗。其他研究表明,自适应使用频率缩放可能会在性能损失较小的情况下带来显著的能源效益。通过CPU频率缩放来控制能源消耗作为一种用户功能,最初是在OAR(另一个用于HPC集群的灵活资源和作业管理系统)上进行研究和实现的。 #### SLURM中的能源消耗检索与控制集成 SLURM有一个特定的插件,用于在作业执行期间收集每个节点的各种资源使用信息。这个名为jobacct gather的插件会收集诸如每个节点上所有任务的CPU和内存利用率等信息,然后在所有节点内部进行汇总,并返回每个作业的单个最大值和平均值。 ##### SLURM监控框架架构 SLURM的监控机制架构涉及多个守护进程、进程和子线程,它们部署在集群的不同组件上。在SLURM架构中,一个作业可能由多个并行的子作业(称为步骤)组成。作业通常通过sbatch命令以bash脚本的形式提交,脚本中可能包含多次调用SLURM的srun命令来启动应用程序(子作业)。 当一个作业启动时,srun命令将在作业分配的第一个节点上被调用,而slurmd守护进程将在每个节点上启动一个slurmstepd进程,该进程将跟踪整个步骤的执行。如果激活了基本监控模式,jobacct gather插件将被调用,slurmstepd进程将在每个节点上启动一个线程,在执行期间监控各种资源(如CPU、内存等)。资源利用率的轮询是通过Linux伪文件系统/proc/完成的,该系统是一个内核数据结构接口,提供节点上各种资源的统计信息。采样频率由用户在作业提交时指定。各种统计信息在执行期间保存在数据结构中,作业完成后,所有节点上的汇总值(如平均值、最大值等)将存储在数据库中。数据通过内部远程过程调用(RPC)在线程和进程之间移动,以确保机制的可靠性和效率。用户可以在作业执行期间通过SLURM命令sstat检索这些信息,在作业终止后通过sacct检索。 新的监控模式将遵循相同的设计架构,为每个监控模式使用单独的插件,并启动新线程,使其轮询与基本监控模式异步。 ```mermaid graph TD classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px; classDef database fill:#FFF6CC,stroke:#FFBC52,stroke-width:2px; classDef client fill:#FFEBEB,stroke:#E68994,stroke-width:2px; classDef hardware fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px; A(slurmctld):::process --> B(slurmd):::process A --> C(slurmd):::process A --> D(slurmd):::process A --> ...(...):::process B --> E(slurmstepd):::process C --> F(slurmstepd):::process D --> G(slurmstepd):::process ... --> H(slurmstepd):::process I(srun):::process --> E J(salloc):::process --> E K(sbatch):::process --> E L(slurmdbd):::database --> A M(Client):::client --> A N(Cluster Hardware):::hardware --> B N --> C N --> D N --> ... E --> O(jobacct gather):::process F --> O G --> O H --> O O --> P(Acct_gather_Energy IPMI):::process O --> Q(Acct_gather_Energy RAPL):::process O --> R(Acct_gather_Profile HDF5):::process P --> S(sstat):::process P --> T(scontrol):::process P --> U(sacct):::process Q --> S Q --> T Q --> U R --> S R --> T R --> U ``` ##### 通过IPMI接口收集功率数据 有多种开源软件支持IPMI协议,并能从基板管理控制器(BMC)检索功率数据,如Ipmitool、OpenIPMI等。我们选择了freeipmi,原因在于它专门用于HPC,不需要内核模块,并且提供了易于集成的API。 IPMI和RAPL检索的一个重要区别在于调用的持续时间。IPMI调用通常需要4ms到80ms,但有时可能需要2到3秒以上。因此,需要将收集过程与其他资源跟踪和作业执行控制异步进行,所以需要一个单独的线程来处理IPMI调用。此外,我们不仅希望在作业执行期间从jobacct线程与该线程通信,还希望从slurmd获取节点的功耗信息,以便获取系统信息。 因此,选择从slurmd启动IPMI轮询线程。IPMI收集的是功率(瓦),而我们感兴趣的是计算作业的能源消耗。因此,需要使用特定的算法来计算每个节点的能源消耗,然后汇总所有分配节点的能源消耗,以获得作业的能源消耗。采样频率由管理员为每个节点定义的特定选项固定。线程内的睡眠函数允许根据这个频率dt来累加能源消耗。 假设tn是一个轮询时间,那么下一个轮询时间将是tn + 1 = tn + dt。时间使用C函数”time(NULL)”计算,单位为秒。因此,tn + 1 - tn的差值将在dt - 1、dt、dt + 1之间,且始终以秒为单位。假设上述时间对应的功率值分别为wn和wn + 1,则每个节点在tn和tn + 1之间的能源消耗dEn可以通过以下公式计算: \[dE_n = (t_{n + 1}
corwn 最低0.47元/天 解锁专栏
赠100次下载
继续阅读 点击查看下一篇
profit 400次 会员资源下载次数
profit 300万+ 优质博客文章
profit 1000万+ 优质下载资源
profit 1000万+ 优质文库回答
复制全文

相关推荐

郑天昊

首席网络架构师
拥有超过15年的工作经验。曾就职于某大厂,主导AWS云服务的网络架构设计和优化工作,后在一家创业公司担任首席网络架构师,负责构建公司的整体网络架构和技术规划。
最低0.47元/天 解锁专栏
赠100次下载
百万级 高质量VIP文章无限畅学
千万级 优质资源任意下载
千万级 优质文库回答免费看
立即解锁

专栏目录

最新推荐

编程中的数组应用与实践

### 编程中的数组应用与实践 在编程领域,数组是一种非常重要的数据结构,它可以帮助我们高效地存储和处理大量数据。本文将通过几个具体的示例,详细介绍数组在编程中的应用,包括图形绘制、随机数填充以及用户输入处理等方面。 #### 1. 绘制数组图形 首先,我们来创建一个程序,用于绘制存储在 `temperatures` 数组中的值的图形。具体操作步骤如下: 1. **创建新程序**:选择 `File > New` 开始一个新程序,并将其保存为 `GraphTemps`。 2. **定义数组和画布大小**:定义一个 `temperatures` 数组,并设置画布大小为 250 像素×250 像

并发编程:多语言实践与策略选择

### 并发编程:多语言实践与策略选择 #### 1. 文件大小计算的并发实现 在并发计算文件大小的场景中,我们可以采用数据流式方法。具体操作如下: - 创建两个 `DataFlowQueue` 实例,一个用于记录活跃的文件访问,另一个用于接收文件和子目录的大小。 - 创建一个 `DefaultPGroup` 来在线程池中运行任务。 ```plaintext graph LR A[创建 DataFlowQueue 实例] --> B[创建 DefaultPGroup] B --> C[执行 findSize 方法] C --> D[执行 findTotalFileS

设计与实现RESTfulAPI全解析

### 设计与实现 RESTful API 全解析 #### 1. RESTful API 设计基础 ##### 1.1 资源名称使用复数 资源名称应使用复数形式,因为它们代表数据集合。例如,“users” 代表用户集合,“posts” 代表帖子集合。通常情况下,复数名词表示服务中的一个集合,而 ID 则指向该集合中的一个实例。只有在整个应用程序中该数据类型只有一个实例时,使用单数名词才是合理的,但这种情况非常少见。 ##### 1.2 HTTP 方法 在超文本传输协议 1.1 中定义了八种 HTTP 方法,但在设计 RESTful API 时,通常只使用四种:GET、POST、PUT 和

Clojure多方法:定义、应用与使用场景

### Clojure 多方法:定义、应用与使用场景 #### 1. 定义多方法 在 Clojure 中,定义多方法可以使用 `defmulti` 函数,其基本语法如下: ```clojure (defmulti name dispatch-fn) ``` 其中,`name` 是新多方法的名称,Clojure 会将 `dispatch-fn` 应用于方法参数,以选择多方法的特定实现。 以 `my-print` 为例,它接受一个参数,即要打印的内容,我们希望根据该参数的类型选择特定的实现。因此,`dispatch-fn` 需要是一个接受一个参数并返回该参数类型的函数。Clojure 内置的

ApacheThrift在脚本语言中的应用

### Apache Thrift在脚本语言中的应用 #### 1. Apache Thrift与PHP 在使用Apache Thrift和PHP时,首先要构建I/O栈。以下是构建I/O栈并调用服务的基本步骤: 1. 将传输缓冲区包装在二进制协议中,然后传递给服务客户端的构造函数。 2. 构建好I/O栈后,打开套接字连接,调用服务,最后关闭连接。 示例代码中的异常捕获块仅捕获Apache Thrift异常,并将其显示在Web服务器的错误日志中。 PHP错误通常在Web服务器的上下文中在服务器端表现出来。调试PHP程序的基本方法是检查Web服务器的错误日志。在Ubuntu 16.04系统中

AWSLambda冷启动问题全解析

### AWS Lambda 冷启动问题全解析 #### 1. 冷启动概述 在 AWS Lambda 中,冷启动是指函数实例首次创建时所经历的一系列初始化步骤。一旦函数实例创建完成,在其生命周期内不会再次经历冷启动。如果在代码中添加构造函数或静态初始化器,它们仅会在函数冷启动时被调用。可以在处理程序类的构造函数中添加显式日志,以便在函数日志中查看冷启动的发生情况。此外,还可以使用 X-Ray 和一些第三方 Lambda 监控工具来识别冷启动。 #### 2. 冷启动的影响 冷启动通常会导致事件处理出现延迟峰值,这也是人们关注冷启动的主要原因。一般情况下,小型 Lambda 函数的端到端延迟

5G网络演进速递:Nokia引领核心网技术革命的8大创新

![5G网络演进速递:Nokia引领核心网技术革命的8大创新](https://www.viavisolutions.com/sites/default/files/images/diagram-sba.png) # 摘要 随着移动通信技术的快速发展,5G网络作为新一代通信标准,不仅提高了网络速度和容量,而且在核心网技术上实现了重大突破。本文从5G网络演进的角度出发,概述了Nokia在5G核心网技术领域的市场定位和技术架构,及其产品的技术优势。通过分析Nokia在不同行业中的应用案例,本文展示了5G技术革新带来的业务影响和市场反馈。文章还深入探讨了Nokia技术革命中的八大创新,包括SDN、

三维建模技术在机械臂设计中的应用:掌握关键技术,提升设计效率

![三维建模技术在机械臂设计中的应用:掌握关键技术,提升设计效率](https://cdn.canadianmetalworking.com/a/10-criteria-for-choosing-3-d-cad-software-1490721756.jpg?size=1000x) # 摘要 三维建模技术是现代机械臂设计的核心,涵盖了从基础理论到实际应用的广泛内容。本文首先介绍三维建模技术的基本概念和理论基础,重点分析了参数化建模和曲面建模等方法论,以及其在机械臂设计中的特殊要求。接着,探讨了主流三维建模软件的特点及操作技巧,并通过实践案例分析了其在工业和协作机械臂设计中的应用。本文进一步探

在线票务系统解析:功能、流程与架构

### 在线票务系统解析:功能、流程与架构 在当今数字化时代,在线票务系统为观众提供了便捷的购票途径。本文将详细解析一个在线票务系统的各项特性,包括系统假设、范围限制、交付计划、用户界面等方面的内容。 #### 系统假设与范围限制 - **系统假设** - **Cookie 接受情况**:互联网用户不强制接受 Cookie,但预计大多数用户会接受。 - **座位类型与价格**:每场演出的座位分为一种或多种类型,如高级预留座。座位类型划分与演出相关,而非个别场次。同一演出同一类型的座位价格相同,但不同场次的价格结构可能不同,例如日场可能比晚场便宜以吸引家庭观众。 -

响应式Spring开发:从错误处理到路由配置

### 响应式Spring开发:从错误处理到路由配置 #### 1. Reactor错误处理方法 在响应式编程中,错误处理是至关重要的。Project Reactor为其响应式类型(Mono<T> 和 Flux<T>)提供了六种错误处理方法,下面为你详细介绍: | 方法 | 描述 | 版本 | | --- | --- | --- | | onErrorReturn(..) | 声明一个默认值,当处理器中抛出异常时发出该值,不影响数据流,异常元素用默认值代替,后续元素正常处理。 | 1. 接收要返回的值作为参数<br>2. 接收要返回的值和应返回默认值的异常类型作为参数<br>3. 接收要返回