2017-05-31 529 views
0

以下是$ipmitool -sensor的輸出,它們顯示了所有DIMM信息。但是FreeIPMI只有插件的DIMM信息。我如何通過在C中使用FreeIPMI API來獲取所有內存DIMM信息?使用FreeIPMI API從IPMI獲取所有DIMM信息

$ sudo ipmitool sensor 
CPU Temp   | 59.000  | degrees C | ok | 0.000  | 0.000  | 0.000  | 99.000 | 104.000 | 104.000 
System Temp  | 35.000  | degrees C | ok | -10.000 | -5.000 | 0.000  | 80.000 | 85.000 | 90.000  
Peripheral Temp | 49.000  | degrees C | ok | -10.000 | -5.000 | 0.000  | 80.000 | 85.000 | 90.000  
DIMMA1 Temp  | na   |   | na | na  | na  | na  | na  | na  | na   
DIMMA2 Temp  | na   |   | na | na  | na  | na  | na  | na  | na   
DIMMB1 Temp  | 36.000  | degrees C | ok | -5.000 | 0.000  | 5.000  | 80.000 | 85.000 | 90.000  
DIMMB2 Temp  | na   |   | na | na  | na  | na  | na  | na  | na   
FAN1    | 3800.000 | RPM  | ok | 300.000 | 500.000 | 700.000 | 25300.000 | 25400.000 | 25500.000 
FAN2    | 4100.000 | RPM  | ok | 300.000 | 500.000 | 700.000 | 25300.000 | 25400.000 | 25500.000 
FAN3    | 4100.000 | RPM  | ok | 300.000 | 500.000 | 700.000 | 25300.000 | 25400.000 | 25500.000 
FANA    | 4400.000 | RPM  | ok | 300.000 | 500.000 | 700.000 | 25300.000 | 25400.000 | 25500.000 
12V    | 12.000  | Volts  | ok | 10.173 | 10.299 | 10.740 | 12.945 | 13.260 | 13.386  
5VCC    | 4.922  | Volts  | ok | 4.246  | 4.298  | 4.480  | 5.390  | 5.546  | 5.598  
3.3VCC   | 3.248  | Volts  | ok | 2.789  | 2.823  | 2.959  | 3.554  | 3.656  | 3.690  
VBAT    | 3.047  | Volts  | ok | 2.375  | 2.487  | 2.599  | 3.775  | 3.887  | 3.999  
Vcpu    | 1.809  | Volts  | ok | 1.242  | 1.260  | 1.395  | 1.899  | 2.088  | 2.106  
VDIMMAB   | 1.191  | Volts  | ok | 0.948  | 0.975  | 1.047  | 1.344  | 1.425  | 1.443  
VDIMMCD   | 1.209  | Volts  | ok | 0.948  | 0.975  | 1.047  | 1.344  | 1.425  | 1.443  
5VSB    | 4.974  | Volts  | ok | 4.246  | 4.298  | 4.480  | 5.390  | 5.546  | 5.598  
3.3VSB   | 3.197  | Volts  | ok | 2.789  | 2.823  | 2.959  | 3.554  | 3.656  | 3.690  
1.5V PCH   | 1.509  | Volts  | ok | 1.320  | 1.347  | 1.401  | 1.644  | 1.671  | 1.698  
1.2V BMC   | 1.218  | Volts  | ok | 1.020  | 1.047  | 1.092  | 1.344  | 1.371  | 1.398  
1.05V PCH  | 1.041  | Volts  | ok | 0.870  | 0.897  | 0.942  | 1.194  | 1.221  | 1.248  
Chassis Intru | 0x0  | discrete | 0x0000| na  | na  | na  | na  | na  | na  

關於內存信息,我知道DIMMA1,A2和B2不是插件,DIMMB1在溫度爲36.0度。

這裏是從FreeIPMI的ipmimonitoring-sensors輸出:

Record ID, Sensor Name, Sensor Number, Sensor Type, Sensor State, Sensor Reading, Sensor Units, Sensor Event/Reading Type Code, Sensor Event Bitmask, Sensor Event String 
4, Processor 1 CPU Temp, 1, Temperature, Nominal, 60.00, C, 1h, C0h, 'OK' 
71, System Board 1 System Temp, 11, Temperature, Nominal, 36.00, C, 1h, C0h, 'OK' 
138, System Board 2 Peripheral Temp, 14, Temperature, Nominal, 50.00, C, 1h, C0h, 'OK' 
339, Memory Device 68 DIMMB1 Temp, 180, Temperature, Nominal, 37.00, C, 1h, C0h, 'OK' 
473, Fan 1 FAN1, 65, Fan, Nominal, 3800.00, RPM, 1h, C0h, 'OK' 
540, Fan 2 FAN2, 66, Fan, Nominal, 4100.00, RPM, 1h, C0h, 'OK' 
607, Fan 3 FAN3, 67, Fan, Nominal, 4000.00, RPM, 1h, C0h, 'OK' 
674, Fan 5 FANA, 69, Fan, Nominal, 4300.00, RPM, 1h, C0h, 'OK' 
741, System Board 17 12V, 48, Voltage, Nominal, 12.00, V, 1h, C0h, 'OK' 
808, System Board 33 5VCC, 49, Voltage, Nominal, 4.92, V, 1h, C0h, 'OK' 
875, System Board 32 3.3VCC, 50, Voltage, Nominal, 3.25, V, 1h, C0h, 'OK' 
942, System Board 18 VBAT, 51, Voltage, Nominal, 3.05, V, 1h, C0h, 'OK' 
1009, Processor 2 Vcpu, 52, Voltage, Nominal, 1.81, V, 1h, C0h, 'OK' 
1076, Memory Device 1 VDIMMAB, 53, Voltage, Nominal, 1.19, V, 1h, C0h, 'OK' 
1143, Memory Device 2 VDIMMCD, 55, Voltage, Nominal, 1.21, V, 1h, C0h, 'OK' 
1210, System Board 15 5VSB, 56, Voltage, Nominal, 4.97, V, 1h, C0h, 'OK' 
1277, System Board 16 3.3VSB, 57, Voltage, Nominal, 3.20, V, 1h, C0h, 'OK' 
1344, System Board 19 1.5V PCH, 60, Voltage, Nominal, 1.51, V, 1h, C0h, 'OK' 
1411, System Board 20 1.2V BMC, 61, Voltage, Nominal, 1.22, V, 1h, C0h, 'OK' 
1478, System Board 21 1.05V PCH, 62, Voltage, Nominal, 1.04, V, 1h, C0h, 'OK' 
1545, System Chassis Chassis Intru, 170, Physical Security, Nominal, N/A, N/A, 6Fh, 0h, 'OK' 

但是,沒有信息的DIMMA1,A2和B2,因爲他們沒有插件。所以我跟蹤的IMPI監控 - sensor.c

if ((sensor_count = ipmi_monitoring_sensor_readings_by_record_id (ctx, 
                    hostname, 
                    ipmi_config, 
                    sensor_reading_flags, 
                    NULL, /* record_ids */ 
                    0, /* record_ids_length */ 
                    NULL, 
                    NULL)) < 0) 

和配置

static void 
_init_ipmi_config (struct ipmi_monitoring_ipmi_config *ipmi_config) 
{ 
    assert (ipmi_config); 

    ipmi_config->driver_type = driver_type; 
    ipmi_config->disable_auto_probe = disable_auto_probe; 
    ipmi_config->driver_address = driver_address; 
    ipmi_config->register_spacing = register_spacing; 
    ipmi_config->driver_device = driver_device; 

    ipmi_config->protocol_version = protocol_version; 
    ipmi_config->username = username; 
    ipmi_config->password = password; 
    ipmi_config->k_g = k_g; 
    ipmi_config->k_g_len = k_g_len; 
    ipmi_config->privilege_level = privilege_level; 
    ipmi_config->authentication_type = authentication_type; 
    ipmi_config->cipher_suite_id = cipher_suite_id; 
    ipmi_config->session_timeout_len = session_timeout; 
    ipmi_config->retransmission_timeout_len = retransmission_timeout; 

    ipmi_config->workaround_flags = workaround_flags; 
} 

我可以假設,主板擁有4條DIMM插槽的代碼,如果他們沒有在FreeIPMI傳感器發現輸出,我可以猜測他們不是插件。但是,如何通過IPMI命令知道主板上的所有DIMM插槽?

+0

什麼是主板? IPMI在哪裏實施?我在消費型DIMM模塊上看不到標準溫度傳感器,型號和時序只有內存和小型SPD EEPROM芯片,如何獲得內存溫度?如果「DIMM溫度」不是來自DIMM模塊,或者只有一些模塊帶有溫度傳感器?溫度不應用於檢測DIMM插槽中的模塊。可能IPMI不適用於DIMM檢測(並且DMI是 - 使用ssh在目標linux上使用dmidecode命令)。 – osgx

+0

根據我的理解,有由IPMI sdr命令讀取的SDR記錄,將逐個獲取鏈接列表,其中包含每個記錄的值和名稱。 '製造商:Supermicro產品名稱:X10SDV-8C-TLN4F +'從'sudo dmidecode -t 2'獲得。 –

+0

什麼'dmidecode'說你的dimms,他們的數量和名稱(型號)? – osgx

回答

0

FreeIPMI維護者在這裏。一般來說,如果FreeIPMI中的大多數工具「不可用」,它們將不會輸出有關傳感器的信息。 (在內部,映射到我不會詳述的各種事情)。看起來ipmitool默認輸出一些傳感器信息,不管可用性如何。

每個關於使用IPMI命令的問題。使用FreeIPMI的ipmi-sensors,您可以使用-v(或可能是-vv)查看剩餘的DIMM。

根據關於A​​PI的標題問題,在libipmimonitoring API中,密鑰標記是IPMI_MONITORING_SENSOR_READING_FLAGS_IGNORE_NON_INTERPRETABLE_SENSORS。在示例代碼中查找,您可能會看到該做什麼。

+0

我在'/ freeipmi-1.5.5/contrib/libipmimonitoring'中編譯了'ipmimonitoring-sensors.c',並使用了你提到的'-v'或'--v'參數,但它仍然不起作用。沒有關於非插件DIMM的信息。順便說一句,現在我們不需要DIMM的溫度,我們只想知道DIMM類型和插槽信息。所以我追蹤了'dmidecode'的源代碼來獲取它。請參閱[使用C在Linux中從現有文件獲取硬件信息](https://stackoverflow.com/a/44483790/3309645)。 –

+0

-v選項用於ipmi-sensors工具,而不是libipmimonitoring示例。 –