Documentation/driver-api/cxl/platform/example-configurations/one-dev-per-hb.rst GitHub 원문 ↗

Linux 6.18.37 · Driver API / CXL / Platform / Example Configurations

One Device per Host Bridge

두 CXL host bridge의 memory expander를 인접하지만 독립된 CFMWS와 NUMA node로 제시하는 firmware 구성을 설명합니다.

Source pathDocumentation/driver-api/cxl/platform/example-configurations/one-dev-per-hb.rst
Source versionLinux v6.18.37
TranslationDUJINLABS 전문 번역 + 해설

요약·해설과 원문, 전문 번역을 서로 분리했습니다. API 이름, symbol, source path는 원문 표기를 사용합니다.

1. 요약·해설

원문의 핵심 논리와 kernel programming 관점의 보충 설명입니다. 아래의 전문 번역과는 별도로 작성했습니다.

요약과 해설

one-dev-per-hb.rst:1-136

이 구성은 host bridge마다 4GB expander 하나를 두고, cross-bridge interleave 없이 인접한 4GB CFMWS 두 개와 proximity domain 두 개로 노출합니다. CEDT와 SRAT은 device를 분리하지만 HMAT은 domain 1과 2에 같은 latency·bandwidth를 부여해 동일 memory tier임을 나타냅니다. SLIT와 DSDT의 locality·`_UID`도 이 두 경로를 일관되게 연결합니다.

2. 영어 원문 전체

번역 기준이 된 Linux v6.18.37 원문입니다. 줄 번호는 이 버전의 파일 좌표입니다.

원문 전체 펼치기
1 .. SPDX-License-Identifier: GPL-2.0
2
3 ==========================
4 One Device per Host Bridge
5 ==========================
6
7 This system has a single socket with two CXL host bridges. Each host bridge
8 has a single CXL memory expander with a 4GB of memory.
9
10 Things to note:
11
12 * Cross-Bridge interleave is not being used.
13 * The expanders are in two separate but adjacent memory regions.
14 * This CEDT/SRAT describes one node per device
15 * The expanders have the same performance and will be in the same memory tier.
16
17 :doc:`CEDT <../acpi/cedt>`::
18
19 Subtable Type : 00 [CXL Host Bridge Structure]
20 Reserved : 00
21 Length : 0020
22 Associated host bridge : 00000007
23 Specification version : 00000001
24 Reserved : 00000000
25 Register base : 0000010370400000
26 Register length : 0000000000010000
27
28 Subtable Type : 00 [CXL Host Bridge Structure]
29 Reserved : 00
30 Length : 0020
31 Associated host bridge : 00000006
32 Specification version : 00000001
33 Reserved : 00000000
34 Register base : 0000010380800000
35 Register length : 0000000000010000
36
37 Subtable Type : 01 [CXL Fixed Memory Window Structure]
38 Reserved : 00
39 Length : 002C
40 Reserved : 00000000
41 Window base address : 0000001000000000
42 Window size : 0000000100000000
43 Interleave Members (2^n) : 00
44 Interleave Arithmetic : 00
45 Reserved : 0000
46 Granularity : 00000000
47 Restrictions : 0006
48 QtgId : 0001
49 First Target : 00000007
50
51 Subtable Type : 01 [CXL Fixed Memory Window Structure]
52 Reserved : 00
53 Length : 002C
54 Reserved : 00000000
55 Window base address : 0000001100000000
56 Window size : 0000000100000000
57 Interleave Members (2^n) : 00
58 Interleave Arithmetic : 00
59 Reserved : 0000
60 Granularity : 00000000
61 Restrictions : 0006
62 QtgId : 0001
63 First Target : 00000006
64
65 :doc:`SRAT <../acpi/srat>`::
66
67 Subtable Type : 01 [Memory Affinity]
68 Length : 28
69 Proximity Domain : 00000001
70 Reserved1 : 0000
71 Base Address : 0000001000000000
72 Address Length : 0000000100000000
73 Reserved2 : 00000000
74 Flags (decoded below) : 0000000B
75 Enabled : 1
76 Hot Pluggable : 1
77 Non-Volatile : 0
78
79 Subtable Type : 01 [Memory Affinity]
80 Length : 28
81 Proximity Domain : 00000002
82 Reserved1 : 0000
83 Base Address : 0000001100000000
84 Address Length : 0000000100000000
85 Reserved2 : 00000000
86 Flags (decoded below) : 0000000B
87 Enabled : 1
88 Hot Pluggable : 1
89 Non-Volatile : 0
90
91 :doc:`HMAT <../acpi/hmat>`::
92
93 Structure Type : 0001 [SLLBI]
94 Data Type : 00 [Latency]
95 Target Proximity Domain List : 00000000
96 Target Proximity Domain List : 00000001
97 Target Proximity Domain List : 00000002
98 Entry : 0080
99 Entry : 0100
100 Entry : 0100
101
102 Structure Type : 0001 [SLLBI]
103 Data Type : 03 [Bandwidth]
104 Target Proximity Domain List : 00000000
105 Target Proximity Domain List : 00000001
106 Target Proximity Domain List : 00000002
107 Entry : 1200
108 Entry : 0200
109 Entry : 0200
110
111 :doc:`SLIT <../acpi/slit>`::
112
113 Signature : "SLIT" [System Locality Information Table]
114 Localities : 0000000000000003
115 Locality 0 : 10 20 20
116 Locality 1 : FF 0A FF
117 Locality 2 : FF FF 0A
118
119 :doc:`DSDT <../acpi/dsdt>`::
120
121 Scope (_SB)
122 {
123 Device (S0D0)
124 {
125 Name (_HID, "ACPI0016" /* Compute Express Link Host Bridge */) // _HID: Hardware ID
126 ...
127 Name (_UID, 0x07) // _UID: Unique ID
128 }
129 ...
130 Device (S0D5)
131 {
132 Name (_HID, "ACPI0016" /* Compute Express Link Host Bridge */) // _HID: Hardware ID
133 ...
134 Name (_UID, 0x06) // _UID: Unique ID
135 }
136 }
137

3. 한국어 전문 번역

영어 원문의 문단 순서와 의미를 유지한 전체 번역입니다. 코드, 함수명, symbol과 URL은 원문 표기를 유지합니다.

host bridge마다 device 하나가 있는 구성

1-16
.. SPDX-License-Identifier: GPL-2.0

이 system은 socket 하나와 CXL host bridge 두 개를 갖습니다. 각 host bridge에는 4GB memory를 가진 CXL memory expander 하나가 연결됩니다.

주목할 사항은 다음과 같습니다.

  • Cross-Bridge interleave를 사용하지 않습니다.
  • 두 expander는 서로 분리되어 있지만 인접한 memory region에 있습니다.
  • CEDT/SRAT는 device마다 node 하나를 설명합니다.
  • 두 expander의 성능은 같으며 같은 memory tier에 배치됩니다.

CEDT: host bridge별 독립 CFMWS

17-64

CEDT는 associated host bridge 00000007과 00000006인 CXL Host Bridge Structure 두 개를 선언합니다. UID 07의 register base는 0000010370400000, UID 06의 register base는 0000010380800000이며 두 register length는 모두 0000000000010000입니다.

           Subtable Type : 00 [CXL Host Bridge Structure]
                Reserved : 00
                  Length : 0020
  Associated host bridge : 00000007
   Specification version : 00000001
                Reserved : 00000000
           Register base : 0000010370400000
         Register length : 0000000000010000

           Subtable Type : 00 [CXL Host Bridge Structure]
                Reserved : 00
                  Length : 0020
  Associated host bridge : 00000006
   Specification version : 00000001
                Reserved : 00000000
           Register base : 0000010380800000
         Register length : 0000000000010000

           Subtable Type : 01 [CXL Fixed Memory Window Structure]
                Reserved : 00
                  Length : 002C
                Reserved : 00000000
     Window base address : 0000001000000000
             Window size : 0000000100000000
Interleave Members (2^n) : 00
   Interleave Arithmetic : 00
                Reserved : 0000
             Granularity : 00000000
            Restrictions : 0006
                   QtgId : 0001
            First Target : 00000007

           Subtable Type : 01 [CXL Fixed Memory Window Structure]
                Reserved : 00
                  Length : 002C
                Reserved : 00000000
     Window base address : 0000001100000000
             Window size : 0000000100000000
Interleave Members (2^n) : 00
   Interleave Arithmetic : 00
                Reserved : 0000
             Granularity : 00000000
            Restrictions : 0006
                   QtgId : 0001
            First Target : 00000006
host bridge별 CFMWS presentation
Host BridgeRegister BaseWindow BaseWindow Size / Target
00000007000001037040000000000010000000000000000100000000 / 00000007
00000006000001038080000000000011000000000000000100000000 / 00000006

각 4GB expander가 자기 host bridge만 target으로 하는 인접한 CFMWS 하나에 대응합니다.

첫 CFMWS는 base 0000001000000000, size 0000000100000000, First Target 00000007을 사용합니다. 두 번째 CFMWS는 바로 인접한 base 0000001100000000에서 같은 size를 사용하고 First Target은 00000006입니다.

두 CFMWS 모두 `Interleave Members (2^n)` 00, arithmetic 00, granularity 00000000, `Restrictions` 0006, `QtgId` 0001입니다. target이 하나씩이므로 host bridge 간 interleave는 구성하지 않습니다.

SRAT: device별 proximity domain

65-90

SRAT은 CFMWS 두 개를 별도 Memory Affinity entry로 기술합니다. proximity domain 00000001은 첫 4GB range에, domain 00000002는 인접한 두 번째 4GB range에 대응합니다.

        Subtable Type : 01 [Memory Affinity]
               Length : 28
     Proximity Domain : 00000001
            Reserved1 : 0000
         Base Address : 0000001000000000
       Address Length : 0000000100000000
            Reserved2 : 00000000
Flags (decoded below) : 0000000B
            Enabled : 1
      Hot Pluggable : 1
       Non-Volatile : 0

        Subtable Type : 01 [Memory Affinity]
               Length : 28
     Proximity Domain : 00000002
            Reserved1 : 0000
         Base Address : 0000001100000000
       Address Length : 0000000100000000
            Reserved2 : 00000000
Flags (decoded below) : 0000000B
            Enabled : 1
      Hot Pluggable : 1
       Non-Volatile : 0
SRAT device별 memory affinity
DomainBase AddressAddress LengthFlags
0000000100000010000000000000000100000000Enabled, Hot Pluggable, Volatile
0000000200000011000000000000000100000000Enabled, Hot Pluggable, Volatile

각 CFMWS base와 length가 독립 proximity domain에 일대일로 연결됩니다.

두 entry의 flags는 모두 0000000B입니다. `Enabled`와 `Hot Pluggable`은 1이고 `Non-Volatile`은 0이므로 두 node 모두 활성화된 hot-pluggable volatile memory입니다.

HMAT: 같은 memory tier의 동일 성능

91-110

HMAT SLLBI는 proximity domain 00000000, 00000001, 00000002에 대한 latency와 bandwidth를 제공합니다. 두 CXL device domain은 같은 성능 entry를 받아 같은 memory tier에 속합니다.

              Structure Type : 0001 [SLLBI]
                   Data Type : 00   [Latency]
Target Proximity Domain List : 00000000
Target Proximity Domain List : 00000001
Target Proximity Domain List : 00000002
                       Entry : 0080
                       Entry : 0100
                       Entry : 0100

              Structure Type : 0001 [SLLBI]
                   Data Type : 03   [Bandwidth]
Target Proximity Domain List : 00000000
Target Proximity Domain List : 00000001
Target Proximity Domain List : 00000002
                       Entry : 1200
                       Entry : 0200
                       Entry : 0200
HMAT domain별 성능
Target DomainLatencyBandwidthRole / Tier
0000000000801200local DRAM
0000000101000200CXL device, shared tier
0000000201000200CXL device, shared tier

source에 나열된 domain과 latency·bandwidth entry를 같은 행에 대응시켰습니다.

data type 00의 latency entry는 0080, 0100, 0100이고 data type 03의 bandwidth entry는 1200, 0200, 0200입니다. domain 1과 2의 값이 동일하므로 두 expander의 성능 등급도 같습니다.

SLIT: 세 locality의 거리 matrix

111-118

SLIT(System Locality Information Table)는 locality 세 개의 abstract distance matrix를 제공합니다. locality 0은 자신에게 10, 두 CXL locality에 20을 갖습니다. locality 1과 2는 자신의 local distance가 0A이고 나머지 CXL 방향은 FF입니다.

   Signature : "SLIT"    [System Locality Information Table]
  Localities : 0000000000000003
Locality   0 : 10 20 20
Locality   1 : FF 0A FF
Locality   2 : FF FF 0A
SLIT locality distance matrix
From / ToLocality 0Locality 1Locality 2
Locality 0102020
Locality 1FF0AFF
Locality 2FFFF0A

세 locality row를 원문의 열 순서 그대로 구조화했습니다.

DSDT: 두 CXL host bridge identity

119-136

DSDT의 `_SB` scope에는 CXL host bridge device S0D0과 S0D5가 있습니다. 두 device의 `_HID`는 Compute Express Link Host Bridge를 뜻하는 `ACPI0016`입니다.

Scope (_SB)
{
  Device (S0D0)
  {
      Name (_HID, "ACPI0016" /* Compute Express Link Host Bridge */)  // _HID: Hardware ID
      ...
      Name (_UID, 0x07)  // _UID: Unique ID
  }
  ...
  Device (S0D5)
  {
      Name (_HID, "ACPI0016" /* Compute Express Link Host Bridge */)  // _HID: Hardware ID
      ...
      Name (_UID, 0x06)  // _UID: Unique ID
  }
}
DSDT와 CEDT identity 연결
DSDT Device_HID_UIDCEDT / CFMWS
S0D0ACPI00160x07CHBS 00000007 / window 1000000000
S0D5ACPI00160x06CHBS 00000006 / window 1100000000

각 DSDT `_UID`가 독립 CHBS와 해당 CFMWS의 First Target에 연결됩니다.

S0D0의 `_UID` 0x07은 첫 CHBS와 첫 CFMWS target에, S0D5의 `_UID` 0x06은 두 번째 CHBS와 두 번째 CFMWS target에 대응합니다. 이 identity 분리로 각 device의 memory region과 NUMA node를 독립적으로 연결할 수 있습니다.