利用Dmideco码是能够读取Linux系统上的各种DIMM内存信息(如型号、速度和其他属性)的首选方法。但遗憾的是,由于需要访问权限,使用dmidecode仅限于超级用户/dev/mem。但事实证明,还有另一种报道较少的方式可以获得大致相同的信息。
最近,一些读者一直在询问我的一些基准测试文章的内存细节,对一些新的笔记本电脑和其他设备的内存类型/频率和其他细节感到好奇。使用自动系统详细信息,除非我以超级用户身份进行基准测试,否则不会报告该信息,这是因为我依赖dmidecode来解析该内存信息。
但红帽工程师汉斯·德·戈伊德最近指出另一种选择。在最新的Linux发行版的引导过程中,udev提取DMI信息并将其存储在udev数据库中。
所以在最新的Linux发行版上,Udevadm info-e|grep-e内存设备作为普通用户,可以访问DIMM存储设备信息。例如。
$udevadm info-e|grep-e内存设备-e内存阵列
E:MEMORY_ARRAY_LOCATION=主板或主板
E:内存阵列最大容量=68719476736
E:内存_设备_0_总宽度=32
E:内存设备0数据宽度=32
E:内存_设备_0_大小=17179869184
E:Memory_Device_0_Form_Factor=其他
E:Memory_Device_0_Locator=DIMM 0
E:Memory_Device_0_Bank_Locator=P0通道A
E:内存_设备_0_类型=
E:MEMORY_DEVICE_0_TYPE_DETAIL=同步未缓冲(未寄存)
E:Memory_Device_0_SPEED_MTS=6400
E:存储器_设备_0_制造商=微米技术
E:内存_设备_0_序列号=00000000
E:Memory_Device_0_Asset_Tag=未指定
E:Memory_Device_0_Part_Number=MT62F4G32D8DV-026 WT
E:Memory_Device_0_RANK=2
E:Memory_Device_0_Configuring_SPEED_MTS=6400
E:内存设备0最小电压=0.5
E:内存_设备_0_最大电压=0.5
E:内存设备0配置电压=0.5
E:Memory_Device_0_Memory_Technology=DRAM
E:MEMORY_DEVICE_0_MEMORY_OPERATING_MODE_CAPABILITY=Volatile内存
E:MEMORY_DEVICE_0_FIRMWARE_VERSION=未知
E:Memory_Device_0_MODULE_MANUFACTOR_ID=存储体1,十六进制0x2C
E:Memory_Device_0_Volatile_Size=17179869184
E:内存_设备_1_总宽度=32
E:内存设备1数据宽度=32
E:内存设备1大小=17179869184
E:Memory_Device_1_Form_Factor=其他
E:Memory_Device_1_Locator=DIMM 0
E:Memory_Device_1_Bank_Locator=P0通道B
E:内存_设备_1_类型=
E:MEMORY_DEVICE_1_TYPE_DETAIL=同步未缓冲(未寄存)
E:内存_设备_1_速度_MTS=6400
E:Memory_Device_1_制造商=微米技术
E:内存设备1序列号=00000000
E:Memory_Device_1_Asset_Tag=未指定
E:Memory_Device_1_Part_Number=MT62F4G32D8DV-026 WT
E:Memory_Device_1_RANK=2
E:Memory_Device_1_Configuring_SPEED_MTS=6400
E:内存设备1最小电压=0.5
E:内存设备1最大电压=0.5
E:内存设备1配置电压=0.5
E:Memory_Device_1_Memory_Technology=DRAM
E:MEMORY_DEVICE_1_MEMORY_OPERATING_MODE_CAPABILITY=Volatile内存
E:内存设备1固件版本=未知
E:Memory_Device_1_MODULE_MANUFACTOR_ID=组1,十六进制0x2C
E:内存设备1易失性大小=17179869184
E:内存_设备_2_总宽度=32
E:内存设备2数据宽度=32
E:内存设备2大小=17179869184
E:内存_设备_2_外形系数=其他
E:Memory_Device_2_Locator=DIMM 0
E:Memory_Device_2_Bank_Locator=P0通道C
E:内存_设备_2_类型=
E:MEMORY_DEVICE_2_TYPE_DETAIL=同步未缓冲(未寄存)
E:Memory_Device_2_SPEED_MTS=6400
E:Memory_Device_2_制造商=微米技术
E:内存设备2序列号=00000000
E:Memory_Device_2_Asset_tag=未指定
E:MEMORY_DEVICE_2_PART_NUMBER=MT62F4G32D8DV-026 WT
E:Memory_Device_2_RANK=2
E:Memory_Device_2_Configuring_SPEED_MTS=6400
E:内存设备2最小电压=0.5
E:内存设备2最大电压=0.5
E:内存设备2配置电压=0.5
E:Memory_Device_2_Memory_Technology=DRAM
E:MEMORY_DEVICE_2_MEMORY_OPERATING_MODE_CAPABILITY=Volatile内存
E:内存设备2固件版本=未知
E:Memory_Device_2_MODULE_MANUFACTOR_ID=组1,十六进制0x2C
E:内存设备2易失性大小=17179869184
E:内存_设备_3_总宽度=32
E:内存设备3数据宽度=32
E:内存设备3大小=17179869184
E:内存_设备_3_外形系数=其他
E:Memory_Device_3_Locator=DIMM 0
E:Memory_Device_3_Bank_Locator=P0通道D
E:存储器_DEVICE_3_TYPE =
E:MEMORY_DEVICE_3_TYPE_DETAIL=同步未缓冲(未寄存)
E:内存_设备_3_速度_MTS=6400
E:Memory_Device_3_制造商=微米技术
E:内存设备3序列号=00000000
E:MEMORY_DEVICE_3_ASSET_TAG=未指定
E:Memory_Device_3_Part_Number=MT62F4G32D8DV-026 WT
E:Memory_Device_3_RANK=2
E:Memory_Device_3_Configuring_SPEED_MTS=6400
E:内存设备3最小电压=0.5
E:内存设备3最大电压=0.5
E:MEMORY_DEVICE_3_CONFIGURED_VOLTAGE=0.5
E:Memory_Device_3_Memory_Technology=DRAM
E:MEMORY_DEVICE_3_MEMORY_OPERATING_MODE_CAPABILITY=Volatile内存
E:内存设备3固件版本=未知
E:Memory_Device_3_MODULE_MANUFACTOR_ID=组1,十六进制0x2C
E:内存设备3易失性大小=17179869184
E:Memory_ARRAY_NUM_DEVICES=4
不过,您可能会注意到报告的DIMM类型信息“不符合规格”...在过去两周的测试中,我在几个系统上看到了这一点。遗憾的是,现代Linux发行版上基于DDR5/LPDDR5的系统将内存类型报告为“不符合规范”,并且无法识别较新的内存。但是,作为根用户的dmidecode确实成功地正确报告了此信息。还有电压信息似乎不准确的问题,但这是一个较小的问题,没有进行广泛的调查。
In any event with my testing thus far the DIMM vendor/model number, MT/s reporting, and other metrics have otherwise been working out well. Thus moving forward able to provide better transparency in those areas when not running as root and a handy hint for others looking at finding out system memory details while not having root access. The "udevadm info -e" can also be used for accessing other DMI information that otherwise is normally restricted to root access. Too bad though there isn't a universal solution for Linux like dmidecode being able to fallback to the udev database where available or similar rather than this existing fragmented mess since the failure of HAL and not as many accepted standards as Windows.