软件开发同学必看!Linux 下用 dmidecode 探秘服务器内存硬件

大家好,我是飞哥!

现在很多软件开发同学对硬件了解甚少,例如对于内存往往只知道有几个 GB 容量。其它参数一概不知,我觉得这个不太好。还是应该对运行自己程序的硬件有更为详细的了解的。

今天就来带大家更详细地了解下自己的内存硬件信息。

如果你手头真的有一台刀片服务器,查看内存硬件相对比较容易。打开机箱盖子直接看就行了。内存从硬件上,看到的是一根根有着金手指的硬件。安装在 CPU 的周围的内存插槽中。

53270b1ef7c331eb6fd0b74f976379a2.png

但一般来说,我们的服务器都是托管在 IDC 机房的。我们想拆开机盖看,这事不太可能。幸运的是 Linux 上提供了 dmidecode 命令可以让我们方便地查看服务器中内存的安装情况。

该命令中可以输出主板上所有的内存插槽,以及插槽上安装的内存条的一些详细信息,所以输出比较长。以下我先把其中一条内存的输出结果展示出来。

# dmidecode
......
Memory Device
Handle 0x0039, DMI type 17, 84 bytes
Memory Device
 Array Handle: 0x0031
 Error Information Handle: Not Provided
 Total Width: 72 bits
 Data Width: 64 bits
 Size: 32 GB
 Form Factor: DIMM
 Set: None
 Locator: DIMM 1
 Bank Locator: P0 CHANNEL A
 Type: DDR4
 Type Detail: Synchronous Registered (Buffered)
 Speed: 2933 MT/s
 Manufacturer: Samsung
 Serial Number: 440FEB5D
 Asset Tag: Not Specified
 Part Number: M393A4K40DB2-CVF    
 Rank: 2
 Configured Memory Speed: 2933 MT/s
 Minimum Voltage: 1.2 V
 Maximum Voltage: 1.2 V
 Configured Voltage: 1.2 V
 Memory Technology: DRAM
 Memory Operating Mode Capability: Volatile memory
 Firmware Version: Unknown
 Module Manufacturer ID: Bank 1, Hex 0xCE
 Module Product ID: Unknown
 Memory Subsystem Controller Manufacturer ID: Unknown
 Memory Subsystem Controller Product ID: Unknown
 Non-Volatile Size: None
 Volatile Size: 32 kB
 Cache Size: None
 Logical Size: None
......

通过 dmidecode 以上的输出可以看到,这个内存条的如下一些关键信息。

位宽信息

目前的服务器的 CPU 和内存基本都是 64 位的。数据位宽 Data Width 这一列显示了内存的位宽是 64。也就是说一次 IO 并行能提供 64 bits 的数据。

但要注意到 Total Width 是 72 bits。说明因为服务器内存为了规避电子干扰带来的比特翻转问题,需要错误检查和纠错的 ECC 功能。而 ECC 内存需要 8 bit 冗余存储位来进行数据的校验和纠错。所以内存实际一次 IO 提供的位宽是 64 + 8 = 72 bits。

容量信息

Size 这一行的输出是这条内存的容量情况,结果中的 32 GB 是这条内存可以存储的字节数。关于容量还要注意到 Type Detail 这一行输出的 Synchronous Registered (Buffered) 。这表明这是一个带寄存器颗粒的内存。正因为是带了寄存器颗粒,所以这条内存可以做到 32 GB 的大容量。

内存代际

内存根据发展的阶段来看,分 DDR、DDR2、DDR3、DDR4 等几个代际,最新还有 DDR5 也出来了。另外就是在内个代际的内部,又细分成了不同的频率规格。

8b00a448ad169fef0ef75feb655f0907.png

dmidecode 输出中的 Type 行表明了这是一条 DDR4 的内存, Speed 行的输出表明这个内存的数据频率是 2933 MT/s。

通道位置

之前我们说过,服务器 CPU 都有多个通道的。比如下图是某颗服务器 CPU 的通道数是 6 个,每个通道可以连接 2 个内存条。

865d6b7413164dddb2a787c73a568ff7.jpeg

dmidecode 输出中也包含了通道的信息。 Bank Locator 这一行显示了内存条是连接到 CPU 的哪个通道上的。上面例子中的内存条是连接到 P0 这个 CPU 的 CHANNEL A 通道上的。

实际上这颗 CPU 总共有 CHANNEL A、CHANNEL B、CHANNEL C、......、CHANNEL H 总共 8 个通道。每个通道上都支持连接 2 个这样的内存条。但要注意的是,并不是所有的插槽都会安装内存,有可能会空置。比如在我手头的这台机器中,P0 CHANNEL A 就只连接了一条内存。

Handle 0x0038, DMI type 17, 84 bytes
Memory Device
 Array Handle: 0x0031
 Error Information Handle: Not Provided
 Total Width: Unknown
 Data Width: Unknown
 Size: No Module Installed
 Form Factor: Unknown
 Set: None
 Locator: DIMM 0
 **Bank Locator: P0 CHANNEL A**
 ......
Handle 0x0039, DMI type 17, 84 bytes
Memory Device
 Array Handle: 0x0031
 Error Information Handle: Not Provided
 Total Width: 72 bits
 Data Width: 64 bits
 Size: 32 GB
 Form Factor: DIMM
 Set: None
 Locator: DIMM 1
 **Bank Locator: P0 CHANNEL A** 
......

P0 CHANNEL A 的第一个内存条的数据包括 Total Width、Data Width 等字段都是空的,表示没有安装内存条。在 P0 的 CPU 上每个通道都是空着一个插槽,使用一个插槽。

这个服务器有 P0 和 P1 两颗 CPU,P1 这个 CPU 也有 CHANNEL A、CHANNEL B、CHANNEL C、......、CHANNEL H 共 8 个通道。插槽使用方式和 P0 一样。

所以这台服务器上总共就安装了 2 * 8 * 32 GB 的物理内存,总大小是 512 GB。

另外在 dmidecode 的输出中还有 Rank 数量 为2,表示每个内存条都有 2 个 Rank。工作电压 为 1.2 v。

不过 dmidecode 总归只是一个软件显示,并不是万能的。比如内存颗粒有多少个,延迟参数是怎么样的,dmidecode 就无能为力了。需要结合内存的信息到官网上去搜索。

0e85513102d5b0bf8039f891e2067ae5.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值