内存EDAC在AMD异构场景的应用

内存EDAC在AMD异构场景的应用具体到 AMDMI200 加速器 数据中心 GPU 的异构实例中 每个 GPU 具有两个数据织物网络 每个网络包含四个统一内存控制器 UMC 每个 UMC 又含有八个通道

在异构系统中,AMD通过将CPU与GPU的数据织物网络通过定制的xGMI链接连接,实现了统一访问,使得GPU节点的数据织物网络如同CPU节点一样可访问。这样的设计使得系统能够高效地整合CPU与GPU资源,提升数据处理速度和效率,特别是在处理密集型计算任务中。

在异构系统中,AMD GPU的内存控制器可以通过EDAC(Error Detection And Correction)框架进行表示和管理,具体层级如下:

GPU DF(数据织物网络) -> EDAC MC GPU UMC(统一内存控制器) -> EDAC CSROW UMC通道 -> EDAC CHANNEL

例如,一个包含一个AMD CPU与四个 MI200 GPU通过xGMI相连的异构系统。这种系统在EDAC子系统下,通过调用CPU与GPU特定的操作来处理异构硬件,GPU节点按照PCI层级顺序枚举,第一个GPU节点ID紧随CPU节点后,后续GPU节点按此规律递增。

具体到AMD MI200加速器(数据中心GPU)的异构实例中,每个GPU具有两个数据织物网络,每个网络包含四个统一内存控制器(UMC),每个UMC又含有八个通道。每个UMC通道控制一个128位HBM2e(即2GB)通道,相当于8个2GB Rank)。这形成了总共4096位的DRAM数据总线。

/sysfs目录下,异构系统中CPU与GPU节点的EDAC表示如下:

$ ls /sys/devices/system/edac/mc/
        mc0   - CPU MC node 0
        mc1  |
        mc2  |- GPU card[0] => node 0(mc1), node 1(mc2)
        mc3  |
        mc4  |- GPU card[1] => node 0(mc3), node 1(mc4)
        mc5  |
        mc6  |- GPU card[2] => node 0(mc5), node 1(mc6)
        mc7  |
        mc8  |- GPU card[3] => node 0(mc7), node 1(mc8)

每个GPU节点(例如GPU卡1)下,包含两个MC节点(如mc1与mc2),每个MC节点(如mc1)下有四个UMC(csrow),每个UMC有八个通道,通道与内存大小等信息。

/sys/devices/system/edac/mc/..

CPU                     # CPU node
├── mc 0

GPU Nodes are enumerated sequentially after CPU nodes have been populated
GPU card 1              # Each MI200 GPU has 2 nodes/mcs
├── mc 1                # GPU node 0 == mc1, Each MC node has 4 UMCs/CSROWs
│   ├── csrow 0         # UMC 0
│   │   ├── channel 0   # Each UMC has 8 channels
│   │   ├── channel 1   # size of each channel is 2 GB, so each UMC has 16 GB
│   │   ├── channel 2
│   │   ├── channel 3
│   │   ├── channel 4
│   │   ├── channel 5
│   │   ├── channel 6
│   │   ├── channel 7
│   ├── csrow 1         # UMC 1
│   │   ├── channel 0
│   │   ├── ..
│   │   ├── channel 7
│   ├── ..              ..
│   ├── csrow 3         # UMC 3
│   │   ├── channel 0
│   │   ├── ..
│   │   ├── channel 7
│   ├── rank 0
│   ├── ..              ..
│   ├── rank 31         # total 32 ranks/dimms from 4 UMCs
├
├── mc 2                # GPU node 1 == mc2
│   ├── ..              # each GPU has total 64 GB

GPU card 2
├── mc 3
│   ├── ..
├── mc 4
│   ├── ..

GPU card 3
├── mc 5
│   ├── ..
├── mc 6
│   ├── ..

GPU card 4
├── mc 7
│   ├── ..
├── mc 8
│   ├── ..

sysfs中,EDAC(Error Detection and Correction)相关的条目通常位于/sys/devices/system/edac/之下,其中mc目录包含了内存控制器(Memory Controller)的信息。对于这个特定的异构系统,我们可以预期看到如下结构:

  1. CPU的内存控制器:

    • /sys/devices/system/edac/mc/mc0/: 这里代表了CPU的内存控制器0,下面可能包含有关错误纠正和检测的信息,如ce_countue_count

  1. GPU的内存控制器:

    • GPU的内存控制器则按照它们在系统中的发现顺序被分配不同的mc编号。由于有4块GPU,每块GPU有两个内存控制器(因为每个GPU有两个数据织物网络,每个网络有一个UMC),所以会有8个额外的mc条目。

    • 例如,/sys/devices/system/edac/mc/mc1/sys/devices/system/edac/mc/mc8分别代表了四个GPU的八个内存控制器。每个GPU的内存控制器下,可能会有类似CPU的错误统计信息,以及更具体的csrow(内存控制器选择)和channel(通道)信息,反映GPU内存组织结构。

以GPU部分为例,假设mc1代表了第一个GPU的第一个数据织物网络的内存控制器,则其下的结构可能如下:

  • /sys/devices/system/edac/mc/mc1/

    • csrow0: 第一个UMC,每个UMC作为EDAC的一个csrow条目。

    • channel0channel7: 表示该UMC下的8个通道,每个通道可能有各自的错误统计信息。

    • csrow1csrow3: 分别对应其余三个UMC,每个同样管理8个通道。

这个结构反映了GPU的内存布局,每个GPU的UMC被视为一个csrow,而UMC内的通道则直接映射为channel。这样的组织方式允许系统监控和管理每个GPU内存模块的错误情况,无论是可纠正的还是不可纠正的错误。

EDAC子系统为AMD异构系统提供了处理机制,通过调用特定于系统CPU与GPU的操作,实现了对异构硬件的支持与错误检测与纠正,提升了系统的可靠性和维护性。

编程小号
上一篇 2025-01-28 16:11
下一篇 2025-02-06 13:51

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ji-chu/107495.html