요약·해설과 원문, 전문 번역을 서로 분리했습니다. API 이름, symbol, source path는 원문 표기를 사용합니다.
1. 요약·해설
원문의 핵심 논리와 kernel programming 관점의 보충 설명입니다. 아래의 전문 번역과는 별도로 작성했습니다.
2. 영어 원문 전체
번역 기준이 된 Linux v6.18.37 원문입니다. 줄 번호는 이 버전의 파일 좌표입니다.
원문 전체 펼치기
.. SPDX-License-Identifier: GPL-2.0
==========================
One Device per Host Bridge
==========================
This system has a single socket with two CXL host bridges. Each host bridge
has a single CXL memory expander with a 4GB of memory.
Things to note:
* Cross-Bridge interleave is not being used.
* The expanders are in two separate but adjacent memory regions.
* This CEDT/SRAT describes one node per device
* The expanders have the same performance and will be in the same memory tier.
:doc:`CEDT <../acpi/cedt>`::
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
:doc:`SRAT <../acpi/srat>`::
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
:doc:`HMAT <../acpi/hmat>`::
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
:doc:`SLIT <../acpi/slit>`::
Signature : "SLIT" [System Locality Information Table]
Localities : 0000000000000003
Locality 0 : 10 20 20
Locality 1 : FF 0A FF
Locality 2 : FF FF 0A
:doc:`DSDT <../acpi/dsdt>`::
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
}
}
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-64CEDT는 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
각 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-90SRAT은 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
각 CFMWS base와 length가 독립 proximity domain에 일대일로 연결됩니다.
두 entry의 flags는 모두 0000000B입니다. `Enabled`와 `Hot Pluggable`은 1이고 `Non-Volatile`은 0이므로 두 node 모두 활성화된 hot-pluggable volatile memory입니다.
HMAT: 같은 memory tier의 동일 성능
91-110HMAT 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
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-118SLIT(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
세 locality row를 원문의 열 순서 그대로 구조화했습니다.
DSDT: 두 CXL host bridge identity
119-136DSDT의 `_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 `_UID`가 독립 CHBS와 해당 CFMWS의 First Target에 연결됩니다.
S0D0의 `_UID` 0x07은 첫 CHBS와 첫 CFMWS target에, S0D5의 `_UID` 0x06은 두 번째 CHBS와 두 번째 CFMWS target에 대응합니다. 이 identity 분리로 각 device의 memory region과 NUMA node를 독립적으로 연결할 수 있습니다.
요약과 해설
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`도 이 두 경로를 일관되게 연결합니다.