phodevi: Few fixes

This commit is contained in:
Michael Larabel
2024-01-06 19:18:15 -06:00
parent 770b08a804
commit 2c13ab476a
5 changed files with 118 additions and 39 deletions

View File

@@ -1323,6 +1323,24 @@ class phodevi_cpu extends phodevi_device_interface
174 => 'Zen 4',
175 => 'Zen 4',
),
26 => array(
0 => 'Zen 5',
1 => 'Zen 5',
2 => 'Zen 5',
3 => 'Zen 5',
4 => 'Zen 5',
5 => 'Zen 5',
6 => 'Zen 5',
7 => 'Zen 5',
8 => 'Zen 5',
9 => 'Zen 5',
10 => 'Zen 5',
11 => 'Zen 5',
12 => 'Zen 5',
13 => 'Zen 5',
14 => 'Zen 5',
15 => 'Zen 5',
),
);
$intel_map = array(

View File

@@ -289,6 +289,11 @@ class phodevi_disk extends phodevi_device_interface
}
*/
if($disk_size == 0)
{
continue;
}
$disk_size = round($disk_size * 512 / 1000000000) . 'GB';
$disk_model = self::prepend_disk_vendor($disk_model);
@@ -297,10 +302,7 @@ class phodevi_disk extends phodevi_device_interface
$disk_model = $disk_size . ' ' . $disk_model;
}
if($disk_size > 0)
{
array_push($disks, $disk_model);
}
array_push($disks, $disk_model);
}
}
}

View File

@@ -3,8 +3,8 @@
/*
Phoronix Test Suite
URLs: http://www.phoronix.com, http://www.phoronix-test-suite.com/
Copyright (C) 2008 - 2021, Phoronix Media
Copyright (C) 2008 - 2021, Michael Larabel
Copyright (C) 2008 - 2024, Phoronix Media
Copyright (C) 2008 - 2024, Michael Larabel
phodevi_memory.php: The PTS Device Interface object for system memory
This program is free software; you can redistribute it and/or modify
@@ -34,11 +34,11 @@ class phodevi_memory extends phodevi_device_interface
{
$mem_string = null;
$mem_prefix = null;
$mem_size = false;
$mem_speed = false;
$mem_type = false;
$mem_manufacturer = false;
$mem_part = false;
$mem_size = array();
$mem_speed = array();
$mem_type = array();
$mem_manufacturer = array();
$mem_part = array();
if(phodevi::is_macos())
{
@@ -75,36 +75,78 @@ class phodevi_memory extends phodevi_device_interface
}
else if(phodevi::is_linux())
{
$mem_size = phodevi_linux_parser::read_dmidecode('memory', 'Memory Device', 'Size', false, array('Not Installed', 'No Module Installed', 'Undefined', 'Not Specified'));
$mem_speed = phodevi_linux_parser::read_dmidecode('memory', 'Memory Device', 'Configured Clock Speed', true, array('Unknown', 'Undefined', 'Not Specified'));
if($mem_speed == false)
if((phodevi::is_root() || is_readable('/dev/mem')) && pts_client::executable_in_path('dmidecode'))
{
$mem_speed = phodevi_linux_parser::read_dmidecode('memory', 'Memory Device', 'Configured Memory Speed', true, array('Unknown', 'Undefined', 'Not Specified'));
}
$mem_size = phodevi_linux_parser::read_dmidecode('memory', 'Memory Device', 'Size', false, array('Not Installed', 'No Module Installed', 'Undefined', 'Not Specified'));
$mem_speed = phodevi_linux_parser::read_dmidecode('memory', 'Memory Device', 'Configured Clock Speed', true, array('Unknown', 'Undefined', 'Not Specified'));
if($mem_speed == false)
{
// "Speed" only reports stock frequency where "Configured Clock Speed" should report the over/underclocked memory
$mem_speed = phodevi_linux_parser::read_dmidecode('memory', 'Memory Device', 'Speed', true, array('Unknown', 'Undefined', 'Not Specified'));
if($mem_speed == false)
{
$mem_speed = phodevi_linux_parser::read_dmidecode('memory', 'Memory Device', 'Configured Memory Speed', true, array('Unknown', 'Undefined', 'Not Specified'));
}
if($mem_speed == false)
{
// "Speed" only reports stock frequency where "Configured Clock Speed" should report the over/underclocked memory
$mem_speed = phodevi_linux_parser::read_dmidecode('memory', 'Memory Device', 'Speed', true, array('Unknown', 'Undefined', 'Not Specified'));
}
$mem_type = phodevi_linux_parser::read_dmidecode('memory', 'Memory Device', 'Type', true, array('Unknown', 'Other', 'Flash', 'Undefined', 'Not Specified'));
$mem_manufacturer = phodevi_linux_parser::read_dmidecode('memory', 'Memory Device', 'Manufacturer', true, array('Unknown', 'Undefined', 'Not Specified'));
$mem_part = phodevi_linux_parser::read_dmidecode('memory', 'Memory Device', 'Part Number', true, array('Unknown', 'Undefined', 'Not Specified'));
}
else if(pts_client::executable_in_path('udevadm'))
{
$memory_device_data = phodevi_linux_parser::read_udevadm_info(array('MEMORY_DEVICE', 'MEMORY_ARRAY'));
if(isset($memory_device_data['MEMORY_ARRAY_NUM_DEVICES']) && is_numeric($memory_device_data['MEMORY_ARRAY_NUM_DEVICES']) && $memory_device_data['MEMORY_ARRAY_NUM_DEVICES'] > 0)
{
for($i = 0; $i < $memory_device_data['MEMORY_ARRAY_NUM_DEVICES']; $i++)
{
if(isset($memory_device_data['MEMORY_DEVICE_' . $i . '_SIZE']) && is_numeric($memory_device_data['MEMORY_DEVICE_' . $i . '_SIZE']) && $memory_device_data['MEMORY_DEVICE_' . $i . '_SIZE'] > 1073741824)
{
$mem_size[] = round($memory_device_data['MEMORY_DEVICE_' . $i . '_SIZE'] / 1073741824); // byte to GB
}
if(isset($memory_device_data['MEMORY_DEVICE_' . $i . '_SPEED_MTS']) && is_numeric($memory_device_data['MEMORY_DEVICE_' . $i . '_SPEED_MTS']) && $memory_device_data['MEMORY_DEVICE_' . $i . '_SPEED_MTS'] > 1000)
{
$mem_speed[] = $memory_device_data['MEMORY_DEVICE_' . $i . '_SPEED_MTS'] . 'MT/s';
}
if(isset($memory_device_data['MEMORY_DEVICE_' . $i . '_MEMORY_TYPE']))
{
$mem_type[] = $memory_device_data['MEMORY_DEVICE_' . $i . '_MEMORY_TYPE'];
}
else if(isset($memory_device_data['MEMORY_DEVICE_' . $i . '_MEMORY_TECHNOLOGY']))
{
$mem_type[] = $memory_device_data['MEMORY_DEVICE_' . $i . '_MEMORY_TECHNOLOGY'];
}
if(isset($memory_device_data['MEMORY_DEVICE_' . $i . '_MANUFACTURER']))
{
$mem_manufacturer[] = $memory_device_data['MEMORY_DEVICE_' . $i . '_MANUFACTURER'];
}
if(isset($memory_device_data['MEMORY_DEVICE_' . $i . '_PART_NUMBER']))
{
$mem_part[] = $memory_device_data['MEMORY_DEVICE_' . $i . '_PART_NUMBER'];
}
}
}
}
$mem_type = phodevi_linux_parser::read_dmidecode('memory', 'Memory Device', 'Type', true, array('Unknown', 'Other', 'Flash', 'Undefined', 'Not Specified'));
$mem_manufacturer = phodevi_linux_parser::read_dmidecode('memory', 'Memory Device', 'Manufacturer', true, array('Unknown', 'Undefined', 'Not Specified'));
$mem_part = phodevi_linux_parser::read_dmidecode('memory', 'Memory Device', 'Part Number', true, array('Unknown', 'Undefined', 'Not Specified'));
}
if(is_array($mem_type))
if(is_array($mem_type) && !empty($mem_type))
{
$mem_type = array_pop($mem_type);
}
if(is_array($mem_part))
if(is_array($mem_part)&& !empty($mem_part))
{
$mem_part = array_pop($mem_part);
}
if(is_array($mem_manufacturer))
if(is_array($mem_manufacturer) && !empty($mem_manufacturer))
{
$mem_manufacturer = array_pop($mem_manufacturer);
}
if(is_array($mem_speed) && !empty($mem_speed))
{
$mem_speed = array_pop($mem_speed);
}
if($mem_size != false && (!is_array($mem_size) || count($mem_size) != 0))
{
@@ -197,18 +239,18 @@ class phodevi_memory extends phodevi_device_interface
if(is_numeric($mem_size[0]))
{
if($mem_size[0] < 1024)
{
$mem_size[0] *= 1024;
}
$mem_count = phodevi::read_property('memory', 'capacity') / $mem_size[0];
$mem_mb = $mem_size[0] < 1024 ? $mem_size[0] * 1024 : $mem_size[0];
$mem_count = ceil(phodevi::read_property('memory', 'capacity') / $mem_mb);
}
}
$product_string = null;
if(isset($mem_manufacturer[2]) && pts_strings::is_alpha($mem_manufacturer[0]) && stripos($mem_manufacturer, 'manufacturer') === false && stripos($mem_manufacturer, 'part') === false && stripos($mem_manufacturer, 'module') === false && stripos($mem_manufacturer, 'dimm') === false && isset($mem_manufacturer[2]) && pts_strings::is_alpha($mem_manufacturer))
if(!empty($mem_manufacturer))
{
$mem_manufacturer = str_ireplace(' Technology', '', $mem_manufacturer);
}
if(isset($mem_manufacturer[2]) && pts_strings::is_alpha($mem_manufacturer[0]) && stripos($mem_manufacturer, 'manufacturer') === false && stripos($mem_manufacturer, 'part') === false && stripos($mem_manufacturer, 'module') === false && stripos($mem_manufacturer, 'dimm') === false && pts_strings::is_alpha($mem_manufacturer))
{
$product_string .= ' ' . $mem_manufacturer;
}
@@ -218,14 +260,14 @@ class phodevi_memory extends phodevi_device_interface
// Cleanup/shorten strings like KHX2133C13S4/4G
$mem_part = substr($mem_part, 0, $x);
}
if(isset($mem_part[2]) && stripos($mem_part, 'part') === false && stripos($mem_part, 'module') === false && stripos($mem_part, 'dimm') === false && substr($mem_part, 0, 2) != '0x' && !isset($mem_part[24]) && pts_strings::is_alnum(str_replace(array('-'), '', $mem_part)))
if(isset($mem_part[2]) && stripos($mem_part, 'part') === false && stripos($mem_part, 'module') === false && stripos($mem_part, 'dimm') === false && substr($mem_part, 0, 2) != '0x' && !isset($mem_part[24]) && pts_strings::is_alnum(str_replace(array('-', ' '), '', $mem_part)))
{
$product_string .= ' ' . $mem_part;
}
if(is_numeric($mem_size[0]) && stripos($mem_size[0], 'b') === false)
{
if($mem_size >= 1024)
if($mem_size[0] >= 1024)
{
$mem_size[0] .= ' MB';
}

View File

@@ -524,7 +524,7 @@ class phodevi_motherboard extends phodevi_device_interface
if((phodevi::is_root() || is_readable('/dev/mem')) && pts_client::executable_in_path('dmidecode'))
{
// For some vendors, it's better to read system-product-name
// Unfortunately other vendors report garbage here, also demidecode only works as root on Linux
// Unfortunately other vendors report garbage here, also dmidecode only works as root on Linux
foreach(array('Dell', 'Apple') as $vend)
{
if(stripos($info, $vend . ' ') !== false)

View File

@@ -3,8 +3,8 @@
/*
Phoronix Test Suite
URLs: http://www.phoronix.com, http://www.phoronix-test-suite.com/
Copyright (C) 2008 - 2020, Phoronix Media
Copyright (C) 2008 - 2020, Michael Larabel
Copyright (C) 2008 - 2024, Phoronix Media
Copyright (C) 2008 - 2024, Michael Larabel
phodevi_linux_parser.php: General parsing functions specific to Linux
This program is free software; you can redistribute it and/or modify
@@ -181,6 +181,23 @@ class phodevi_linux_parser
return $sysfs_file_cache[$arg_hash] == false ? -1 : pts_file_io::file_get_contents($sysfs_file_cache[$arg_hash]);
}
public static function read_udevadm_info($data_r)
{
$device_data = array();
if(pts_client::executable_in_path('udevadm'))
{
foreach(explode(PHP_EOL, shell_exec('udevadm info -e 2>/dev/null | grep -e ' . implode(' -e ', $data_r))) as $line)
{
$line = explode('=', str_replace(array('E: ', '<OUT OF SPEC>', '00000000', 'Not Specified', 'Unknown', 'None'), '', $line));
if(count($line) == 2 && !empty($line[0]) && !empty($line[1]))
{
$device_data[$line[0]] = $line[1];
}
}
}
return $device_data;
}
public static function read_dmidecode($type, $sub_type, $object, $find_once = false, $ignore = null)
{
// Read Linux dmidecode