LinuxQuestions.org
Latest LQ Deal: Latest LQ Deals
Home Forums Tutorials Articles Register
Go Back   LinuxQuestions.org > Forums > Linux Forums > Linux - Distributions > Slackware
User Name
Password
Slackware This Forum is for the discussion of Slackware Linux.

Notices


Reply
  Search this Thread
Old 01-17-2024, 11:55 AM   #16
h2-1
Member
 
Registered: Mar 2018
Distribution: Debian Testing
Posts: 562

Original Poster
Rep: Reputation: 320Reputation: 320Reputation: 320Reputation: 320

rizitis, sorry, no, it was right to say 64 GiB is an estimate because this was a case of the dmi data for array being wrong, logically impossible, because it listed capacity at 32 GiB when the occupied total is 64 GiB. Most of the array values are I believe filled out manually by someone, and those types of errors come from bad copy pastes of the wrong data into the board dmi table.

One thing that puzzles me about how udevadm implemented this is how many values they left off their report, one assumes they get the whole dmi table at boot, then decide what to print of it, so in a sense, they are deciding not to print stuff like max module size.

It's hard to believe that while they are trying to maintain AI, first, is a real thing, and second, will take over the world, when such comically absurd and all too human errors are a constant in the stuff driving these systems. Maybe a case of putting the cart before the horse there I think.

Last edited by h2-1; 01-17-2024 at 11:56 AM.
 
Old 01-17-2024, 12:11 PM   #17
h2-1
Member
 
Registered: Mar 2018
Distribution: Debian Testing
Posts: 562

Original Poster
Rep: Reputation: 320Reputation: 320Reputation: 320Reputation: 320
One thing that strikes me re output, with the new Report: arrays: item, is that the array report should contain the type, like DDR4, and that doesn't need to be in the DEVICE item since it's going to always be the same, that is, ram module type is defined by the array, not the module. I don't believe different DDR types even fit into the same slots, so that never made any sense to list by DEVICE there, that should only be info specific to the module. This probably applies to voltage as well, unless you can clock different arrays differently, which might be a thing?

I'd never thought of this before since the type is listed in the module 17 dmi set, not the array 16 set from dmidecode, so I'd just not thought about it.

Is this wrong, can they be different in theory? I don't see how.

But type definitely can be moved to the ARRAY line to get rid of some redundancy.

I think I'll future proof the udevadm > 1 memory array handler to assume they number the arrays at some point in the future, so it will look for numbered or not numbered, not guaranteed to work since no idea how that will be presented, but as a guess, one would assume they would follow their slot output field name syntax.

Last edited by h2-1; 01-17-2024 at 12:35 PM.
 
Old 01-17-2024, 02:33 PM   #18
amikoyan
Member
 
Registered: Mar 2021
Distribution: Slackware64 -current
Posts: 318

Rep: Reputation: 171Reputation: 171
If more data is helpful, here is mine. It looks accurate to me:

Code:
bash-5.2$ pinxi -SIGmaz --vs
pinxi 3.3.31-50 (2024-01-17)
System:
  Kernel: 6.6.12 arch: x86_64 bits: 64 compiler: gcc v: 2.41-slack151
    clocksource: tsc avail: hpet,acpi_pm parameters: BOOT_IMAGE=slackware ro
    root=802
  Desktop: KDE Plasma v: 5.27.10 tk: Qt v: 5.15.12 wm: kwin_x11 vt: 1 tools:
    avail: xfce4-screensaver,xlock,xscreensaver lm: elogind
    Distro: Slackware 15.0
Memory:
  System RAM: total: 16 GiB available: 15.33 GiB used: 1.94 GiB (12.7%)
  Message: For most reliable report, use superuser + dmidecode.
  Array-1: capacity: 16 GiB slots: 2 modules: 2 EC: None
    max-module-size: 8 GiB note: est.
  Device-1: ChannelA-DIMM0 type: DDR3 detail: synchronous size: 8 GiB
    speed: 1600 MT/s volts: N/A width (bits): data: 64 total: 64
 manufacturer: Samsung part-no: M471B1G73EB0-YK0 serial: <filter>
  Device-2: ChannelB-DIMM0 type: DDR3 detail: synchronous size: 8 GiB
    speed: 1600 MT/s volts: N/A width (bits): data: 64 total: 64
    manufacturer: Samsung part-no: M471B1G73DB0-YK0 serial: <filter>
Graphics:
  Device-1: Intel 3rd Gen Core processor Graphics vendor: Lenovo driver: i915
    v: kernel arch: Gen-7 process: Intel 22nm built: 2012-13 ports:
    active: LVDS-1 empty: DP-1, DP-2, DP-3, HDMI-A-1, HDMI-A-2, HDMI-A-3,
    VGA-1 bus-ID: 00:02.0 chip-ID: 8086:0166 class-ID: 0300
  Device-2: Chicony Thinkpad T430 camera driver: uvcvideo type: USB rev: 2.0
    speed: 480 Mb/s lanes: 1 mode: 2.0 bus-ID: 2-1.6:5 chip-ID: 04f2:b2db
    class-ID: 0e02
  Display: server: X.Org v: 21.1.10 with: Xwayland v: 23.2.3
    compositor: kwin_x11 driver: X: loaded: modesetting unloaded: vesa
    alternate: fbdev dri: crocus gpu: i915 display-ID: :0 screens: 1
  Screen-1: 0 s-res: 1600x900 s-dpi: 96 s-size: 423x238mm (16.65x9.37")
    s-diag: 485mm (19.11")
  Monitor-1: LVDS-1 model: Seiko Epson 0x324c built: 2010 res: 1600x900
    hz: 60 dpi: 131 gamma: 1.2 size: 310x174mm (12.2x6.85") diag: 355mm (14")
    ratio: 16:9 modes: 1600x900
  API: EGL v: 1.5 hw: drv: intel crocus platforms: device: 0 drv: crocus
    device: 1 drv: swrast gbm: drv: crocus surfaceless: drv: crocus x11:
    drv: crocus inactive: wayland
  API: OpenGL v: 4.2 vendor: intel mesa v: 23.3.3 glx-v: 1.4 es-v: 3.0
    direct-render: yes renderer: Mesa Intel HD Graphics 4000 (IVB GT2)
    device-ID: 8086:0166 memory: 1.46 GiB unified: yes
  API: Vulkan v: 1.3.268 layers: 12 device: 0 type: integrated-gpu
    name: Intel HD Graphics 4000 (IVB GT2) driver: mesa intel v: 23.3.3
    device-ID: 8086:0166 surfaces: xcb,xlib device: 1 type: cpu name: llvmpipe
    (LLVM 17.0.6 256 bits) driver: mesa llvmpipe v: 23.3.3 (LLVM 17.0.6)
    device-ID: 10005:0000 surfaces: xcb,xlib
Info:
  Processes: 238 Power: uptime: 19m states: freeze,mem,disk suspend: deep
    avail: s2idle wakeups: 0 hibernate: platform
    avail: shutdown,reboot,suspend,test_resume image: 6.13 GiB Init: SysVinit
    v: 3.08 runlevel: 3 default: 3 tool: /etc/rc.d
  Packages: pm: pkgtool pkgs: 1674 libs: 238 tools: sbopkg,slackpkg pm: rpm
    pkgs: 0 Compilers: clang: 17.0.6 gcc: 13.2.0 Shell: Bash v: 5.2.26
    running-in: konsole pinxi: 3.3.31-50
Code:
bash-5.2$ udevadm --version
251
 
Old 01-17-2024, 05:55 PM   #19
h2-1
Member
 
Registered: Mar 2018
Distribution: Debian Testing
Posts: 562

Original Poster
Rep: Reputation: 320Reputation: 320Reputation: 320Reputation: 320
amikoyan, great, I think that's the first login manager (lm) output I've seen in the wild, I added that a few weeks ago, seatd, logind, and one or two others.

That was the main goal with the 3.3.32 cycle, to get all kinds of small loose ends wrapped up, refactored, etc, then a few big features like this new user udevadm ram report just popped in at the last minute.

Also the relatively recent EGL/OpenGL/Vulkan reports, nice to see all that working, though those were in a previous release, but still relatively new.

It's cool to see the sysvinit version method work, that only works occasionally (uses strings to read the binary, and sometimes that contains the version, but not always).

I think there's almost enough evidence to say that this udevadm feature is new, and came in somewhere between v245 and 249, which explains why I never heard of it before, this data for non root user has been one of the longest standing features I wanted in inxi, and for it to just pop up like this is surprising, I think I've been waiting for that for maybe 10 years now.

I still have to tweak the errors a bit now that udevadm is a valid option, some cases assume dmidecode or nothing, but those are tricky conditions to get right.

After I tweak the multi ram array logic a bit that will be as good as I can get it, though I am aware for complex systems with newer udevadm it may not work, but hard to speculate there.
 
Old 01-17-2024, 05:58 PM   #20
h2-1
Member
 
Registered: Mar 2018
Distribution: Debian Testing
Posts: 562

Original Poster
Rep: Reputation: 320Reputation: 320Reputation: 320Reputation: 320
Oh, I learned a new thing, the data width and total width, if both 64, means it's not error correcting EC ram, but if it's like 64 72 or 64 80, it's EEC, I didn't know that's what the numbers meant for data bandwidth.

Apparently DDR5 EEC uses 80 total, and 64 data.

So technically if I understand this stuff right, one can deduce EEC or not just from the data/total widths. I always thought those numbers were referring to something else.
 
Old 01-17-2024, 10:47 PM   #21
chrisretusn
Senior Member
 
Registered: Dec 2005
Location: Philippines
Distribution: Slackware64-current
Posts: 2,979

Rep: Reputation: 1556Reputation: 1556Reputation: 1556Reputation: 1556Reputation: 1556Reputation: 1556Reputation: 1556Reputation: 1556Reputation: 1556Reputation: 1556Reputation: 1556
Quote:
Originally Posted by h2-1 View Post
chrisretusn: Oops, sorry, that one slipped by. Now corrected in 3.3.31-49

The per array active modules fix works, that's good, though it looks like something is getting trimmed from Error Correction Type.

[another bug, sorry, error correction type passed the field name, not the value, to the cleaner]

I'd still like to know what the udevadm output for > 1 array setups looks like, to me it looks like they made a mistake, and assumed only 1 array, so did not number the MEMORY_ARRAY_[field] items like they do with: MEMORY_DEVICE_(\d+)_[field name]

I'm leaning towards guessing that first, MEMORY_ARRAY_LOCATION is always first, and that the ordered sequence is per array, then adding in a check for a possible array number, along with the known no number case which is so far standard. But there's no way to know this since the way they did it appears to be a mistake, a subtle one, that I can see why would not have gotten caught so far, but I have to assume it will get caught.

I may have to redo that logic to actually build the structure that is missing.

This is a similar issue I'm having with a current active bug report where with amd threadripper 2950x, 16 core, I assume 2 die, each die is counting its cores independently, which no other amd zen does that I have seen, leading to a reported core count of 1/2, but impossible to debug without the debugger data required to emulate it, I can't actually guess what the data looks like.

The good side is, very few users will have > 1 array systems, so any potential issues will be limited to a small set of people, and I'll only need probably one udevadm data sample from that system to fix it, as logic goes, this is pretty easy overall.

Thanks for confirming the fix, and sorry for the typo, I should have run some data through it with EC active, but I forgot.

Note that another actually important difference, which I don't like, between dmidecode output and udevadm output is that in many cases, udevadm does not output values if they are not active, whereas dmidecode has the same values for modules whether they are occupied or not, or for arrays, EC whether active or not.
This is mostly over my head. Not sure what the oops refers to, still glad to have helped. The output of 'pinxi -SIGmaz --vs' looks the same to me. From one of your post above I tried this 'pinxi -maz --fake udevadm' my result is this. I get the same result as user and root (the root one surprised me):
Code:
$ ./pinxi -maz --fake udevadm
Memory:
  System RAM: total: 8 GiB available: 7.76 GiB used: 2.96 GiB (38.1%)
  RAM Report: message: No RAM data found using udevadm.

# ./pinxi -maz --fake udevadm
Memory:
  System RAM: total: 8 GiB available: 7.76 GiB used: 2.96 GiB (38.1%)
  RAM Report: message: No RAM data found using udevadm.
With the 'pinxi -SIGmaz --vs', I see "For most reliable report, use superuser + dmidecode.", I gave that a try (just the "Memory" section):
Code:
$ ./pinxi -SIGmaz --vs
pinxi 3.3.31-50 (2024-01-17)
Memory:
  System RAM: total: 8 GiB available: 7.76 GiB used: 3.09 GiB (39.9%)
  Message: For most reliable report, use superuser + dmidecode.
  Array-1: capacity: 8 GiB slots: 2 modules: 2 EC: None
    max-module-size: 4 GiB note: est.
  Device-1: A0 type: N/A size: 4 GiB speed: 1333 MT/s volts: N/A
    width (bits): data: 64 total: 64 manufacturer: N/A part-no: N/A serial: N/A
  Device-2: A1 type: N/A size: 4 GiB speed: 1333 MT/s volts: N/A
    width (bits): data: 64 total: 64 manufacturer: N/A part-no: N/A serial: N/A

# ./pinxi -SIGmaz --vs --dmidecode
pinxi 3.3.31-50 (2024-01-17)
Memory:
  System RAM: total: 8 GiB available: 7.76 GiB used: 3.11 GiB (40.2%)
  Array-1: capacity: 8 GiB slots: 2 modules: 2 EC: 64-bit ECC
    max-module-size: 4 GiB note: est.
  Device-1: A0 info: double-bank type: N/A size: 4 GiB speed: 1333 MT/s
    volts: N/A width (bits): data: 64 total: 64 manufacturer: N/A part-no: N/A
    serial: N/A
  Device-2: A1 info: double-bank type: N/A size: 4 GiB speed: 1333 MT/s
    volts: N/A width (bits): data: 64 total: 64 manufacturer: N/A part-no: N/A
    serial: N/A
You post are great, I am learning quite a bit from them and what other are posting, still a two-bit amateur though.
 
Old 01-18-2024, 12:15 AM   #22
h2-1
Member
 
Registered: Mar 2018
Distribution: Debian Testing
Posts: 562

Original Poster
Rep: Reputation: 320Reputation: 320Reputation: 320Reputation: 320
I'm an amateur too, lol, I'm learning this stuff as I go along.

If those two samples are from the same system there is a definite quality problem with udevadm data, it missed EC RAM, it missed double bank, but it doesn't look like it's EC if the data and total widths are 64 bit. So that's strange.

So far it looks like except for ram voltages, which are clearly wrong with udevadm, the data is similar, with one big problem however, unlike dmidecode data, where you can link the array handle to the ram stick, which list that handle, in udevadm it's just hoping it stacks in order.

I've added an attempt to at least guess ok on that, but it's a hack, I'm hoping udevadm fixes its output for complicated situations like > 1 ram arrays on board.

I was looking at a 24 slot supermicro which looks like it has two separate banks of ram, one per cpu, but I couldn't find if it had > 1 array or not, stuff like that is really hard to find documented in my experience.

The oops were a few bugs that were exposed, one of course, the wrong function name, second, using the wrong value to clean with the cleaner, the key name instead of the value, those are all corrected now.

Some other corner case is also handled now, and I think the logic working on the dmidecode data to check and correct it is also now working on the udevadm data, though the dmidecode is more accurate because I can reliably connect the array handle to the module that belongs to it, that so far can't happen on udevadm, which is unfortunate, but that only impacts real servers with multiple memory arrays, not common. But that's why the message says to confirm with root and dmidecode, though that only shows now for -mxx and greater verbosity levels, since for most systems, if no voltage shows, the info is pretty much the same.

Keeping fingers crossed, this was/is a big new feature to add in right before releasing new inxi, but I wanted to get it in because it's nice having finally ok ram report for user, not just sudo/root.

I'm going to have to adjust some more things, unlike dmidecode, which doesn't usually have these weak spots it seems like udevadm is not very sophisticated in terms of how it is creating its data.

So maybe that message should always show, but hard to know, ram data from dmi is always very messy.
 
Old 01-18-2024, 08:19 AM   #23
drumz
Member
 
Registered: Apr 2005
Location: Oklahoma, USA
Distribution: Slackware
Posts: 906

Rep: Reputation: 697Reputation: 697Reputation: 697Reputation: 697Reputation: 697Reputation: 697
I refreshed my LiveSlak flash drive to update to the latest current. It reports:

Code:
root@darkstar:~# udevadm --version
251
root@darkstar:~# udevadm info -p /devices/virtual/dmi/id
P: /devices/virtual/dmi/id
E: DEVPATH=/devices/virtual/dmi/id
E: MEMORY_ARRAY_EC_TYPE=Single-bit ECC
E: MEMORY_ARRAY_LOCATION=System Board Or Motherboard
E: MEMORY_ARRAY_MAX_CAPACITY=412316860416
E: MEMORY_ARRAY_NUM_DEVICES=12
E: MEMORY_DEVICE_0_ASSET_TAG=DIMM_A1_AssetTag
E: MEMORY_DEVICE_0_BANK_LOCATOR=NODE 1
E: MEMORY_DEVICE_0_CONFIGURED_SPEED_MTS=2933
E: MEMORY_DEVICE_0_CONFIGURED_VOLTAGE=1
E: MEMORY_DEVICE_0_DATA_WIDTH=64
E: MEMORY_DEVICE_0_FORM_FACTOR=DIMM
E: MEMORY_DEVICE_0_LOCATOR=DIMM_A1
E: MEMORY_DEVICE_0_MANUFACTURER=Samsung
E: MEMORY_DEVICE_0_MAXIMUM_VOLTAGE=1
E: MEMORY_DEVICE_0_MINIMUM_VOLTAGE=1
E: MEMORY_DEVICE_0_PART_NUMBER=M386A8K40CM2-CVF
E: MEMORY_DEVICE_0_RANK=4
E: MEMORY_DEVICE_0_SERIAL_NUMBER=12C75F1B
E: MEMORY_DEVICE_0_SIZE=68719476736
E: MEMORY_DEVICE_0_SPEED_MTS=2933
E: MEMORY_DEVICE_0_TOTAL_WIDTH=72
E: MEMORY_DEVICE_0_TYPE=DDR4
E: MEMORY_DEVICE_0_TYPE_DETAIL=Synchronous
E: MEMORY_DEVICE_10_ASSET_TAG=NO DIMM
E: MEMORY_DEVICE_10_BANK_LOCATOR=NODE 4
E: MEMORY_DEVICE_10_CONFIGURED_VOLTAGE=1
E: MEMORY_DEVICE_10_FORM_FACTOR=Unknown
E: MEMORY_DEVICE_10_LOCATOR=DIMM_L1
E: MEMORY_DEVICE_10_MANUFACTURER=NO DIMM
E: MEMORY_DEVICE_10_MAXIMUM_VOLTAGE=1
E: MEMORY_DEVICE_10_MINIMUM_VOLTAGE=1
E: MEMORY_DEVICE_10_PART_NUMBER=NO DIMM
E: MEMORY_DEVICE_10_PRESENT=0
E: MEMORY_DEVICE_10_SERIAL_NUMBER=NO DIMM
E: MEMORY_DEVICE_10_TYPE=Unknown
E: MEMORY_DEVICE_10_TYPE_DETAIL=Unknown
E: MEMORY_DEVICE_11_ASSET_TAG=NO DIMM
E: MEMORY_DEVICE_11_BANK_LOCATOR=NODE 4
E: MEMORY_DEVICE_11_CONFIGURED_VOLTAGE=1
E: MEMORY_DEVICE_11_FORM_FACTOR=Unknown
E: MEMORY_DEVICE_11_LOCATOR=DIMM_M1
E: MEMORY_DEVICE_11_MANUFACTURER=NO DIMM
E: MEMORY_DEVICE_11_MAXIMUM_VOLTAGE=1
E: MEMORY_DEVICE_11_MINIMUM_VOLTAGE=1
E: MEMORY_DEVICE_11_PART_NUMBER=NO DIMM
E: MEMORY_DEVICE_11_PRESENT=0
E: MEMORY_DEVICE_11_SERIAL_NUMBER=NO DIMM
E: MEMORY_DEVICE_11_TYPE=Unknown
E: MEMORY_DEVICE_11_TYPE_DETAIL=Unknown
E: MEMORY_DEVICE_1_ASSET_TAG=DIMM_B1_AssetTag
E: MEMORY_DEVICE_1_BANK_LOCATOR=NODE 1
E: MEMORY_DEVICE_1_CONFIGURED_SPEED_MTS=2933
E: MEMORY_DEVICE_1_CONFIGURED_VOLTAGE=1
E: MEMORY_DEVICE_1_DATA_WIDTH=64
E: MEMORY_DEVICE_1_FORM_FACTOR=DIMM
E: MEMORY_DEVICE_1_LOCATOR=DIMM_B1
E: MEMORY_DEVICE_1_MANUFACTURER=Samsung
E: MEMORY_DEVICE_1_MAXIMUM_VOLTAGE=1
E: MEMORY_DEVICE_1_MINIMUM_VOLTAGE=1
E: MEMORY_DEVICE_1_PART_NUMBER=M386A8K40CM2-CVF
E: MEMORY_DEVICE_1_RANK=4
E: MEMORY_DEVICE_1_SERIAL_NUMBER=13240925
E: MEMORY_DEVICE_1_SIZE=68719476736
E: MEMORY_DEVICE_1_SPEED_MTS=2933
E: MEMORY_DEVICE_1_TOTAL_WIDTH=72
E: MEMORY_DEVICE_1_TYPE=DDR4
E: MEMORY_DEVICE_1_TYPE_DETAIL=Synchronous
E: MEMORY_DEVICE_2_ASSET_TAG=DIMM_C1_AssetTag
E: MEMORY_DEVICE_2_BANK_LOCATOR=NODE 1
E: MEMORY_DEVICE_2_CONFIGURED_SPEED_MTS=2933
E: MEMORY_DEVICE_2_CONFIGURED_VOLTAGE=1
E: MEMORY_DEVICE_2_DATA_WIDTH=64
E: MEMORY_DEVICE_2_FORM_FACTOR=DIMM
E: MEMORY_DEVICE_2_LOCATOR=DIMM_C1
E: MEMORY_DEVICE_2_MANUFACTURER=Samsung
E: MEMORY_DEVICE_2_MAXIMUM_VOLTAGE=1
E: MEMORY_DEVICE_2_MINIMUM_VOLTAGE=1
E: MEMORY_DEVICE_2_PART_NUMBER=M386A8K40CM2-CVF
E: MEMORY_DEVICE_2_RANK=4
E: MEMORY_DEVICE_2_SERIAL_NUMBER=12FD4EDF
E: MEMORY_DEVICE_2_SIZE=68719476736
E: MEMORY_DEVICE_2_SPEED_MTS=2933
E: MEMORY_DEVICE_2_TOTAL_WIDTH=72
E: MEMORY_DEVICE_2_TYPE=DDR4
E: MEMORY_DEVICE_2_TYPE_DETAIL=Synchronous
E: MEMORY_DEVICE_3_ASSET_TAG=DIMM_D1_AssetTag
E: MEMORY_DEVICE_3_BANK_LOCATOR=NODE 2
E: MEMORY_DEVICE_3_CONFIGURED_SPEED_MTS=2933
E: MEMORY_DEVICE_3_CONFIGURED_VOLTAGE=1
E: MEMORY_DEVICE_3_DATA_WIDTH=64
E: MEMORY_DEVICE_3_FORM_FACTOR=DIMM
E: MEMORY_DEVICE_3_LOCATOR=DIMM_D1
E: MEMORY_DEVICE_3_MANUFACTURER=Samsung
E: MEMORY_DEVICE_3_MAXIMUM_VOLTAGE=1
E: MEMORY_DEVICE_3_MINIMUM_VOLTAGE=1
E: MEMORY_DEVICE_3_PART_NUMBER=M386A8K40CM2-CVF
E: MEMORY_DEVICE_3_RANK=4
E: MEMORY_DEVICE_3_SERIAL_NUMBER=12FD31C1
E: MEMORY_DEVICE_3_SIZE=68719476736
E: MEMORY_DEVICE_3_SPEED_MTS=2933
E: MEMORY_DEVICE_3_TOTAL_WIDTH=72
E: MEMORY_DEVICE_3_TYPE=DDR4
E: MEMORY_DEVICE_3_TYPE_DETAIL=Synchronous
E: MEMORY_DEVICE_4_ASSET_TAG=NO DIMM
E: MEMORY_DEVICE_4_BANK_LOCATOR=NODE 2
E: MEMORY_DEVICE_4_CONFIGURED_VOLTAGE=1
E: MEMORY_DEVICE_4_FORM_FACTOR=Unknown
E: MEMORY_DEVICE_4_LOCATOR=DIMM_E1
E: MEMORY_DEVICE_4_MANUFACTURER=NO DIMM
E: MEMORY_DEVICE_4_MAXIMUM_VOLTAGE=1
E: MEMORY_DEVICE_4_MINIMUM_VOLTAGE=1
E: MEMORY_DEVICE_4_PART_NUMBER=NO DIMM
E: MEMORY_DEVICE_4_PRESENT=0
E: MEMORY_DEVICE_4_SERIAL_NUMBER=NO DIMM
E: MEMORY_DEVICE_4_TYPE=Unknown
E: MEMORY_DEVICE_4_TYPE_DETAIL=Unknown
E: MEMORY_DEVICE_5_ASSET_TAG=NO DIMM
E: MEMORY_DEVICE_5_BANK_LOCATOR=NODE 2
E: MEMORY_DEVICE_5_CONFIGURED_VOLTAGE=1
E: MEMORY_DEVICE_5_FORM_FACTOR=Unknown
E: MEMORY_DEVICE_5_LOCATOR=DIMM_F1
E: MEMORY_DEVICE_5_MANUFACTURER=NO DIMM
E: MEMORY_DEVICE_5_MAXIMUM_VOLTAGE=1
E: MEMORY_DEVICE_5_MINIMUM_VOLTAGE=1
E: MEMORY_DEVICE_5_PART_NUMBER=NO DIMM
E: MEMORY_DEVICE_5_PRESENT=0
E: MEMORY_DEVICE_5_SERIAL_NUMBER=NO DIMM
E: MEMORY_DEVICE_5_TYPE=Unknown
E: MEMORY_DEVICE_5_TYPE_DETAIL=Unknown
E: MEMORY_DEVICE_6_ASSET_TAG=DIMM_G1_AssetTag
E: MEMORY_DEVICE_6_BANK_LOCATOR=NODE 3
E: MEMORY_DEVICE_6_CONFIGURED_SPEED_MTS=2933
E: MEMORY_DEVICE_6_CONFIGURED_VOLTAGE=1
E: MEMORY_DEVICE_6_DATA_WIDTH=64
E: MEMORY_DEVICE_6_FORM_FACTOR=DIMM
E: MEMORY_DEVICE_6_LOCATOR=DIMM_G1
E: MEMORY_DEVICE_6_MANUFACTURER=Samsung
E: MEMORY_DEVICE_6_MAXIMUM_VOLTAGE=1
E: MEMORY_DEVICE_6_MINIMUM_VOLTAGE=1
E: MEMORY_DEVICE_6_PART_NUMBER=M386A8K40CM2-CVF
E: MEMORY_DEVICE_6_RANK=4
E: MEMORY_DEVICE_6_SERIAL_NUMBER=12FD321A
E: MEMORY_DEVICE_6_SIZE=68719476736
E: MEMORY_DEVICE_6_SPEED_MTS=2933
E: MEMORY_DEVICE_6_TOTAL_WIDTH=72
E: MEMORY_DEVICE_6_TYPE=DDR4
E: MEMORY_DEVICE_6_TYPE_DETAIL=Synchronous
E: MEMORY_DEVICE_7_ASSET_TAG=DIMM_H1_AssetTag
E: MEMORY_DEVICE_7_BANK_LOCATOR=NODE 3
E: MEMORY_DEVICE_7_CONFIGURED_SPEED_MTS=2933
E: MEMORY_DEVICE_7_CONFIGURED_VOLTAGE=1
E: MEMORY_DEVICE_7_DATA_WIDTH=64
E: MEMORY_DEVICE_7_FORM_FACTOR=DIMM
E: MEMORY_DEVICE_7_LOCATOR=DIMM_H1
E: MEMORY_DEVICE_7_MANUFACTURER=Samsung
E: MEMORY_DEVICE_7_MAXIMUM_VOLTAGE=1
E: MEMORY_DEVICE_7_MINIMUM_VOLTAGE=1
E: MEMORY_DEVICE_7_PART_NUMBER=M386A8K40CM2-CVF
E: MEMORY_DEVICE_7_RANK=4
E: MEMORY_DEVICE_7_SERIAL_NUMBER=13222532
E: MEMORY_DEVICE_7_SIZE=68719476736
E: MEMORY_DEVICE_7_SPEED_MTS=2933
E: MEMORY_DEVICE_7_TOTAL_WIDTH=72
E: MEMORY_DEVICE_7_TYPE=DDR4
E: MEMORY_DEVICE_7_TYPE_DETAIL=Synchronous
E: MEMORY_DEVICE_8_ASSET_TAG=DIMM_J1_AssetTag
E: MEMORY_DEVICE_8_BANK_LOCATOR=NODE 3
E: MEMORY_DEVICE_8_CONFIGURED_SPEED_MTS=2933
E: MEMORY_DEVICE_8_CONFIGURED_VOLTAGE=1
E: MEMORY_DEVICE_8_DATA_WIDTH=64
E: MEMORY_DEVICE_8_FORM_FACTOR=DIMM
E: MEMORY_DEVICE_8_LOCATOR=DIMM_J1
E: MEMORY_DEVICE_8_MANUFACTURER=Samsung
E: MEMORY_DEVICE_8_MAXIMUM_VOLTAGE=1
E: MEMORY_DEVICE_8_MINIMUM_VOLTAGE=1
E: MEMORY_DEVICE_8_PART_NUMBER=M386A8K40CM2-CVF
E: MEMORY_DEVICE_8_RANK=4
E: MEMORY_DEVICE_8_SERIAL_NUMBER=12FD3219
E: MEMORY_DEVICE_8_SIZE=68719476736
E: MEMORY_DEVICE_8_SPEED_MTS=2933
E: MEMORY_DEVICE_8_TOTAL_WIDTH=72
E: MEMORY_DEVICE_8_TYPE=DDR4
E: MEMORY_DEVICE_8_TYPE_DETAIL=Synchronous
E: MEMORY_DEVICE_9_ASSET_TAG=DIMM_K1_AssetTag
E: MEMORY_DEVICE_9_BANK_LOCATOR=NODE 4
E: MEMORY_DEVICE_9_CONFIGURED_SPEED_MTS=2933
E: MEMORY_DEVICE_9_CONFIGURED_VOLTAGE=1
E: MEMORY_DEVICE_9_DATA_WIDTH=64
E: MEMORY_DEVICE_9_FORM_FACTOR=DIMM
E: MEMORY_DEVICE_9_LOCATOR=DIMM_K1
E: MEMORY_DEVICE_9_MANUFACTURER=Samsung
E: MEMORY_DEVICE_9_MAXIMUM_VOLTAGE=1
E: MEMORY_DEVICE_9_MINIMUM_VOLTAGE=1
E: MEMORY_DEVICE_9_PART_NUMBER=M386A8K40CM2-CVF
E: MEMORY_DEVICE_9_RANK=4
E: MEMORY_DEVICE_9_SERIAL_NUMBER=12FD50AA
E: MEMORY_DEVICE_9_SIZE=68719476736
E: MEMORY_DEVICE_9_SPEED_MTS=2933
E: MEMORY_DEVICE_9_TOTAL_WIDTH=72
E: MEMORY_DEVICE_9_TYPE=DDR4
E: MEMORY_DEVICE_9_TYPE_DETAIL=Synchronous
E: MODALIAS=dmi:bvnAmericanMegatrendsInc.:bvr5503:bd04/11/2019:br5.14:svnSystem76:pnThelioMassive:pvrthelio-massive-b1:rvnSystem76:rnThelioMassive:rvrthelio-massive-b1:cvnSystem76:ct3:cvrthelio-massive-b1:sku:
E: SUBSYSTEM=dmi
E: USEC_INITIALIZED=18889744

root@darkstar:~#
And here is the user output from pinxi:

Code:
live@darkstar:~$ ./pinxi -SIGmaz --vs
pinxi 3.3.31-51 (2024-01-17)
System:
  Kernel: 6.6.10 arch: x86_64 bits: 64 compiler: gcc v: 2.41-slack151
    clocksource: tsc avail: hpet,acpi_pm
    parameters: BOOT_IMAGE=(hd0,gpt2)/boot/generic threadirqs preempt=full
    loglevel=3 audit=0 load_ramdisk=1 prompt_ramdisk=0 rw printk.time=0
    kbd=us tz=UTC locale=en_US.utf8 xkb=
  Desktop: KDE Plasma v: 5.27.10 tk: Qt v: 5.15.11 wm: kwin_x11 vt: 3 tools:
    avail: xlock,xscreensaver dm: SDDM Distro: Slackware 15.0
Memory:
  System RAM: total: 512 GiB available: 503.49 GiB used: 5.96 GiB (1.2%)
  Message: For most reliable report, use superuser + dmidecode.
  Array-1: capacity: 768 GiB note: est. slots: 12 modules: 8
    EC: Single-bit ECC max-module-size: 64 GiB note: est.
  Device-1: DIMM_A1 type: DDR4 detail: synchronous size: 64 GiB
    speed: 2933 MT/s volts: note: check curr: 1 min: 1 max: 1 width (bits):
    data: 64 total: 72 manufacturer: Samsung part-no: M386A8K40CM2-CVF
    serial: <filter>
  Device-2: DIMM_L1 type: no module installed
  Device-3: DIMM_M1 type: no module installed
  Device-4: DIMM_B1 type: DDR4 detail: synchronous size: 64 GiB
    speed: 2933 MT/s volts: note: check curr: 1 min: 1 max: 1 width (bits):
    data: 64 total: 72 manufacturer: Samsung part-no: M386A8K40CM2-CVF
    serial: <filter>
  Device-5: DIMM_C1 type: DDR4 detail: synchronous size: 64 GiB
    speed: 2933 MT/s volts: note: check curr: 1 min: 1 max: 1 width (bits):
    data: 64 total: 72 manufacturer: Samsung part-no: M386A8K40CM2-CVF
    serial: <filter>
  Device-6: DIMM_D1 type: DDR4 detail: synchronous size: 64 GiB
    speed: 2933 MT/s volts: note: check curr: 1 min: 1 max: 1 width (bits):
    data: 64 total: 72 manufacturer: Samsung part-no: M386A8K40CM2-CVF
    serial: <filter>
  Device-7: DIMM_E1 type: no module installed
  Device-8: DIMM_F1 type: no module installed
  Device-9: DIMM_G1 type: DDR4 detail: synchronous size: 64 GiB
    speed: 2933 MT/s volts: note: check curr: 1 min: 1 max: 1 width (bits):
    data: 64 total: 72 manufacturer: Samsung part-no: M386A8K40CM2-CVF
    serial: <filter>
  Device-10: DIMM_H1 type: DDR4 detail: synchronous size: 64 GiB
    speed: 2933 MT/s volts: note: check curr: 1 min: 1 max: 1 width (bits):
    data: 64 total: 72 manufacturer: Samsung part-no: M386A8K40CM2-CVF
    serial: <filter>
  Device-11: DIMM_J1 type: DDR4 detail: synchronous size: 64 GiB
    speed: 2933 MT/s volts: note: check curr: 1 min: 1 max: 1 width (bits):
    data: 64 total: 72 manufacturer: Samsung part-no: M386A8K40CM2-CVF
    serial: <filter>
  Device-12: DIMM_K1 type: DDR4 detail: synchronous size: 64 GiB
    speed: 2933 MT/s volts: note: check curr: 1 min: 1 max: 1 width (bits):
    data: 64 total: 72 manufacturer: Samsung part-no: M386A8K40CM2-CVF
    serial: <filter>
Graphics:
  Device-1: ASPEED Graphics Family vendor: ASUSTeK driver: ast v: kernel
    ports: active: none off: VGA-1 empty: Virtual-1 bus-ID: 02:00.0
    chip-ID: 1a03:2000 class-ID: 0300
  Device-2: NVIDIA TU106 [GeForce RTX 2060 SUPER] vendor: eVga.com.
    driver: nouveau v: kernel alternate: nvidiafb non-free: 545.xx+
    status: current (as of 2024-01; EOL~2026-12-xx) arch: Turing code: TUxxx
    process: TSMC 12nm FF built: 2018-2022 pcie: gen: 1 speed: 2.5 GT/s
    lanes: 16 link-max: gen: 3 speed: 8 GT/s ports: active: DP-2,HDMI-A-1
    empty: DP-1,DVI-D-1 bus-ID: 3b:00.0 chip-ID: 10de:1f06 class-ID: 0300
    temp: 31.0 C
  Display: x11 server: X.Org v: 21.1.10 compositor: kwin_x11 driver: X:
    loaded: modesetting unloaded: vesa alternate: fbdev dri: nouveau
    gpu: ast,nouveau display-ID: :0 screens: 1
  Screen-1: 0 s-res: 8704x2160 s-dpi: 96 s-size: 2300x571mm (90.55x22.48")
    s-diag: 2370mm (93.3")
  Monitor-1: DP-2 pos: right model: Dell S3221QS serial: <filter>
    built: 2021 res: 3840x2160 hz: 60 dpi: 140 gamma: 1.2
    size: 697x392mm (27.44x15.43") diag: 806mm (31.7") ratio: 16:9 modes:
    max: 3840x2160 min: 720x400
  Monitor-2: HDMI-A-1 mapped: HDMI-1 pos: primary,left model: Dell S3221QS
    serial: <filter> built: 2021 res: 3840x2160 hz: 60 dpi: 140 gamma: 1.2
    size: 697x392mm (27.44x15.43") diag: 806mm (31.7") ratio: 16:9 modes:
    max: 3840x2160 min: 720x400
  Monitor-3: VGA-1 mapped: VGA-1-1 note: disabled size-res: N/A modes:
    max: 1024x768 min: 640x480
  API: EGL v: 1.5 hw: drv: nvidia nouveau platforms: device: 0 drv: nouveau
    device: 1 drv: swrast gbm: drv: kms_swrast surfaceless: drv: nouveau x11:
    drv: nouveau inactive: wayland
  API: OpenGL v: 4.3 vendor: mesa v: 23.3.2 glx-v: 1.4 es-v: 3.2
    direct-render: yes renderer: NV166 device-ID: 10de:1f06 memory: 7.74 GiB
    unified: no
  API: Vulkan v: 1.3.268 layers: 12 device: 0 type: cpu name: llvmpipe
    (LLVM 17.0.6 256 bits) driver: mesa llvmpipe v: 23.3.2 (LLVM 17.0.6)
    device-ID: 10005:0000 surfaces: xcb,xlib
Info:
  Processes: 1515 Power: uptime: 7m states: freeze,mem,disk suspend: deep
    avail: s2idle wakeups: 0 hibernate: platform
    avail: shutdown,reboot,suspend,test_resume image: 201.38 GiB
    Init: SysVinit v: 3.08 runlevel: 4 default: 4 tool: /etc/rc.d
  Packages: pm: pkgtool pkgs: 976 libs: 187 tools: slackpkg Compilers:
    clang: 17.0.6 gcc: 13.2.0 Shell: Bash v: 5.2.21 running-in: konsole
    pinxi: 3.3.31-51
live@darkstar:~$
And for root:

Code:
root@darkstar:/home/live# ./pinxi -SIGmaz --vs
pinxi 3.3.31-51 (2024-01-17)
System:
  Kernel: 6.6.10 arch: x86_64 bits: 64 compiler: gcc v: 2.41-slack151
    clocksource: tsc avail: hpet,acpi_pm
    parameters: BOOT_IMAGE=(hd0,gpt2)/boot/generic threadirqs preempt=full
    loglevel=3 audit=0 load_ramdisk=1 prompt_ramdisk=0 rw printk.time=0
    kbd=us tz=UTC locale=en_US.utf8 xkb=
  Console: pty pts/2 wm: kwin_x11 DM: SDDM Distro: Slackware 15.0
Memory:
  System RAM: total: 512 GiB available: 503.49 GiB used: 6.46 GiB (1.3%)
  Report: arrays: 4 capacity: 1.50 TiB installed: 512 GiB slots: 12
    active: 8 type: DDR4 eec: Single-bit ECC
  Array-1: capacity: 384 GiB installed: 192 GiB slots: 3 modules: 3
    EC: Single-bit ECC max-module-size: 128 GiB note: est.
  Device-1: DIMM_A1 type: DDR4 detail: synchronous size: 64 GiB
    speed: 2933 MT/s volts: curr: 1.2 min: 1.2 max: 1.2 width (bits): data: 64
    total: 72 manufacturer: Samsung part-no: M386A8K40CM2-CVF serial: <filter>
  Device-2: DIMM_B1 type: DDR4 detail: synchronous size: 64 GiB
    speed: 2933 MT/s volts: curr: 1.2 min: 1.2 max: 1.2 width (bits): data: 64
    total: 72 manufacturer: Samsung part-no: M386A8K40CM2-CVF serial: <filter>
  Device-3: DIMM_C1 type: DDR4 detail: synchronous size: 64 GiB
    speed: 2933 MT/s volts: curr: 1.2 min: 1.2 max: 1.2 width (bits): data: 64
    total: 72 manufacturer: Samsung part-no: M386A8K40CM2-CVF serial: <filter>
  Array-2: capacity: 384 GiB installed: 64 GiB slots: 3 modules: 1
    EC: Single-bit ECC max-module-size: 128 GiB note: est.
  Device-1: DIMM_D1 type: DDR4 detail: synchronous size: 64 GiB
    speed: 2933 MT/s volts: curr: 1.2 min: 1.2 max: 1.2 width (bits): data: 64
    total: 72 manufacturer: Samsung part-no: M386A8K40CM2-CVF serial: <filter>
  Device-2: DIMM_E1 type: no module installed
  Device-3: DIMM_F1 type: no module installed
  Array-3: capacity: 384 GiB installed: 192 GiB slots: 3 modules: 3
    EC: Single-bit ECC max-module-size: 128 GiB note: est.
  Device-1: DIMM_G1 type: DDR4 detail: synchronous size: 64 GiB
    speed: 2933 MT/s volts: curr: 1.2 min: 1.2 max: 1.2 width (bits): data: 64
    total: 72 manufacturer: Samsung part-no: M386A8K40CM2-CVF serial: <filter>
  Device-2: DIMM_H1 type: DDR4 detail: synchronous size: 64 GiB
    speed: 2933 MT/s volts: curr: 1.2 min: 1.2 max: 1.2 width (bits): data: 64
    total: 72 manufacturer: Samsung part-no: M386A8K40CM2-CVF serial: <filter>
  Device-3: DIMM_J1 type: DDR4 detail: synchronous size: 64 GiB
    speed: 2933 MT/s volts: curr: 1.2 min: 1.2 max: 1.2 width (bits): data: 64
    total: 72 manufacturer: Samsung part-no: M386A8K40CM2-CVF serial: <filter>
  Array-4: capacity: 384 GiB installed: 64 GiB slots: 3 modules: 1
    EC: Single-bit ECC max-module-size: 128 GiB note: est.
  Device-1: DIMM_K1 type: DDR4 detail: synchronous size: 64 GiB
    speed: 2933 MT/s volts: curr: 1.2 min: 1.2 max: 1.2 width (bits): data: 64
    total: 72 manufacturer: Samsung part-no: M386A8K40CM2-CVF serial: <filter>
  Device-2: DIMM_L1 type: no module installed
  Device-3: DIMM_M1 type: no module installed
Graphics:
  Device-1: ASPEED Graphics Family vendor: ASUSTeK driver: ast v: kernel
    ports: active: none off: VGA-1 empty: Virtual-1 bus-ID: 02:00.0
    chip-ID: 1a03:2000 class-ID: 0300
  Device-2: NVIDIA TU106 [GeForce RTX 2060 SUPER] vendor: eVga.com.
    driver: nouveau v: kernel alternate: nvidiafb non-free: 545.xx+
    status: current (as of 2024-01; EOL~2026-12-xx) arch: Turing code: TUxxx
    process: TSMC 12nm FF built: 2018-2022 pcie: gen: 1 speed: 2.5 GT/s
    lanes: 16 link-max: gen: 3 speed: 8 GT/s ports: active: DP-2,HDMI-A-1
    empty: DP-1,DVI-D-1 bus-ID: 3b:00.0 chip-ID: 10de:1f06 class-ID: 0300
    temp: 31.0 C
  Display: server: X.Org v: 21.1.10 compositor: kwin_x11 driver: X:
    loaded: modesetting unloaded: vesa alternate: fbdev dri: nouveau
    gpu: ast,nouveau display-ID: :0 screens: 1
  Screen-1: 0 s-res: 8704x2160 s-dpi: 96 s-size: 2300x571mm (90.55x22.48")
    s-diag: 2370mm (93.3")
  Monitor-1: DP-2 pos: right model: Dell S3221QS serial: <filter>
    built: 2021 res: 3840x2160 hz: 60 dpi: 140 gamma: 1.2
    size: 697x392mm (27.44x15.43") diag: 806mm (31.7") ratio: 16:9 modes:
    max: 3840x2160 min: 720x400
  Monitor-2: HDMI-A-1 mapped: HDMI-1 pos: primary,left model: Dell S3221QS
    serial: <filter> built: 2021 res: 3840x2160 hz: 60 dpi: 140 gamma: 1.2
    size: 697x392mm (27.44x15.43") diag: 806mm (31.7") ratio: 16:9 modes:
    max: 3840x2160 min: 720x400
  Monitor-3: VGA-1 mapped: VGA-1-1 note: disabled size-res: N/A modes:
    max: 1024x768 min: 640x480
  API: EGL v: 1.5 hw: drv: nvidia nouveau platforms: device: 0 drv: nouveau
    device: 1 drv: swrast gbm: drv: kms_swrast surfaceless: drv: nouveau x11:
    drv: nouveau inactive: wayland
  API: OpenGL v: 4.3 vendor: mesa v: 23.3.2 glx-v: 1.4 es-v: 3.2
    direct-render: yes renderer: NV166 device-ID: 10de:1f06 memory: 7.74 GiB
    unified: no
  API: Vulkan v: 1.3.268 layers: 12 device: 0 type: cpu name: llvmpipe
    (LLVM 17.0.6 256 bits) driver: mesa llvmpipe v: 23.3.2 (LLVM 17.0.6)
    device-ID: 10005:0000 surfaces: xcb,xlib
Info:
  Processes: 1508 Power: uptime: 11m states: freeze,mem,disk suspend: deep
    avail: s2idle wakeups: 0 hibernate: platform
    avail: shutdown,reboot,suspend,test_resume image: 201.38 GiB
    Init: SysVinit v: 3.08 runlevel: 4 default: 4 tool: /etc/rc.d
  Packages: pm: pkgtool pkgs: 976 libs: 187 tools: slackpkg Compilers:
    clang: 17.0.6 gcc: 13.2.0 Shell: Bash (su) v: 5.2.21 running-in: konsole
    pinxi: 3.3.31-51
root@darkstar:/home/live#
So looks like the user report (using udevadm) dumps all the memory into 1 array. Although reviewing the udevadm report maybe MEMORY_DEVICE_*_BANK_LOCATOR indicates the array???

Code:
live@darkstar:~$ /sbin/udevadm info -p /devices/virtual/dmi/id | grep BANK_LOCATOR
E: MEMORY_DEVICE_0_BANK_LOCATOR=NODE 1
E: MEMORY_DEVICE_10_BANK_LOCATOR=NODE 4
E: MEMORY_DEVICE_11_BANK_LOCATOR=NODE 4
E: MEMORY_DEVICE_1_BANK_LOCATOR=NODE 1
E: MEMORY_DEVICE_2_BANK_LOCATOR=NODE 1
E: MEMORY_DEVICE_3_BANK_LOCATOR=NODE 2
E: MEMORY_DEVICE_4_BANK_LOCATOR=NODE 2
E: MEMORY_DEVICE_5_BANK_LOCATOR=NODE 2
E: MEMORY_DEVICE_6_BANK_LOCATOR=NODE 3
E: MEMORY_DEVICE_7_BANK_LOCATOR=NODE 3
E: MEMORY_DEVICE_8_BANK_LOCATOR=NODE 3
E: MEMORY_DEVICE_9_BANK_LOCATOR=NODE 4
This motherboard has 2 physical CPU die slots (of which both are used). I don't know why there are 4 memory arrays instead of just 2. If you only have 1 CPU installed you can only install memory for that CPU (so 6 slots instead of 12).

Code:
live@darkstar:~$ lscpu
Architecture:            x86_64
  CPU op-mode(s):        32-bit, 64-bit
  Address sizes:         46 bits physical, 48 bits virtual
  Byte Order:            Little Endian
CPU(s):                  88
  On-line CPU(s) list:   0-87
Vendor ID:               GenuineIntel
  Model name:            Intel(R) Xeon(R) Gold 6238 CPU @ 2.10GHz
    CPU family:          6
    Model:               85
    Thread(s) per core:  2
    Core(s) per socket:  22
    Socket(s):           2
    Stepping:            7
    CPU(s) scaling MHz:  31%
    CPU max MHz:         3700.0000
    CPU min MHz:         1000.0000
    BogoMIPS:            4200.00
    Flags:               fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss h
                         t tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_ts
                         c cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid dca s
                         se4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch cpuid_f
                         ault epb cat_l3 cdp_l3 ssbd mba ibrs ibpb stibp ibrs_enhanced tpr_shadow flexpriority ept vpid ept_ad fsgsbase
                         tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm cqm mpx rdt_a avx512f avx512dq rdseed adx smap clflushopt c
                         lwb intel_pt avx512cd avx512bw avx512vl xsaveopt xsavec xgetbv1 xsaves cqm_llc cqm_occup_llc cqm_mbm_total cqm_
                         mbm_local dtherm ida arat pln pts hwp hwp_act_window hwp_epp hwp_pkg_req vnmi pku ospke avx512_vnni md_clear fl
                         ush_l1d arch_capabilities
Virtualization features:
  Virtualization:        VT-x
Caches (sum of all):
  L1d:                   1.4 MiB (44 instances)
  L1i:                   1.4 MiB (44 instances)
  L2:                    44 MiB (44 instances)
  L3:                    60.5 MiB (2 instances)
NUMA:
  NUMA node(s):          2
  NUMA node0 CPU(s):     0-21,44-65
  NUMA node1 CPU(s):     22-43,66-87
Vulnerabilities:
  Gather data sampling:  Vulnerable: No microcode
  Itlb multihit:         KVM: Mitigation: VMX disabled
  L1tf:                  Not affected
  Mds:                   Not affected
  Meltdown:              Not affected
  Mmio stale data:       Vulnerable: Clear CPU buffers attempted, no microcode; SMT vulnerable
  Retbleed:              Mitigation; Enhanced IBRS
  Spec rstack overflow:  Not affected
  Spec store bypass:     Mitigation; Speculative Store Bypass disabled via prctl
  Spectre v1:            Mitigation; usercopy/swapgs barriers and __user pointer sanitization
  Spectre v2:            Mitigation; Enhanced / Automatic IBRS, IBPB conditional, RSB filling, PBRSB-eIBRS SW sequence
  Srbds:                 Not affected
  Tsx async abort:       Vulnerable: Clear CPU buffers attempted, no microcode; SMT vulnerable
 
1 members found this post helpful.
Old 01-18-2024, 12:29 PM   #24
h2-1
Member
 
Registered: Mar 2018
Distribution: Debian Testing
Posts: 562

Original Poster
Rep: Reputation: 320Reputation: 320Reputation: 320Reputation: 320
drumz, excellent set of samples, thanks.

This confirms what i was suspecting, only I do not have root on that remote server, and I had not noticed the bank locator item in the device.

So I will need to synthesize the data completely, clearly the array report is for one of the arrays, the assumption then being that all the arrays are the same, which I don't know is always the case.

This is verified by the data I got from the multi cpu servers, which also had bank locator values.

As design goes, this is terrible output, whoever did this was not very good at their job or task, re adding this feature to udevadm, probably one of those developers who only use vms and a laptop is my guess.

It was clear they needed to add at least numbering for arrays, array handles, and handles connections per device, like the source data has in dmidecode, assuming the raw dmi data has that, don't know how it works.

The good news is, first, I had a strong suspicion something was wrong, but didn't spot what it was, but with a few samples, I can emulate this.

I will have to build this from the most complex scenario, and synthesize the array-device connectors, which means, grab all the data first, then loop it again to assemble it into actual data structure which is correct, then pass it to the post processor.

I'm surprised this passed inspection, it's quite shoddy how they did this, unfortunately, but something in me raised a red flag about how the output was working, thanks for noticing the BANK_LOCATOR, which we will have to assume emans array. I had checked the specs on the supermicro board with 2 cpus and 24 ram slots, and the wiring diagram made it pretty obvious it was two, at least, memory arrays.

Looks like a 2 step process is in order, one, build the array data, 2, build the module data, then look for the bank locator on the devices, and if present, generate the actual data structure. Should not be necessary, but that's how it goes when they handed this task to someone who didn't actually understand how the hardware works, that's my guess anyway.

The risk here of course is that they realize they did something really silly, and fix it in a later release.

I had guessed that in the future, they would add the MEMORY_ARRAY_[number]_ to fix this obvious oversight, but that may never happen, so I anticipate this feature will need updates in the future once people realize how undesirable the output is, udevadm makes a lot of real errors, for example, they don't show negative values, like for EC, they simply don't show the field, which means, you can't _know_ for sure it's a negative except by guessing if no positive value, then it's negative, which is poor way to do this type of processing, I have to do the same with absence of size, though in that case, they did add a PRESENT field name, with 0 or 1 value, which is fine. Except that it doesn't always appear, sigh, your data doesn't use it, except to show... sigh, a negative value.

I'm curious who developed this feature of udevadm, if I had to guess, I'd guess someone at redhat corporation, it has that sort of poor quality not well thought out feel to it, and also not really building it from what dmidecode has shown for ages, which is the obvious model to emulate, unless NIH syndrome is active and in control.

So to start, I think I'm going to always show the Message: unreliable data if > 1 arrays are detected once this is patched and updated.
 
1 members found this post helpful.
Old 01-18-2024, 12:34 PM   #25
z80
Member
 
Registered: Jul 2019
Location: Europe
Distribution: Slackware64-current
Posts: 136

Rep: Reputation: 99
$ udevadm info -p /devices/virtual/dmi/id
Code:
P: /devices/virtual/dmi/id
E: DEVPATH=/devices/virtual/dmi/id
E: MEMORY_ARRAY_LOCATION=System Board Or Motherboard
E: MEMORY_ARRAY_MAX_CAPACITY=34359738368
E: MEMORY_ARRAY_NUM_DEVICES=2
E: MEMORY_DEVICE_0_ASSET_TAG=9876543210
E: MEMORY_DEVICE_0_BANK_LOCATOR=BANK 0
E: MEMORY_DEVICE_0_CONFIGURED_SPEED_MTS=3200
E: MEMORY_DEVICE_0_CONFIGURED_VOLTAGE=1
E: MEMORY_DEVICE_0_DATA_WIDTH=64
E: MEMORY_DEVICE_0_FIRMWARE_VERSION=Not Specified
E: MEMORY_DEVICE_0_FORM_FACTOR=SODIMM
E: MEMORY_DEVICE_0_LOCATOR=Controller0-ChannelA-DIMM0
E: MEMORY_DEVICE_0_MANUFACTURER=Kingston
E: MEMORY_DEVICE_0_MAXIMUM_VOLTAGE=1
E: MEMORY_DEVICE_0_MEMORY_OPERATING_MODE_CAPABILITY=Volatile memory
E: MEMORY_DEVICE_0_MEMORY_TECHNOLOGY=DRAM
E: MEMORY_DEVICE_0_MINIMUM_VOLTAGE=1
E: MEMORY_DEVICE_0_MODULE_MANUFACTURER_ID=Bank 2, Hex 0x98
E: MEMORY_DEVICE_0_PART_NUMBER=CBD32D4S2S8ME-16
E: MEMORY_DEVICE_0_RANK=1
E: MEMORY_DEVICE_0_SERIAL_NUMBER=DBA038FB
E: MEMORY_DEVICE_0_SIZE=17179869184
E: MEMORY_DEVICE_0_SPEED_MTS=3200
E: MEMORY_DEVICE_0_TOTAL_WIDTH=64
E: MEMORY_DEVICE_0_TYPE=DDR4
E: MEMORY_DEVICE_0_TYPE_DETAIL=Synchronous
E: MEMORY_DEVICE_0_VOLATILE_SIZE=17179869184
E: MEMORY_DEVICE_1_ASSET_TAG=9876543210
E: MEMORY_DEVICE_1_BANK_LOCATOR=BANK 0
E: MEMORY_DEVICE_1_CONFIGURED_SPEED_MTS=3200
E: MEMORY_DEVICE_1_CONFIGURED_VOLTAGE=1
E: MEMORY_DEVICE_1_DATA_WIDTH=64
E: MEMORY_DEVICE_1_FIRMWARE_VERSION=Not Specified
E: MEMORY_DEVICE_1_FORM_FACTOR=SODIMM
E: MEMORY_DEVICE_1_LOCATOR=Controller1-ChannelA-DIMM0
E: MEMORY_DEVICE_1_MANUFACTURER=Kingston
E: MEMORY_DEVICE_1_MAXIMUM_VOLTAGE=1
E: MEMORY_DEVICE_1_MEMORY_OPERATING_MODE_CAPABILITY=Volatile memory
E: MEMORY_DEVICE_1_MEMORY_TECHNOLOGY=DRAM
E: MEMORY_DEVICE_1_MINIMUM_VOLTAGE=1
E: MEMORY_DEVICE_1_MODULE_MANUFACTURER_ID=Bank 2, Hex 0x98
E: MEMORY_DEVICE_1_PART_NUMBER=CBD32D4S2S8ME-16
E: MEMORY_DEVICE_1_RANK=1
E: MEMORY_DEVICE_1_SERIAL_NUMBER=C8A07584
E: MEMORY_DEVICE_1_SIZE=17179869184
E: MEMORY_DEVICE_1_SPEED_MTS=3200
E: MEMORY_DEVICE_1_TOTAL_WIDTH=64
E: MEMORY_DEVICE_1_TYPE=DDR4
E: MEMORY_DEVICE_1_TYPE_DETAIL=Synchronous
E: MEMORY_DEVICE_1_VOLATILE_SIZE=17179869184
E: MODALIAS=dmi:bvnAmericanMegatrendsInternational,LLC.:bvrN.1.05A08:bd01/16/2023:br5.25:efr1.37:svnTUXEDO:pnTUXEDOInfinityBookProGen7(MK1):pvrStandard:rvnNB02:rnPHxARX1_PHxAQF1:rvrStandard:cvnTUXEDO:ct10:cvrStandard:skuIBP1XI07MK1:
E: SUBSYSTEM=dmi
E: USEC_INITIALIZED=6150321
$ pinxi -SIGmaz --vs
Code:
System:
  Kernel: 6.6.12 arch: x86_64 bits: 64 compiler: gcc v: 2.41-slack151
    clocksource: tsc avail: acpi_pm parameters: BOOT_IMAGE=/boot/vmlinuz-generic
    root=UUID=ff66ee3f-76fa-4088-b3c3-c928f3778265 ro
  Desktop: KDE Plasma v: 5.27.10 tk: Qt v: 5.15.12 wm: kwin_x11 vt: 7 tools:
    avail: xfce4-screensaver,xlock,xscreensaver dm: SDDM Distro: Slackware 15.0
Memory:
  System RAM: total: 32 GiB available: 31.08 GiB used: 3.44 GiB (11.1%)
  Message: For most reliable report, use superuser + dmidecode.
  Array-1: capacity: 32 GiB slots: 2 modules: 2 EC: None
    max-module-size: 16 GiB note: est.
  Device-1: Controller0-ChannelA-DIMM0 type: DDR4 detail: synchronous
    size: 16 GiB speed: 3200 MT/s volts: note: check curr: 1 min: 1 max: 1
    width (bits): data: 64 total: 64 manufacturer: Kingston
    part-no: CBD32D4S2S8ME-16 serial: <filter>
  Device-2: Controller1-ChannelA-DIMM0 type: DDR4 detail: synchronous
    size: 16 GiB speed: 3200 MT/s volts: note: check curr: 1 min: 1 max: 1
    width (bits): data: 64 total: 64 manufacturer: Kingston
    part-no: CBD32D4S2S8ME-16 serial: <filter>
Graphics:
  Device-1: Intel Alder Lake-P GT2 [Iris Xe Graphics]
    vendor: Tongfang Hongkong driver: i915 v: kernel arch: Gen-12.2
    process: Intel 10nm built: 2021-22+ ports: active: eDP-1 empty: DP-1,
    DP-2, DP-3, DP-4, HDMI-A-1 bus-ID: 00:02.0 chip-ID: 8086:46a6
    class-ID: 0300
  Display: x11 server: X.Org v: 21.1.11 with: Xwayland v: 23.2.4
    compositor: kwin_x11 driver: X: loaded: modesetting unloaded: vesa
    alternate: fbdev dri: iris gpu: i915 display-ID: :0 screens: 1
  Screen-1: 0 s-res: 2560x1600 s-dpi: 96 s-size: 677x423mm (26.65x16.65")
    s-diag: 798mm (31.43")
  Monitor-1: eDP-1 model: BOE Display 0x0aca built: 2021 res: 2560x1600
    hz: 90 dpi: 189 gamma: 1.2 size: 344x215mm (13.54x8.46") diag: 406mm (16")
    ratio: 16:10 modes: 2560x1600
  API: EGL v: 1.5 hw: drv: intel iris platforms: device: 0 drv: iris
    device: 1 drv: swrast gbm: drv: iris surfaceless: drv: iris x11: drv: iris
    inactive: wayland
  API: OpenGL v: 4.6 vendor: intel mesa v: 23.3.3 glx-v: 1.4 es-v: 3.2
    direct-render: yes renderer: Mesa Intel Graphics (ADL GT2)
    device-ID: 8086:46a6 memory: 30.35 GiB unified: yes
  API: Vulkan v: 1.3.268 layers: 12 device: 0 type: integrated-gpu
    name: Intel Graphics (ADL GT2) driver: mesa intel v: 23.3.3
    device-ID: 8086:46a6 surfaces: xcb,xlib device: 1 type: cpu name: llvmpipe
    (LLVM 17.0.6 256 bits) driver: mesa llvmpipe v: 23.3.3 (LLVM 17.0.6)
    device-ID: 10005:0000 surfaces: xcb,xlib
Info:
  Processes: 392 Power: uptime: 1h 26m states: freeze,mem,disk suspend: s2idle
    avail: deep wakeups: 0 hibernate: platform
    avail: shutdown,reboot,suspend,test_resume image: 12.43 GiB Init: SysVinit
    v: 3.08 runlevel: 4 default: 4 tool: /etc/rc.d
  Packages: pm: pkgtool pkgs: 1663 libs: 231 tools: slackpkg pm: rpm pkgs: 0
    Compilers: clang: 17.0.6 gcc: 13.2.0 Shell: Bash v: 5.2.26
    running-in: konsole pinxi: 3.3.31-51
 
1 members found this post helpful.
Old 01-18-2024, 12:39 PM   #26
h2-1
Member
 
Registered: Mar 2018
Distribution: Debian Testing
Posts: 562

Original Poster
Rep: Reputation: 320Reputation: 320Reputation: 320Reputation: 320
One of the things that makes this udevadm output very low grade is the bad decision to randomly show or not show specific field names based on circumstances, instead of always showing them, the bank locator for example should always be there, and apply to the set of 1 to many board memory arrays, dmidecode definitely did a far superior job in creating their output, far more usable and in particular machine parse-able, with clear links between connected items.

Actually no, it's worse than I thought, looking at my udevadm samples, bank locator is in fact randomly used or not used, regardless of if it's 1 or > 1 arrays.

Basically the udevadm dev tossed the array id randomly in there, this is really poor data handling by udevadm, extremely poor, I was afraid the actually complex scenarios would generate issues.

This is almost certainly because the person who whipped this feature together did not understand the physical hardware.

This is very similar to me to the systemd development, where from the start, you could see what the developers used re hardware and testing, which was vms and laptops, because that was the only stuff systemd actually worked on for maybe the first 5 years, so anyone running complex hardware or servers had big issues, and the devs kept saying there were no issues because they did not use real hardware, work stations, servers, etc. This udevadm has the same smell to me, which is why it works ideally for simple scenarios, and starts to fall apart in complex ones.

This is a big problem, for example, I have a 4 slot 1 array system where udevadm notes in bank locator that it's bank 1, bank 2, bank 3, bank 4, 1 per slot.

Which means I can't use that method to determine the actual array.

Last edited by h2-1; 01-18-2024 at 12:43 PM.
 
1 members found this post helpful.
Old 01-18-2024, 01:39 PM   #27
h2-1
Member
 
Registered: Mar 2018
Distribution: Debian Testing
Posts: 562

Original Poster
Rep: Reputation: 320Reputation: 320Reputation: 320Reputation: 320
This may not have a workaround until they actually fix their output to handle real hardware situations, but my fear is, this was made by someone paid to do it, and doesn't actually care that they did it poorly. That's what it looks like to me.

I already was using the BANK_LOCATOR for some fallback tests, but that is basically random junk strings that spmetimes refers to channels, sometimes arrays + channels, and sometimes slot names, it's largely random, it's not real data, that is. I believe it's largely up to the vendor how that data is entered per slot.

Given the samples here, the 4 array one just happened to have corresponding node 1-4, but looking at some other supermicro high slot count multi cpu, no such predictable syntax occurs.

I think I can roughly say:

'Channel [A-Z]' is not an array, that's normal channels in one array
'Bank [0-9]' has no definite meaning at all, you can largely deduce nothing from it, it might mean it's not dual channel ram on board, that is, each slot acts as one channel, or bank, or it might mean something else.
'Node [0-9]' I had some hopes for, seems to offer the best bet. I have now 4 samples, 3 supermicro, and the array capacity x node count is correct for the board, 2 have 1 array, 1 has 2 arrays, the 4 array 12 slot one has 4 nodes, so all these would be 'right' once adjusted.

However relying on such sloppy string parsing to get real data is rarely reliable and almost certain to fail with the next sample I get.

However, checking on an amd 2 cpu 16 ram slot supermicro, dmidecode, it shows only Node0, and the array capacity is correct, even though the specs look like it's a 2 cpu with 2 sets of ram slots, but dmidecode data shows only one array, so that may be ok, though I doubt it's actually right, but dmi data is just not very reliable.
 
1 members found this post helpful.
Old 01-18-2024, 01:47 PM   #28
h2-1
Member
 
Registered: Mar 2018
Distribution: Debian Testing
Posts: 562

Original Poster
Rep: Reputation: 320Reputation: 320Reputation: 320Reputation: 320
It's pretty clear the dmi data is also defective in some of these cases, for example, on a cpu that supports 8 ram channels, with 16 slots, and 2 cpus, that's to me obviously running 2 memory arrays, yet dmidecode says it is running 1.

But dmidecode has always been a very poor data source so this is not surprising, the only thing of concern here is that at least, Node X corresponds to the memory array handle, which so far it seems to.

And absence of Node x in the BANK_LOCATOR string seems consistently to indicate 1 array only.

So with this, I can get some systems handled, without anything close to robust, but the data source of udevadm is simply too low grade to allow for proper connections, and dmi data itself is too poor quality to actually trust.

I think the rule here probably should be to always show the check with dmidecode for slot total > 4.

I don't know, and have never understood, why Linux, and in particular, /sys data, has consistently not shown RAM data in any real way, I waited years for it to start since it was so logical to add it, then finally and grudgingly decided to use dmidecode as a sort of desperate fallback, which has always created big problems because its data, particularly the data in device type 16, the array data, has been such poor quality.

Last edited by h2-1; 01-18-2024 at 01:49 PM.
 
1 members found this post helpful.
Old 01-18-2024, 04:39 PM   #29
h2-1
Member
 
Registered: Mar 2018
Distribution: Debian Testing
Posts: 562

Original Poster
Rep: Reputation: 320Reputation: 320Reputation: 320Reputation: 320
This wasn't the easiest puzzle to solve, and the solution is not robust at all, but...

It now shows the Message: For most reliable.. now for all systems with more than 4 ram slots, since those can't be relied on due to the weak array handling issue.

Here's drumz server, the 4 array, 12 slot one:

Code:
pinxi -ma --vs --fake udevadm 
pinxi 3.3.31-52 (2024-01-18)
Memory:
  System RAM: total: 512 GiB available: 31.27 GiB used: 11.27 GiB (36.0%)
  Message: For most reliable report, use superuser + dmidecode.
  Report: arrays: 4 capacity: 1.50 TiB installed: 512 GiB slots: 12
    active: 8 type: DDR4 eec: Single-bit ECC
  Array-1: capacity: 384 GiB installed: 192 GiB slots: 3 modules: 3
    EC: Single-bit ECC max-module-size: 128 GiB note: est.
  Device-1: DIMM_A1 type: DDR4 detail: synchronous size: 64 GiB
    speed: 2933 MT/s volts: note: check curr: 1 min: 1 max: 1 width (bits):
    data: 64 total: 72 manufacturer: Samsung part-no: M386A8K40CM2-CVF
    serial: XXXX5F1B
  Device-2: DIMM_B1 type: DDR4 detail: synchronous size: 64 GiB
    speed: 2933 MT/s volts: note: check curr: 1 min: 1 max: 1 width (bits):
    data: 64 total: 72 manufacturer: Samsung part-no: M386A8K40CM2-CVF
    serial: XXXX0925
  Device-3: DIMM_C1 type: DDR4 detail: synchronous size: 64 GiB
    speed: 2933 MT/s volts: note: check curr: 1 min: 1 max: 1 width (bits):
    data: 64 total: 72 manufacturer: Samsung part-no: M386A8K40CM2-CVF
    serial: XXXX4EDF
  Array-2: capacity: 384 GiB installed: 64 GiB slots: 3 modules: 1
    EC: Single-bit ECC max-module-size: 128 GiB note: est.
  Device-1: DIMM_D1 type: DDR4 detail: synchronous size: 64 GiB
    speed: 2933 MT/s volts: note: check curr: 1 min: 1 max: 1 width (bits):
    data: 64 total: 72 manufacturer: Samsung part-no: M386A8K40CM2-CVF
    serial: XXXX31C1
  Device-2: DIMM_E1 type: no module installed
  Device-3: DIMM_F1 type: no module installed
  Array-3: capacity: 384 GiB installed: 192 GiB slots: 3 modules: 3
    EC: Single-bit ECC max-module-size: 128 GiB note: est.
  Device-1: DIMM_G1 type: DDR4 detail: synchronous size: 64 GiB
    speed: 2933 MT/s volts: note: check curr: 1 min: 1 max: 1 width (bits):
    data: 64 total: 72 manufacturer: Samsung part-no: M386A8K40CM2-CVF
    serial: XXXX321A
  Device-2: DIMM_H1 type: DDR4 detail: synchronous size: 64 GiB
    speed: 2933 MT/s volts: note: check curr: 1 min: 1 max: 1 width (bits):
    data: 64 total: 72 manufacturer: Samsung part-no: M386A8K40CM2-CVF
    serial: XXXX2532
  Device-3: DIMM_J1 type: DDR4 detail: synchronous size: 64 GiB
    speed: 2933 MT/s volts: note: check curr: 1 min: 1 max: 1 width (bits):
    data: 64 total: 72 manufacturer: Samsung part-no: M386A8K40CM2-CVF
    serial: XXXX3219
  Array-4: capacity: 384 GiB installed: 64 GiB slots: 3 modules: 1
    EC: Single-bit ECC max-module-size: 128 GiB note: est.
  Device-1: DIMM_L1 type: no module installed
  Device-2: DIMM_M1 type: no module installed
  Device-3: DIMM_K1 type: DDR4 detail: synchronous size: 64 GiB
    speed: 2933 MT/s volts: note: check curr: 1 min: 1 max: 1 width (bits):
    data: 64 total: 72 manufacturer: Samsung part-no: M386A8K40CM2-CVF
    serial: XXXX50AA
And here's another one I had access to, giving us a total of 2 samples for this lol... not ideal, no idea what further variations might exist, but:

Code:
pinxi -ma --vs --fake udevadm 
pinxi 3.3.31-52 (2024-01-18)
Memory:
  System RAM: total: 288 GiB available: 31.27 GiB used: 11.32 GiB (36.2%)
  Message: For most reliable report, use superuser + dmidecode.
  Report: arrays: 2 capacity: 1.50 TiB installed: 288 GiB slots: 24
    active: 18 type: DDR3 eec: Multi-bit ECC
  Array-1: capacity: 768 GiB installed: 144 GiB slots: 12 modules: 9
    EC: Multi-bit ECC max-module-size: 64 GiB note: est.
  Device-1: P1-DIMMA1 type: DDR3 detail: registered (buffered) size: 16 GiB
    speed: 1066 MT/s volts: N/A width (bits): data: 64 total: 72
    manufacturer: Samsung part-no: M393B2G70BH0-CK0 serial: 35XXXXFA
  Device-2: P1-DIMMA2 type: no module installed
  Device-3: P1-DIMMA3 type: no module installed
  Device-4: P1-DIMMB1 type: DDR3 detail: registered (buffered) size: 16 GiB
    speed: 1066 MT/s volts: N/A width (bits): data: 64 total: 72
    manufacturer: Samsung part-no: M393B2G70BH0-CK0 serial: 35XXXX36
  Device-5: P1-DIMMB2 type: DDR3 detail: registered (buffered) size: 16 GiB
    speed: 1066 MT/s volts: N/A width (bits): data: 64 total: 72
    manufacturer: Samsung part-no: M393B2G70BH0-CK0 serial: 86XXXX5B
  Device-6: P1-DIMMB3 type: no module installed
  Device-7: P1-DIMMC1 type: DDR3 detail: registered (buffered) size: 16 GiB
    speed: 1066 MT/s volts: N/A width (bits): data: 64 total: 72
    manufacturer: Samsung part-no: M393B2G70BH0-CK0 serial: 35XXXX4D
  Device-8: P1-DIMMC2 type: DDR3 detail: registered (buffered) size: 16 GiB
    speed: 1066 MT/s volts: N/A width (bits): data: 64 total: 72
    manufacturer: Samsung part-no: M393B2G70BH0-CK0 serial: 34XXXX37
  Device-9: P1-DIMMC3 type: DDR3 detail: registered (buffered) size: 16 GiB
    speed: 1066 MT/s volts: N/A width (bits): data: 64 total: 72
    manufacturer: Samsung part-no: M393B2G70BH0-CK0 serial: 34XXXX846
  Device-10: P1-DIMMD1 type: DDR3 detail: registered (buffered) size: 16 GiB
    speed: 1066 MT/s volts: N/A width (bits): data: 64 total: 72
    manufacturer: Samsung part-no: M393B2G70BH0-CK0 serial: 35XXXX5EE
  Device-11: P1-DIMMD2 type: DDR3 detail: registered (buffered) size: 16 GiB
    speed: 1066 MT/s volts: N/A width (bits): data: 64 total: 72
    manufacturer: Samsung part-no: M393B2G70BH0-CK0 serial: 34XXXX71
  Device-12: P1-DIMMD3 type: DDR3 detail: registered (buffered) size: 16 GiB
    speed: 1066 MT/s volts: N/A width (bits): data: 64 total: 72
    manufacturer: Samsung part-no: M393B2G70BH0-CK0 serial: 86XXXX5D
  Array-2: capacity: 768 GiB installed: 144 GiB slots: 12 modules: 9
    EC: Multi-bit ECC max-module-size: 64 GiB note: est.
  Device-1: P2-DIMME1 type: DDR3 detail: registered (buffered) size: 16 GiB
    speed: 1066 MT/s volts: N/A width (bits): data: 64 total: 72
    manufacturer: Samsung part-no: M393B2G70BH0-CK0 serial: 35XXXX4B
  Device-2: P2-DIMME2 type: DDR3 detail: registered (buffered) size: 16 GiB
    speed: 1066 MT/s volts: N/A width (bits): data: 64 total: 72
    manufacturer: Samsung part-no: M393B2G70BH0-CK0 serial: 34XXXX13
  Device-3: P2-DIMME3 type: DDR3 detail: registered (buffered) size: 16 GiB
    speed: 1066 MT/s volts: N/A width (bits): data: 64 total: 72
    manufacturer: Samsung part-no: M393B2G70BH0-CK0 serial: 34XXXX2A5
  Device-4: P2-DIMMF1 type: DDR3 detail: registered (buffered) size: 16 GiB
    speed: 1066 MT/s volts: N/A width (bits): data: 64 total: 72
    manufacturer: Samsung part-no: M393B2G70BH0-CK0 serial: 35XXXX29
  Device-5: P2-DIMMF2 type: DDR3 detail: registered (buffered) size: 16 GiB
    speed: 1066 MT/s volts: N/A width (bits): data: 64 total: 72
    manufacturer: Samsung part-no: M393B2G70BH0-CK0 serial: 34XXXX9F
  Device-6: P2-DIMMF3 type: DDR3 detail: registered (buffered) size: 16 GiB
    speed: 1066 MT/s volts: N/A width (bits): data: 64 total: 72
    manufacturer: Samsung part-no: M393B2G70BH0-CK0 serial: 86XXXX15A
  Device-7: P2-DIMMG1 type: DDR3 detail: registered (buffered) size: 16 GiB
    speed: 1066 MT/s volts: N/A width (bits): data: 64 total: 72
    manufacturer: Samsung part-no: M393B2G70BH0-CK0 serial: 3XXXXDC
  Device-8: P2-DIMMG2 type: no module installed
  Device-9: P2-DIMMG3 type: no module installed
  Device-10: P2-DIMMH1 type: DDR3 detail: registered (buffered) size: 16 GiB
    speed: 1066 MT/s volts: N/A width (bits): data: 64 total: 72
    manufacturer: Samsung part-no: M393B2G70BH0-CK0 serial: 35XXXXD9
  Device-11: P2-DIMMH2 type: DDR3 detail: registered (buffered) size: 16 GiB
    speed: 1066 MT/s volts: N/A width (bits): data: 64 total: 72
    manufacturer: Samsung part-no: M393B2G70BH0-CK0 serial: 86XXXX58
  Device-12: P2-DIMMH3 type: no module installed
This is unfortunate, but at least in some cases the Node [x] method words, but trusting random strings like that is unlikely to work always, it's about as non robust as you can get, this would have been a lot easier if udevadm provided handles to connect the arrays and devices, and if they had provided the full arrays reports, not just the one case.

This test only runs with the Node x syntax, and only if > 1 node was detected, at which point I believe it will work, unless someone uses the term 'node' for something other than an array.

I'm pretty sure other servers will have no Node syntax with > 1 array however, but I already know from data that things like P0, P1, Bank 1, Bank 2, Channel A, Channel B, aren't reliable to detect arrays, and then there's a bunch of other random stuff as well.

But at least the udevadm reports will roughly match up with the dmidecode reports, but very low grades for the udevadm implementation, it's like half done at best, and was designed wrong in several ways in terms of being reliable for data source.

But this is now sort of weakly working.

I did not have to refactor it, just insert a data structure rebuilder when nodes were detected.

Note further that some systmes have Node 0, but only 1, even though they are almost certainly > 1 array systems, but on those, they are reported with the right capacity for the array, and the right total slots, etc, so those are wrong somewhere else, all quite vague.

whew!

But at least there's a mechanism to inject this logic when required, so there may be other syntaxes that can be added there in the future if they show up. Seems to work on supermicro boards so far, and that system76, which is a start.

Last edited by h2-1; 01-19-2024 at 12:13 AM.
 
Old 01-18-2024, 05:10 PM   #30
h2-1
Member
 
Registered: Mar 2018
Distribution: Debian Testing
Posts: 562

Original Poster
Rep: Reputation: 320Reputation: 320Reputation: 320Reputation: 320
chrisretusn, sorry, wanted to ask this earlier, can you show:

Code:
sudo dmidecode --type  16,17
for your above sample, is that the same udevadm sample you posted earlier, if not, can you also provide:

Code:
udevadm info -p /devices/virtual/dmi/id
There's some odd discrepancies there between the dmidecode version and the udevadm version, want to make sure there's nothing wrong in the logic.

One showing EC, the other Non EC is particularly odd, particularly when the data/total are 64/64, which I believe means non EC.

But if dmidecode is just lying, that's fine, nothing I can do about that.

Re the --fake udevadm,that only works if you have the test environment and the debugger data files, what I use to emaulate the various samples here, those files are available from codeberg.org/smxi/pinxi/data/ram/udevadm/ and I'm trying to upload the real data files used to develop in case someone wants to try to work on it other than me, I used to have most of those non-open because it was a pain to go through that stuff and clean it up and organize it, but it's mostly done now so I just add them as I go along.

The paths for those, if anyone cares, can be set using --fake-data-dir though it's hard coded to be what I use locally. But that has to all be setup to use it, it's pretty easy once you get the idea.
 
  


Reply



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is Off
HTML code is Off



Similar Threads
Thread Thread Starter Forum Replies Last Post
Testers for inxi/pinxi redone -C CPU logic... huge internal changes h2-1 Slackware 353 02-24-2022 08:51 PM
pinxi/inxi huge BSD updates, testers? h2-1 *BSD 0 03-08-2021 11:54 PM
Huge inxi/pinxi upgrade, new features, Logical volumes, raid rewrite, beta testers? h2-1 Slackware 12 12-17-2020 05:04 PM

LinuxQuestions.org > Forums > Linux Forums > Linux - Distributions > Slackware

All times are GMT -5. The time now is 02:10 PM.

Main Menu
Advertisement
My LQ
Write for LQ
LinuxQuestions.org is looking for people interested in writing Editorials, Articles, Reviews, and more. If you'd like to contribute content, let us know.
Main Menu
Syndicate
RSS1  Latest Threads
RSS1  LQ News
Twitter: @linuxquestions
Open Source Consulting | Domain Registration