BMC / IPMI

Loading

IPMI (Intelligent Platform Management Interface) 智慧平台管理介面

IPMI 包含了一個 BMC (Baseboard Management Controller) 為主的控制器透過不同的介面去與其他分布在不同模組的管理控制器之間做溝通,,它定義了如何監控硬體和感測器,控制系統部件以及記錄重大事件,隨著 ipmi 在伺服器中的應用,他眾多的優勢就讓他成為集群伺服器管理中不可缺少的部分.

在 Linux 系統下可以利用 ipmitool 來實現對伺服器的 ipmi 管理.

關於 IPMI 我們常會聽到的 I²C ,smbus ,ipmi ,BMC , IPMB , 這幾個名詞.先來看一張圖之後再來一一說明.
ipmi_block01
圖片出自於 Intel 文件 http://www.intel.com.tw/

ipmi , BMC , RMCP
IPMI (Intelligent Platform Management Interface) 是一種可擴展的標準技術協定, 它定義了如何監控硬體和感測器,控制系統部件以及記錄重大事件, 而 BMC (Baseboard Management Controller) 控制器是 IPMI 的子系統,他主要負責與其他周邊控制器之間的模塊之間分配與管理.

從上圖可以看到 IPMI 可以透過 Serial Port , I²C 或是 IPMB,SMBus (加強版的 I²C) 匯流排 來與 BMC 溝通.

IPMItool 的官方網站 http://ipmitool.sourceforge.net/

如果要透過遠端管理控制 IPMI 這時候需要使用到 RMCP (Remote Management Control Protocol)) 協定.

System Interface
BMC 下方有 System Interface ,哪一些 Interface 叫做 System Interface ,通常是位於主機板上面可以溝通的監控硬體或感測器如

  1. KCS (目前最普遍的介面)
  2. SMIC
  3. BT
  4. SSIF (使用 SMBUS 協定,透過 I²C 的線路)
    不管是 I²C bus (Inter-Integrated Circuit,讀法為 "I-squared-C")還是 SMBus(System Management Bus) , IPMB (Intelligent Platform Management Bus) 他們是一種慢速 serial bus 的協定,主要透過兩條線路的匯流排 (串列資料(SDA)及串列時脈(SCL)) 與電腦上的控制晶片(MC : Micro Controller)做溝通.以上圖得例子來說 MC 就是 BMC 了.

    最早推出的是由飛利浦公司主導的 I²C 主要也是為了連接低速週邊裝置. 而 SMBus 是由 Intel 參考了 I²C 主要是為了系統上較慢速的裝置與電源管理裝置之間的溝通. 透過這套系統可以獲得這些裝置的設備資訊如型號或是狀態等資訊. 通常而言會將SMBus 視為 I²C 的子集,也因此 I²C / smbus 在某個程度上是相容的.目前 Linux 核心同時支援 I²C / smbus,在核心編譯的 Device Drivers 就可以找到   I²C / smbus .

    其他與 I²C 相關的設計

    • SPI (Serial Peripheral Interface Bus) – 一樣類似 I²C 的設計,不過它不像是 I²C 所做的 2線式設計, SPI 擁有 4線的同步序列資料協定.
    • I2C MUX- 有時候會看到 I2C MUX (Multiplexer : 多工器),會有多個 I2C device 掛載在這裡,但為什麼要這個我不是很清楚
    • GPIO – 有時會聽過可以透過2支 GPIO (General Purpose I/O) 腳來模擬 I²C ,主要是該裝置沒有 I²C 所以利用本身裝置的 GPIO +透過軟體的方式來模擬成 I²C

IPMB
非主板上的裝置是透過 IPMB (基於 IPMI 所發展出來的管理匯流排,也是以 I²C 為基礎所開發出來的) 與週邊裝置或是 ICMB Bridge 來溝通.

PSMI,PMbus
PSMI(Power Supply Management Interface) 則是透過 SMBus 回報電源供應器實際使用負載狀況.
PMbus (Power Management Bus) 就如同 SMBus ,只是 PMBus 應用在 Power supply 上面.他也是從 I²C 所衍生出來的.

ipmitool,LM_Sensor
而利用 ipmitool 可以實現 Linux 系統下對伺服器的 ipmi 管理.主要的監控管理方式還是透過 I²C / smbus ,不過不是每台電腦上都有配備 BMC 所以在沒有 BMC 時 Linux 底下還是可以透過另外一種方式 LM_Sensor 來針對 I²C / smbus 裝置來做較簡易的監控 https://benjr.tw/98312. 不過 BMC 是獨立於作業系統以外的一套機制,他不需要開啟作業系統才能做事.只要系統有電源時就可以針對他開始做監管的動作.

Channel
IPMI Channel 有分成為 Inband 與 Outband,主要的區分為:
Inband (In-Band)

  1. Console Redirection (就是透過 serial port 也就是一般所說的 comport,還可以透過另外一種 outband – serial over LAN 來傳送.)
  2. OS 透過 System Interface (KCS, SMIC, BT, SSIF) 對本機下 ipmi command (不需要使用者及其密碼).

Outband (Out-of-Band)

  1. BMC dedicate LAN
    • Ethernet (Web)
    • IOL (Ipmi over Lan)
    • SOL (Serial over LAN)
  2. IOS (Ipmi over serial(General serial port))

檢查你的系統是否有提供 IPMI

我們無法透過 #lspci 來查詢系統是不是有 BMC 的裝置,只能使用 #dmidecode 如果在 type 38 看到 IPMI DEVICE INFORMATION , 就表示系統有 BMC 存在.
除了硬體外還需要軟體的支援,這邊使用的是 RedHat Enterprise 4 系統預設就有安裝 ipmi,如果你的系統沒有安裝可以到官方網站 http://ipmitool.sourceforge.net/
來安裝 IPMItool.

[root@benjr ~]# rpm -aq | grep -i ipmi
OpenIPMI-libs-1.4.14-1.4E.12
OpenIPMI-tools-1.4.14-1.4E.12
OpenIPMI-devel-1.4.14-1.4E.12
OpenIPMI-1.4.14-1.4E.12

安裝 ipmi

基本上 ipmitool.sourceforge.net 提供了 .rpm 和 .tar 檔.可以依你的喜歡來安裝.

  • rpm 檔

    [root@benjr ~]# rpm ipmitool-<VER>.<PLATFORM>.rpm
    
  • tar 檔

    [root@benjr ~]# tar xzvf ipmitool-<VER>.tar.gz
    [root@benjr ~]# cd ipmitool-<VER>
    [root@benjr ~]# ./configure -enable-inft-open=static
    [root@benjr ~]# make
    [root@benjr ~]# make install
    
  • 我們還要創建字元設備,使 ipmitool 可以通過驅動程式連結至 ipmi 系統介面

    [root@benjr ~]# cat /proc/devices | grep ipmidev
    254 ipmidev
    [root@benjr ~]# mknod /dev/ipmi0 c 254 0
    

    Type: "c" 是 character device(unbuffered)
    MAJOR number是根據剛剛查到的254

檢查 ipmi 服務是否啟動

[root@benjr ~]# service ipmi status
ipmi_msghandler module loaded.
ipmi_si module loaded.
ipmi_devintf module loaded.
/dev/ipmi0 exists.

這樣子代表有正式啟動,如果沒有請鍵入下面指令.

[root@benjr ~]# service ipmi start
Starting ipmi drivers: [  OK  ]

如果要讓每次開機時都能啟動 ipmi,請鍵入下面指令.

[root@benjr ~]# chkconfig ipmi on

ipmi 所需模組

這邊我使用的是 RedHat Enterprise 4(kernel 2.6),可以看到和ipmi相關的模組,但如果使用的是 kernel 2.4 所需的模組又不同了.

[root@benjr ~]# lsmod
Module                  Size  Used by
ipmi_devintf           13129  0
ipmi_si                36585  0
ipmi_msghandler        31913  2 ipmi_devintf,ipmi_si

2.6-based kernel 的 ipmitool 需要下面這些模組才能正確運作. 

  • ipmi_msghandler
    Incoming and outgoing message handler for IPMI interfaces.
  • ipmi_si
    An IPMI system interface driver for the message handler. This module supports various IPMI system interfaces such as KCS, BT, SMIC, and even SMBus in 2.6 kernels.
  • ipmi_devintf
    Linux character device interface for the message handler.

2.4-based kernel 的 ipmitool 需要下面這些模組才能正確運作. 

  • ipmi_msghandler
    Incoming and outgoing message handler for IPMI interfaces.
  • ipmi_kcs_drv
    An IPMI Keyboard Controler Style (KCS) interface driver for the message handler.
  • ipmi_devintf
    Linux character device interface for the message handler.

其他選用的模組

  • ipmi_smb
    A driver for accessing BMCs on the SMBus. It uses the I2C kernel driver's SMBus interfaces to send and receive IPMI messages over the SMBus.
  • ipmi_watchdog
    IPMI requires systems to have a very capable watchdog timer.  This driver implements the standard Linux watchdog timer interface on top of the IPMI message handler.
  • ipmi_poweroff
    Some systems support the ability to be turned off via IPMI commands.

ipmi 的使用

直接使用 ipmitool 來查看有什麼可以作為查詢的,下面是一般 ipmitool 所提供的系統上相關資訊.

[root@benjr ~]# ipmitool
Commands:
        raw           Send a RAW IPMI request and print response
        i2c           Send an I2C Master Write-Read command and print response
        lan           Configure LAN Channels
        chassis       Get chassis status and set power state
        event         Send pre-defined events to MC
        mc            Management Controller status and global enables
        sdr           Print Sensor Data Repository entries and readings
        sensor        Print detailed sensor information
        fru           Print built-in FRU and scan SDR for FRU locators
        sel           Print System Event Log (SEL)
        pef           Configure Platform Event Filtering (PEF)
        sol           Configure IPMIv2.0 Serial-over-LAN
        isol          Configure IPMIv1.5 Serial-over-LAN
        user          Configure Management Controller users
        channel       Configure Management Controller channels
        session       Print session information
        sunoem        OEM Commands for Sun servers
        exec          Run list of commands from file
        set           Set runtime variable for shell and exec

我們可以使用 #ipmitool -l open sdr 直接看整個所有的 sensor 的資訊.sdr(Sensor Data Repository) 或是指令 #ipmitool sdr elist

[root@benjr ~]# ipmitool -I open sdr
SYS FAN 1        | 4850 RPM          | ok
SYS FAN 2        | 5000 RPM          | ok
SYS FAN 3        | 4500 RPM          | ok
SYS FAN 4        | 4350 RPM          | ok
SYS FAN 5        | 5150 RPM          | ok
SYS FAN 6        | 4750 RPM          | ok
STBY 5V          | 5.05 Volts        | ok
PS 1.8V          | 1.81 Volts        | ok
PS 1.2V          | 1.21 Volts        | ok
PS 5V            | 5.02 Volts        | ok
PS 12V           | 12.01 Volts       | ok
PS 3.3V          | 3.33 Volts        | ok
SCSI CARD TEMP   | 48 degrees C      | ok
CPU 1 TEMP       | 49 degrees C      | ok
CPU 2 TEMP       | disabled          | ns
PWR CONN TEMP    | 34 degrees C      | ok
MEM TEMP         | 42 degrees C      | ok
NB TEMP          | 50 degrees C      | ok
DIS SYS FAN 1    | 0 unspecified     | nc
DIS SYS FAN 2    | 0 unspecified     | nc
DIS SYS FAN 3    | 0 unspecified     | nc
DIS SYS FAN 4    | 0 unspecified     | nc
DIS SYS FAN 5    | 0 unspecified     | nc
DIS SYS FAN 6    | 0 unspecified     | nc
CPU 1 STATUS     | 0 unspecified     | ok
CPU 2 STATUS     | disabled          | ns
THERMAL TRIP     | 0 unspecified     | nc
ACPI PW STATE    | 0 unspecified     | ok
WATCHDOG2        | 0 unspecified     | ok
AC POWER ON      | 0 unspecified     | ok
PS 1 STATUS      | 0 unspecified     | cr
PS 2 STATUS      | 0 unspecified     | nc
PS REDUNDANCY    | 0 unspecified     | cr
UID BUTTON       | 0 unspecified     | nc
PEF ACTION       | 0 unspecified     | ok

這些都是比較粗略的資訊,如果你想要知道比較詳細的資料,可以用 #ipmitool sensor get 的指令來查詢更詳細的 sensor 資訊.

[root@benjr ~]# ipmitool sensor get "CPU 1 TEMP"
Locating sensor record…
Sensor ID              : CPU 1 TEMP (0×22)
 Entity ID             : 3.0
 Sensor Type (Analog)  : Temperature
 Sensor Reading        : 49 (+/- 0) degrees C
 Status                : ok
 Lower Non-Recoverable : na
 Lower Critical        : na
 Lower Non-Critical    : na
 Upper Non-Critical    : 80.000
 Upper Critical        : 90.000
 Upper Non-Recoverable : 100.000
 Assertion Events      :
 Assertions Enabled    : lnc- lcr- lnr- unc+ ucr+ unr+

這裡查詢了 "CPU 1 TEMP" 詳細資料,至於還有什麼可以查詢可以參考 #ipmitool -I open sdr 內的初略資料的參數來查出哪些 sensor 可供查詢.

PMBus 的資料也可以透過 ipmitool power 來查詢.

[root@benjr ~]# ipmitool power
chassis power Commands: status, on, off, cycle, reset, diag, soft

ipmitool 的應用:

參考文件 http://www.intel.com.tw/content/dam/www/public/us/en/documents/product-briefs/ipmi-second-gen-interface-spec-v2-rev1-1.pdf

沒有解決問題,試試搜尋本站其他內容

35 thoughts on “BMC / IPMI

  1. 想請問一下ICMB bridge是什麼? 是轉接的device嗎? 它是否有其他名稱,因為我都找不到相關hardware的圖片。

  2. 请问BMC的刷写工具socflash、Yafuflash和通过BMC Web UI和烧录器刷写服务器上BMC的firmware时,分别走的什么总线和协议啊?有知道的吗?麻烦告诉一下吧,万分感谢!

      1. Hi Pobo,

        那你知道更底層是如果做傳輸以及接收的嗎? 剛好要做相關的報告

  3. GPIO 的部分, 通常是透過晶片組那邊 “空出的” 來使用, 或是晶片組底下的 SuperI/O “空出的” 所使用,
    通常可以給 End User “正常使用” 的階段, 應該是進入到 OS 內後的 Run-Time 階段, 看 End-User 是否透過
    “上層應用程式去控管”, 欲控管前請先確認您的 HW 與 BIOS 端是否有使用到 (請他們據實以告) , 避免誤動作,
    有 PIN 在那邊, 不見得就是後端使用者看到就能拿來用的, 這是系統大忌 ; 嚴重造成您的板子當機或是某個周邊 Device 異常

    From: 以前的底層Engineer

  4. 透過IPMI讀取FRU 0x0800以後的資料,ipmitool會回說是非合法空間,想請教是否這是ipmitool的限制(invertory range也只有08 00)?若要讀取0x0800以上的空間要如何去做?

  5. 你好最近在安裝, RHEL 6.1要執行.以下兩個指令.啟動IPMI服務都會出現無IPMI Service的狀況.IPMI 的啟動是不是在RHEL 6.1改了
    之前在RHEL 5都是可以的.請問你有啟動過嗎

    #service ipmi start
    #chkconfig ipmi on

    1. IPMI 相關的套件是否已安裝.
      我在 RHEL 6.1 64 bit 下試過是沒有問題的,可能 IPMI 相關的套件沒有全部安裝完成.

      #service ipmi start
      starting ipmi drivers: [ OK]

      #rpm -aq |grep -i ipmi
      freeipmi-0.7.16-3.el6.x86_64
      ipmitool-1.8.11-7.el6.x86_64
      freeipmi-ipmidetectd-0.7.16-3.el6.x86_64
      OpenIPMI-2.0.16-12.el6.x86_64
      OpenIPMI-libs-2.0.16-12.el6.x86_64
      freeipmi-bmc-watchdog-0.7.16-3.el6.x86_64

      1. INBand Test
        你好,小弟做了DCMI_Conformance的測試。
        在執行INBand Test時,它顯示以下訊息:

        ABORT: Transport layer returned an error: 0×80000001
        Unable to establish connection to DCMI-Hi driver
        Check following and re-run the Test Suite
        -Verify Management Engine Interface driver
        -Verify DCMI driver

        ipmi的driver小弟經再確認都有確實安裝了,services也檢查過,
        請問還有哪裡需要修正,請指點!謝謝!

        1. Dear 匿名使用者:
          可能要先確定大大的板子有沒有支援DCMI,因為這是Intel額外要購買個feature,如果大大購買的廠牌server沒有買DCMI 的License的話,應該也不會有這個feature. 🙂

  6. IPMI side-band and out-of-band
    您好:

    可以請教您IPMI side-band and out-of-band 差別嘛?

    out-of-band and in-band 很好理解,一個是透過遠端管理,一個是本地管理
    可是side-band 就讓我很困惑,他為何不屬於out-of-band呢?
    是因為side-band也是本機的管理機制去管理嘛?!

    我從網路查到,好像out-of-band才提供畫面,side-band頻寬問題,所以只能有文字模式
    不知道是否真為如此?!

    謝謝您

    Chi

    1. 這是詢問我同事 Thomas 的答案.

      side-band
      共用的 NIC 但 Mac 不同的網路埠.

      out-of-band
      只要是透過 ipmi 的協定,不管是透過 serial 或是 network 都算是.

      in-band
      本地端管理用的

      1. Dear 匿名使用者:
        正常而言,只要是out-of-band 、並且BMC有VGA功能、BMC FW 有支援的話,都可以提供remote KVM的畫面,
        另外,out-of-band又分為 dedicated NIC port 以及shared NIC port。
        Dedicated NIC很好理解…也就是使用BMC專門的NIC port(一般是RJ-45 接頭並且頻寬是10/100M);
        Shared NIC…也就是您提到的side-band依舊是out-of-band,他們會經過共同的NIC port,但如果是BMC (IPMI message)的封包,則會在內部透過NC-SI的interface轉給BMC,而不會經過網卡上的NIC chipset。
        無論是dedicated/shared NIC,只要BMC FW有支援remote KVM,都會提供遠端畫面給user,但還是要注意頻寬問題,因為部份低階server的shared NIC 頻寬不大,可能只有SMBus的頻寬(而非RMII)。
        相關的interface 介紹…或許看看IPMI SPEC (記得是Ch.5 之前)會比較詳細….
        希望有幫到你….. 😀

    1. RMCP 是封裝格式
      感謝我同事提供的詳細資料
      RMCP 是 ipmi 在傳送 ipmi 指令或是訊息時所採用的封裝格式,不過 RMCP 用於 ipmi 1.5 ,目前常用的 ipmi 2.0 的封裝稱為 RMCP+ ,兩者最大的差別為加密方式.

  7. 請問IPMI與I2C以及PMBus的關係
    我想請問一下,我想透過主機板接收PMBus的訊息,應該是透過I2C的介面來傳送與接收,
    我應該要怎麼做呢?在BIOS上我是有看到BMC的設定,但我看的不是很懂,
    IPMI是否也是與PMBUS的做法相同?該怎麼做呢?

    1. 不好意思 PMBus 已經超出我平常在管理的東西的範圍了,詢問我同事大家都知道有這東西,但目前我們的設備似乎並不具備.
      如果只是要透過 ipmi 管理 Power supplies 可以透過下面的指令.
      # ipmitool power
      chassis power Commands: status, on, off, cycle, reset, diag, soft

    2. 透過 ipmitool 就可以讀取和設定 PMBus 的資料,不過使用上有些困難,首先 power supply 和主機板都要支援,我們還要查出 bus id…的資料才能正確設定與讀取到 PMBus 的資料.指令方式如下:
      # ipmitool raw NetFn CMD Bus_ID Slave_Address Read_count PMBus_Command_Code

    3. Dear 匿名使用者 :
      “IPMI是否也是與PMBUS的做法相同” ==> IPMI可以視為介於HW & SW之間的infrastructure….而不視為一個實體的interface,它的message是透過IPMB 去實現的唷~ 😀

  8. 我想請問一下IPMI以及I2C的操作方式??
    小弟看了大大提供的網站之後,大概了解到IPMI是屬於一種監視的韌體介面,
    小弟想請問,IPMI的輸入及輸出信號,是要透過主機板的哪個介面(或接頭)呢?
    再爬文的時候,我有看到用LAN以及Serial的方式,LAN的方式應該是指透過
    網路介面,那Serial的方式是透過哪種介面呢?
    我該如何才能從別的電腦上透過IPMI來監控這台電腦的狀況呢?

    1. IPMI 的介面可以分為 LAN 以及 Serial Port.

      LAN 又可以分為專門獨立出來的 RJ45 埠給 IPMI 來使用,還有一種是用 sideband 的方式與 Ethernet RJ45 共享一個埠.

      再來就是 serial port 也就是一般所說的 comport,他還可以透過另外一種方式 serial over LAN 來傳送.

      以上是我同事 Thomas 所提供的資料.

      1. 請問我要怎麼判斷哪種Connector是IPMI的輸入呢?
        主機板上零零總總的有很多Port我該怎麼判斷哪個connector是給IPMI用的呢?
        而我又該怎麼判斷他腳位的定義呢?

        1. Dear 匿名使用者:
          1. “IPMI的輸入及輸出信號,是要透過主機板的哪個介面(或接頭)呢” ==> IPMI在板端走IPMB,只要MLB上有I2C/PMBus/SMBus都可以適用於IPMB,但是電氣特性上,我記得IPMB的規範會比較嚴謹(可以參考Intel官網上的IPMB SPEC);
          2. “那Serial的方式是透過哪種介面呢” ==> 要看MLB設計,如果有提供debug port or RS232等界面,而且BMC FW也有走這些interface的話,理論上是可以支援的,但是現在因為LAN已經普及,所以大多是使用SOL去實現serial(記得板端會有一個chip模擬serial mode);
          3. “請問我要怎麼判斷哪種Connector是IPMI的輸入呢”、”而我又該怎麼判斷他腳位的定義呢”==>這…可能得麻煩您直接問layout 板子的HW RD跟寫BMC FW的RD了………. ^_^

  9. 請問IPMI是什麼呢??
    你好,拜讀了您的文章之後,對於IPMI還是懵懵懂懂的,不甚了解IPMI到底是什麼?
    感覺上IPMI是一種介面,但是在系統出問題的時候仍然可以使用的介面,這感覺又向
    是韌體,另外可以透過IPMI這個介面得知這台電腦的訊息,請問是透過哪種方式呢?
    I2C?可是我在主機板上卻又看到一個IPMB的接頭,這倒底又是什麼呢?跟IPMI有關嗎?
    煩請幫忙解答,感恩

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料