一文带你看懂健康管理系统----IPMI

news2024/12/23 23:25:36

目录

1. IPMI概述

2. IPMI系统设计

3. 主BMC模块设计

5. 从IPMI模块设计

6. 名词解释

6. 代码


1. IPMI概述

智能平台管理接口(IPMI:Intelligent Platform Management Interface)是一项应用于服务器管理系统设计的标准,由Intel、HP、Dell和NEC公司共同提出。

1998 年IPMI 1.0 版提供的最初功能是能够通过网络监控组件温度和电压。IPMI 1.5 版在原有基础上添加了PCI 管理总线等功能,IPMI 2.0 在完全兼容IPMI 1.0 与IPMI 1.5 的情况下,该版本在上两个版本的基础上有了很多改进,新增了控制台的重定向的支持,对于远程管理方面,管理人员可以利用串口、网口远程管理服务器(包括开关机)。IPMI通过使用私有I2C总线或IPMB将附加的管理控制器连接至系统来提供对平台管理的扩展的支持。

在IPMI推出之前,每个计算机厂商都自行开发了监控其平台中各组件性能的方案,这些方案倾向于将一个企业或电信公司与某一具体厂商紧密结合,通常管理效率低下。随着数据中心计算设备和电信网络的激增,这种长期形成的缺点已经变得日益严重。

IPMI 提供了一种标准化方式以便监控计算设备运行时各组件的状况,特别适合对大量服务器控制的任务管理,同时它也适用于不同的操作系统。IPMI 还有一个显著特点在于其是独立于操作系统,决定了它不会像带内的软件管理,不用考虑所在操作系统的运行情况,或者由于一些未知原因出现的异常报错,IPMI 模块只要在不断电的情况下依然可以正常的运行工作。这是带外管理的显著优势。

当前最新版本为2.0。利用此接口标准设计有助于在不同类服务器系统硬件上实施系统管理。下图为典型的IPMI实现的管理检测系统。

2. IPMI系统设计

设备的IPMI分为主模块和从模块,其中IPMI的主模块可以放到CPU模块上,IPMI主模块通过IIC总线采集各个从模块的信息,通过网口统一上报给外部的监测设备。IPMI从模块负责采集各板卡的电流、电压、温度等信息,并收集从模块上CPU的信息。SHMC汇总整个系统的温度信息,根据温度信息控制整机的风扇速度。同时负责整个单元的状态监控、告警管理,日志管理,KVM over IP,CPU模块上的磁盘状态、内存状态及故障等功能。

3. 主BMC模块设计

主BMC模块主要用于组织和管理基于IPMI标准的硬件资源,由CPU板上的ChMC(机箱管理控制器)实现ChMC(机箱管理控制器)的主要功能包括:

1)各个功能模块的上下电管理;

2)机箱内部温度以及模块信息检测(包括模块类型及模块在线信息监测,CPU模块的硬盘及内存等信息);

3)响应远程控制命令,处理错误警告并记录系统日志;

4)对外通过网络提供机箱及各模块统一的管理接口。

单元管理子模块由机箱管理软件ChMC、数据处理模块、系统CPU模块上的Agent等组成。

4. 软件组成

单元管理子模块软件对整个单元软硬件资源进行可视化的管理和调度。在统一的资源管理模式下,对下更好地管理硬件资源,向上支撑应用的高效、自动化管理。单元管理子模块软件集中管理和展现的资源包括:

(1)系统信息:系统配置、网络拓扑、运行状态、故障、告警等

(2)核心硬件信息:CPU模块、接口模块、电源模块的信息,信息由各模块上的IPMC上报。

本软件采用分层架构和监控管理代理方式,并提供一个基于B/S架构的统一Web监控管理门户实现从处理器到业务应用全覆盖式监控与管理,具有监控信息采集与处理、实时状态展示、网络拓扑呈现、事件告警、高可用集群管理、安全管控、资源管理与任务调度、日志操作等功能,为整个单元高效安全可靠运行和便捷管理提供有力工具。

基础支持软件用于实现ChMC初始化、引导、接口驱动及管理等功能,提供标准接口,支持上层软件模块的开发。标准库提供ChMC部分的人机接口、内存分配与回收、线程管理等标准功能,对动态库进行裁剪以适应体积要求。

5. 从IPMI模块设计

作为机箱管理系统的重要组成部分,模块管理子模块承担机箱内多个不同类型功能模块的IPMI管理控制任务。为单元管理提供访问本地FRU的管理接口。板卡管理子系统主要实现下列管理功能:

1)实现功能板卡的插入检测、通断电、自检、冷热启动等相关控制;

2)响应主控板卡通过IPMB总线发送的命令及错误处理;

3)实现温度、电压传感器的实时监测;

4)实现机箱管理访问控制FRU和SDR信息;

5)向机箱管理软件上报各类信息,包括负载电源自检、现场可替换单元状态切换、各类传感器告警事件的实时上报。

单元管理子模块通过IPMB总线向功能板卡发送IPMI管理命令,IPMC控制器内的命令解析模块实现收发消息包的解析组包功能。命令处理模块根据IPMI协议标准将解析后的数据进行处理。

6. 名词解释


BMC:IPMI管理平台的核心控制器
IPMB:IPMB是用于BMC与外围组织管理控制器(SMC)的通信,这些外围组织管理器一般控制特定设备,其上传递的是IPMI命令,IPMB是基于I2C的总线。
ICMB: 在IPMB总线上,连接着一个ICMB桥,通过ICMB可以和远程的另一个管理平台通信
SDR: (Sensor Data Record) 用于保存传感器的具体配置信息,如告警门限、事件触发是否允许等配置数据
 SEL: (Sensor Event Log) 用于保存传感器产生的告警事件等数据
 SMBus: BMC通过芯片上一对SMBus接口连接网络。
 

6. 代码

下面是以stm32f2的I2C1(IPMB)为例的初始化代码:

void I2C1_GPIO_Configuration(void)
{
  GPIO_InitTypeDef  GPIO_InitStructure;
// SCL PB6
// SDA PB7
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
	GPIO_InitStructure.GPIO_OType = GPIO_OType_OD;//I2C必须开漏输出,实现线与逻辑
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_InitStructure.GPIO_PuPd =  GPIO_PuPd_NOPULL;
	GPIO_Init(GPIOB, &GPIO_InitStructure);
	
	GPIO_PinAFConfig(GPIOB,GPIO_PinSource6,GPIO_AF_I2C1); 
	GPIO_PinAFConfig(GPIOB,GPIO_PinSource7,GPIO_AF_I2C1);
}


void I2C1_Configuration(void)
{
  I2C_InitTypeDef I2C_InitStructure;
	NVIC_InitTypeDef NVIC_InitStructure;
	
	I2C_DeInit(I2C1);
	I2C_InitStructure.I2C_Mode = I2C_Mode_I2C;
	I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_2;
	I2C_InitStructure.I2C_OwnAddress1 = 0xA0;              //从机地址
	I2C_InitStructure.I2C_Ack = I2C_Ack_Enable;
	I2C_InitStructure.I2C_AcknowledgedAddress= I2C_AcknowledgedAddress_7bit;
	I2C_InitStructure.I2C_ClockSpeed = 100000;
	I2C_Init(I2C1, &I2C_InitStructure);

	
	NVIC_InitStructure.NVIC_IRQChannel                   = I2C1_EV_IRQn;
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
	NVIC_InitStructure.NVIC_IRQChannelSubPriority        = 0;
	NVIC_InitStructure.NVIC_IRQChannelCmd                = ENABLE;
	NVIC_Init(&NVIC_InitStructure);
	
	NVIC_InitStructure.NVIC_IRQChannel = I2C1_ER_IRQn;
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;                 //从优先级
	NVIC_InitStructure.NVIC_IRQChannelCmd                = ENABLE;
  NVIC_Init(&NVIC_InitStructure);

  I2C_ITConfig(I2C1, I2C_IT_BUF | I2C_IT_EVT |I2C_IT_ERR, ENABLE);   //使能中断
  I2C_Cmd(I2C1, ENABLE);                                             //使能I2C
}


void I2C1_Init(void)
{

	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1, ENABLE);
	
  I2C1_GPIO_Configuration();
  I2C1_Configuration();
}



void I2C1_EV_IRQHandler(void)
{

  __IO uint32_t SR1Register =0;
  __IO uint32_t SR2Register =0;

  SR1Register = I2C1->SR1;
  SR2Register = I2C1->SR2;
	
//	printf("I2C1_EV_IRQHandler\r\n");

	 /* I2C1是从机(MSL = 0) */
  if((SR2Register &0x0001) != 0x0001)
  {
    /* 主机已发生地址(ADDR = 1: EV1) */
    if((SR1Register & 0x0002) == 0x0002)
    {
      /* 清除标志,准备接收数据 */
      SR1Register = 0;
      SR2Register = 0;
			
			Rx_Idx_IIC1=0;
			Tx_Idx_IIC1=0;
    }
		
		
		
    /* 接收数据(RXNE = 1: EV2) */
    if((SR1Register & 0x0040) == 0x0040)
    {
      Buffer_Rx_IIC1[Rx_Idx_IIC1++] = I2C1->DR;
      SR1Register = 0;
      SR2Register = 0;
    }
    /* 检测到停止条件(STOPF =1: EV4) */
    if(( SR1Register & 0x0010) == 0x0010)
    {
      I2C1->CR1 |= 0x0001;
      SR1Register = 0;
      SR2Register = 0;
      Flag_RcvOK_IIC1 = 1; 	
    }
		
		
		
		
		 /* 发送数据(TxE = 1: EV3) */
    if((SR1Register & 0x0080) == 0x0080)
    {
			I2C1->DR = Response_Message[Tx_Idx_IIC1++];	
      SR1Register = 0;
      SR2Register = 0;
    }
    /* 检测到非应答(AF =1: EV3-2) */
    if(( SR1Register & 0x0400) == 0x0400)
    {
			I2C1->SR1 &= 0xFDFF;
      SR1Register = 0;
      SR2Register = 0;
		printf("read\r\n");
    }		
  }
	
}



void I2C1_ER_IRQHandler(void) {
		
  __IO uint32_t SR1Register =0;
  __IO uint32_t SR2Register =0;
  SR1Register = I2C1->SR1;
  SR2Register = I2C1->SR2;
	
	printf("I2C1_ER_IRQHandler\r\n");

	if(I2C_GetITStatus(I2C1,        I2C_IT_SMBALERT)) {
		printf("I2C_IT_SMBALERT\r\n");
		I2C_ClearITPendingBit(I2C1, I2C_IT_SMBALERT);
	}
	else if(I2C_GetITStatus(I2C1, I2C_IT_TIMEOUT)) {
		printf("I2C_IT_TIMEOUT\r\n");
		I2C_ClearITPendingBit(I2C1, I2C_IT_TIMEOUT);
	} 
	else if(I2C_GetITStatus(I2C1, I2C_IT_PECERR)) {
		printf("I2C_IT_PECERR\r\n");
		I2C_ClearITPendingBit(I2C1, I2C_IT_PECERR);
	} 
	else if(I2C_GetITStatus(I2C1, I2C_IT_OVR)) {
		printf("I2C_IT_OVR\r\n");
		I2C_ClearITPendingBit(I2C1, I2C_IT_OVR);
	}
	else if(I2C_GetITStatus(I2C1, I2C_IT_AF)) {
		printf("I2C_IT_AF\r\n");
		I2C_ClearITPendingBit(I2C1, I2C_IT_AF);
	}
	else if(I2C_GetITStatus(I2C1, I2C_IT_ARLO)) {
		printf("I2C_IT_ARLO\r\n");
		I2C_ClearITPendingBit(I2C1, I2C_IT_ARLO);
	}
	else if(I2C_GetITStatus(I2C1, I2C_IT_BERR)) {
		printf("I2C1_IT_BERR\r\n");
		I2C_ClearITPendingBit(I2C1, I2C_IT_BERR);
	}
		I2C1->CR1 |= 0x0001;
		SR1Register = 0;
		SR2Register = 0;	
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/190259.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

BSN-DDC基础网络详解(一):基础介绍

BSN-DDC基础网络推出已经一年了,得到了行业应用方和广大开发者的高度认可。一年中BSN产品技术团队也在根据市场业务需求不断更新功能服务,我们将通过本系列文章为大家系统化介绍DDC网络的功能和使用,为感兴趣的朋友提供学习帮助。BSN-DDC基础…

历史与今日的事件

作者简介:一名在校云计算网络运维学生、每天分享网络运维的学习经验、和学习笔记。 座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页​​​​​​ 目录 前言 1.2023年1月31日中国最新量子计算机“悟空”即将问世&#xff0c…

【34】C语言 | 动态内存管理

目录 1.为什么存在动态内存分配 2、动态内存函数的介绍 2.1 malloc和free 2.2 calloc 2.3 realloc 1.为什么存在动态内存分配 我们已经掌握的内存开辟方式有: int val 20; //在栈空间上开辟四个字节 char arr[n] {0}; //在栈空间上开辟10个节的连续空间 但是上述的开辟…

mPEG-SS-NHS甲氧基聚乙二醇-二硫键-琥珀酰亚胺酯

mPEG-SS-NHS甲氧基聚乙二醇-双硫键-活性酯 名称:甲氧基聚乙二醇-双硫键-琥珀酰亚胺酯 英文名称:mPEG-SS-NHS 存储条件:-20C,避光,避湿 用 途:仅供科研实验使用,不用于诊治 外观: 固体或粘性…

【c语言进阶】动态通讯录

🚀write in front🚀 📜所属专栏: c语言学习 🛰️博客主页:睿睿的博客主页 🛰️代码仓库:🎉VS2022_C语言仓库 🎡您的点赞、关注、收藏、评论,是对我…

彭博:预订量未及预期,索尼大幅削减PS VR2首季订单

在索尼VR新品:PS VR2正式发货前夕,彭博社爆料称:因预订量不及预期,索尼已经大幅削减PS VR2首季订单量。消息人士称,索尼PS VR2发布后首个季度的订单目标是200万台,现已根据预订量减半,至约100万…

iOS 视频播放器开发

需求设计 做一个小学生教育辅导视频播放器。 参考小猿搜题视频播放器 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-L0GsyFSt-1675164972791)(https://tva1.sinaimg.cn/large/008vxvgGgy1h9xk4fm5xfj31sx0u0mz0.jpg)] [外链图片转存失败,源站可…

Java中的JCA对基于密码的加密进行成功的蛮力搜索攻击所需的时间估计

对于JCA中基于密码的DES加密实现,固定一些盐和迭代计数,并记录加密/解密所需的平均时间;估计成功进行蛮力搜索攻击所需的时间Name: NIHAO DONG Number: 201476606 Password List:N Password 1 P$$W0rD 2 thisismypassword 3 VeryLongP$$W0rD fi…

[0CTF 2016]piapiapia(字符逃逸详解)

目录 知识点 信息收集 尝试SQL注入 源码目录扫描 代码审计 payload生成 知识点 信息泄露参数传递数组绕过字符串检测反序列化字符逃逸 信息收集 收集到了一只超可爱的小喵 尝试SQL注入 用户名不存在的回显 密码无效的回显 用户存在,密码错误的回显 判断闭…

STC15系列PWM功能相关功能寄存器介绍

STC15系列PWM功能相关功能寄存器介绍✨以下数据来源于stc15手册。 📓增强型PWM波形发生器相关功能寄存器总表 1. 端口配置寄存器:P_SW2 2.PWM配青寄存器:PWMICFG CBTADC: PWM计数器归零时 (CBIF1时) 触发ADC转换 – 0:PWM计数器归零时不触发ADC转换 – …

Web3中文|亚马逊进入web3,将在春季推出NFT计划

亚马逊正向加密行业迈出第一步。 根据Blockworks 1月26日发布的报告,这家电子商务巨头计划在2023年春天推出一项专注于区块链游戏和相关NFT的计划。 该计划仍处于开发阶段,但发布的最后期限定为4月。亚马逊用户将可以体验基于区块链的游戏并领取免费的…

Python采集某乎专栏文章保存成pdf

前言 大家早好、午好、晚好吖 ❤ ~ 环境使用: Python 3.8 Pycharm wkhtmltopdf 软件 --> 文章下方名片信领取 模块使用: requests >>> pip install requests 数据请求 parsel >>> pip install parsel 数据解析 re >>> 内置模块 不需要安装…

域内委派攻击

域委派是指,将域内用户的权限委派给服务账号,使得服务账号能以用户权限开展域内活动。利用委派可获取域管理员权限 域委派主要分为三种: 非约束性委派 约束性委派 基于资源的约束性委派 在Windows系统中,只有服务账号和主机账号…

操作系统权限提升(五)之系统错误配置-PATH环境变量提权

系列文章 操作系统权限提升(一)之操作系统权限介绍 操作系统权限提升(二)之常见提权的环境介绍 操作系统权限提升(三)之Windows系统内核溢出漏洞提权 操作系统权限提升(四)之系统错误配置-Tusted Service Paths提权 注:阅读本编文章前,请先阅读系列文章…

寻找整数

问题描述 本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。 有一个不超过 10^{17}1017 的正整数 nn,知道这个数除以 2 至 49 后的余数如下表所示,求这个正整数最小是多少。 运行限制 最大运行时间:1s最大运行内存: 512M参考答案 mp = {2: 1, …

虹科动态 | 虹科HSR/PRP IP核现已支持HSR/PRP最新标准

HSR与PRP是专注于解决高可靠性自动化网络传输的技术,其所属的国际标准为IEC 62439。最初,IEC发布此项标准主要目的是为了满足IEC 61850-5中所提到的变电站自动化应用中各通信组件或服务故障所要求的恢复时间问题,但协议设计时的通用性&#x…

PTA L1-017 到底有多二

前言:本期是关于到底有多二的详解,内容包括四大模块:题目,代码实现,大致思路,代码解读,今天你c了吗? 题目: 一个整数“犯二的程度”定义为该数字中包含2的个数与其位数…

Java多线程:Future和FutureTask

一、Future Future是一个接口&#xff0c;所有方法如下&#xff1a; 上源码&#xff1a; package java.util.concurrent; public interface Future<V> {boolean cancel(boolean mayInterruptIfRunning);boolean isCancelled();boolean isDone();V get() throws Interru…

5.3 场效应管的高频等效模型

由于场效应管各级之间存在极间电容&#xff0c;因而其高频响应与晶体管相似。根据场效应管的结构&#xff0c;可得出图5.3.1(a)所示的高频等效模型&#xff0c;大多数场效应管的参数如表1所示。由于一般情况下 rgsr_{gs}rgs​ 和 rdsr_{ds}rds​ 比外接电阻大得多&#xff0c;因…

Lesson 4.5 梯度下降优化基础:数据归一化与学习率调度

文章目录一、数据归一化方法1. 数据归一化计算公式1.1 0-1 标准化1.2 Z-Score 标准化1.3 非线性标准化2. 数据归一化算法执行过程3. 数据归一化算法评价4. Z-Score 标准化算法评价及横向对比二、梯度下降算法优化初阶1. 数据归一化与梯度下降算法优化2. 学习率调度3. 小批量梯度…