ARMv9를 이해하는 큰 그림
ARMv9는 CPU를 완전히 새로 바꾼 단일 기능이 아니다. 기존 64-bit Arm 실행 구조 위에 계산, 보안, 격리와 대규모 시스템 관리 기능을 여러 세대에 걸쳐 확장한 architecture다.
1. 실행 모델과 주소 변환
EL0~EL3가 왜 필요한지부터 system call, 4KB page walk, Stage 2, barrier와 atomic까지 실제 순서로 설명한다.
입문 → 실무2. Realm과 CCA
관리자도 내용을 볼 수 없는 VM이라는 출발점에서 GPT/GPC, RMM 객체, RMI 호출과 attestation까지 내려간다.
입문 → 실무3. Vector·AI와 보안
여러 숫자를 한 번에 계산하는 원리부터 SVE predicate, SME ZA, MTE 오류와 PAC·BTI·GCS 함수 보호를 다룬다.
입문 → 실무4. 가상화·플랫폼·관측
VM이 CPU와 memory를 나누는 원리부터 KVM exit, GIC interrupt, SMMU DMA, firmware와 performance trace까지 잇는다.
입문 → 실무5. CPU·Toolchain·Linux
ARMv9와 실제 Cortex의 차이부터 문서 선택, compiler target, HWCAP dispatch와 Linux source 추적을 실습한다.
각 설명의 기준은 Arm Architecture Reference Manual과 공식 programmer guide다. 구현별 차이가 필요한 지점에서는 Cortex·Neoverse TRM, Linux v6.18.37 문서와 source를 연결한다.
정확한 근거를 찾을 때 사용하는 문서 계층
Arm의 Architecture Reference Manual은 모든 호환 구현이 지켜야 할 계약을 설명한다. Cortex 또는 Neoverse TRM은 특정 코어가 그 계약을 어떻게 구현했는지 설명하며, SoC 문서는 코어 밖의 주소 맵·인터럽트·전원·주변장치를 연결한다.
명령 의미를 TRM에서 찾거나, 캐시 구조를 아키텍처 문서에서 찾으면 필요한 정보가 비어 보인다. 문서가 담당하는 층이 다르기 때문이다.
어떤 상태와 명령이 존재하며, 소프트웨어가 관찰할 수 있는 동작과 예외 조건이 무엇인지 정의한다.
특정 CPU의 캐시 크기·연결, PMU 이벤트, 구현 정의 레지스터와 power/debug 동작을 설명한다.
SoC MMIO 주소, GIC·SMMU 통합, firmware interface와 실제 칩 erratum은 SoC·component 문서가 담당한다.
Linux v6.18.37 소스 분석 8편
개념을 이해한 다음 실제 구현으로 내려가는 두 번째 단계다. 각 글은 hardware 상태,
Linux의 주요 구조체와 함수 호출 경로, 오류 분기, trace·재현 명령을 같은 순서로 설명한다.
기준 source는 Linux v6.18.37 commit 0c503cf3dde2다.
Exception과 system call
kernel_entry에서 el0t_64_sync_handler, do_el0_svc, invoke_syscall과 page abort까지 추적한다.
MMU·page table·TLB
paging_init, do_page_fault, anonymous page, COW와 flush_tlb_mm을 연결한다.
Realm guest와 RSI
이 tree에 실제 존재하는 RSI 1.0 초기화·RIPAS·attestation 경로와 존재하지 않는 host KVM RME 범위를 분리한다.
SOURCE 04SVE·SME 상태 관리
first-use trap, VL·SVL prctl(), task switch와 SVE·ZA·ZT signal frame을 분석한다.
MTE fault와 process 정책
set_mte_ctrl, TCF0·GCR, synchronous·asynchronous fault와 task switch를 추적한다.
KVM vCPU와 Stage-2
KVM_RUN에서 EL2 진입, exit dispatch, Stage-2 abort와 user_mem_abort를 분석한다.
GICv3·vGIC·ITS
physical INTID, irq_domain, virtual List Register와 MSI·LPI 주입 경로를 연결한다.
SOURCE 08SMMUv3·IOMMU·DMA
SID·PASID, STE·CD, domain attach, CMDQ invalidation과 EVTQ fault를 분석한다.
Realm 범위 주의: Linux v6.18.37에는 Realm guest RSI 구현은 있지만 host KVM이 RMI로 Realm을 생성하는 완성 경로는 없다. 해당 글은 architecture 규약과 이 tree의 구현을 명시적으로 분리한다.
중복을 걷어낸 43개 보충 주제
처음 점검한 누락 목록은 Realm의 PAS·GPT·GPC, Stage 1·2와 IPA·PA, SVE/SME의 vector length, SMMU와 Realm 장치처럼 같은 개념이 여러 항목에 반복돼 있었다. 겹치는 항목을 하나의 설명 흐름으로 합치니 43개 독립 주제가 남았다. 긴 단일 페이지를 만들지 않고 5개 개념 해설과 8개 Linux source 분석 문서에 배치했다.
| 통합 영역 | 중복 제거 후 포함한 주제 | 수 |
|---|---|---|
| 기반·차이 | 버전 연대표, 필수/선택과 탐지, 실행·보안 상태, AArch32, 주소 변환, ordering·원자 연산·MOPS, cache·TLB·MPAM | 7 |
| Realm·CCA | 위협 모델, PAS·GPT·GPC·granule, RMM 객체, RMI·RSI, 수명주기와 공유 memory, attestation, 장치, 버전별 확장 | 8 |
| Vector·AI | SVE2 계열, SME 계열, 저정밀 data format, vector-length ABI, ACLE·compiler 예제 | 5 |
| 보안 | MTE, PAC, BTI·GCS, Checked Pointer Arithmetic | 4 |
| 가상화·플랫폼 | VHE·nested, HDBSS, GIC, SMMU, PSCI·SMCCC·FF-A·TF-A, BSA·SBSA·BBR | 6 |
| 성능·디버그 | PMU·AMU, SPE·BRBE·ETE·TRBE·CoreSight와 VM buffer, RAS·SError | 3 |
| CPU 문서 | Cortex·Neoverse TRM, component TRM, optimization guide, revision·errata | 4 |
| Linux·개발 | compiler target, ACLE·AAPCS64·AAELF64, HWCAP·process·KVM ABI, Linux source, FVP·QEMU, 실제 탐지 출력 | 6 |
| 합계 | 43 | |
보충 원칙: 기존 Linux v6.18.37 번역 페이지가 있는 항목은 반복 번역하지 않고 ARMv9 관점의 차이·신뢰 경계·실제 확인 순서를 이 심화 문서에서 보충한 뒤 원문 번역으로 연결했다.
아키텍처 기준 문서
먼저 바로잡을 점: 예전 ARMv9 보충 문서인 DDI 0608은 Arm 사이트에서 RETIRED로 표시된다. ARMv9-A의 확정 기준은 DDI 0487이며, DDI 0608을 현재 명세의 출발점으로 사용하면 안 된다.
| 공식 문서 | 담당 범위 | 언제 여는가 |
|---|---|---|
| DDI 0487 | Arm Architecture Reference Manual for A-profile architecture. Exception level, translation, memory ordering, virtualization과 feature 규칙의 기준이다. | 동작의 옳고 그름, trap 조건, MMU descriptor, barrier 의미를 확인할 때. |
| DDI 0601 | Arm A-profile System Registers. 시스템 레지스터의 field, 접근 권한, trap과 feature 의존성을 검색하기 쉽게 분리했다. | ID_AA64*, SCTLR_ELx, TCR_ELx, HCR_EL2 같은 레지스터를 볼 때. |
| DDI 0602 | Arm A-profile A64 Instruction Set Architecture. encoding, operation, pseudocode와 feature 조건을 제공한다. | 명령 인코딩, operand 제약, 예외와 정확한 실행 의미를 확인할 때. |
| DDI 0608 | 초기 Armv9-A supplement였으나 현재는 retired다. 페이지도 DDI 0487을 definitive reference로 안내한다. | 역사적 변경 맥락을 볼 때만 참고하고, 구현 판단에는 사용하지 않는다. |
ARMv9.x 표기: Armv9.0-A, Armv9.2-A, Armv9.7-A는 아키텍처 feature 집합의 세대다. 제품 출시 연도나 Cortex 번호와 같은 개념이 아니다.
기능은 개별 확인: 같은 ARMv9 계열도 구현한 optional feature가 다르다. 제품 페이지와 TRM을 읽은 뒤 실행 중에는 ID register와 OS가 공개하는 ABI를 확인한다.
Armv8-A와 무엇이 다른가
세대교체보다 확장에 가깝다. Arm 공식 안내에 따르면 Armv9.0-A는 Armv8.5-A와 정렬되어 있다. 즉 Armv8.5-A의 기능을 포함하고 SVE2 같은 ARMv9 전용 기능을 더한 구조다. A64 명령 체계, Exception Level, MMU와 두 단계 주소 변환 같은 기본 프로그래밍 모델은 이어진다.
| 비교 항목 | Armv8-A | Armv9-A | 실무 해석 |
|---|---|---|---|
| 출발점 | Armv8.0-A에서 시작해 v8.1~v8.9로 매년 확장됐다. | Armv9.0-A가 Armv8.5-A의 기능을 포함하고 ARMv9 전용 feature를 더한다. | Armv8에서 쌓인 PAC, MTE, Secure EL2 등을 모두 ARMv9에서 처음 생긴 기능으로 분류하면 안 된다. |
| 64-bit ISA | AArch64 execution state와 A64 instruction set을 처음 도입했다. | A64를 그대로 발전시키며 새 instruction과 system register feature를 추가한다. | 일반적인 64-bit Armv8 userspace binary는 ARMv9에서도 같은 ABI를 사용한다. 새 명령 사용 여부는 별도 탐지한다. |
| AArch32 | 지원하는 구현에서는 32-bit application뿐 아니라 AArch32 privileged software도 실행할 수 있었다. | architecture support를 EL0로 제한한다. CPU가 AArch32 EL0까지 생략할 수도 있다. | ARMv9라는 이름만 보고 32-bit application 실행을 보장하면 안 된다. 모든 CPU의 FEAT_AA32EL0와 kernel 설정을 확인한다. |
| Vector | Neon은 고정 128-bit다. SVE는 Armv8.2-A에서 HPC 중심의 optional extension으로 도입됐다. | SVE2가 DSP, multimedia, computer vision과 일반 vector workload까지 범위를 넓힌다. | FEAT_SVE2는 architecture feature로 탐지한다. 표준 ARMv9 platform과 실제 Cortex 제품의 포함 여부를 제품 자료와 HWCAP으로 확정한다. |
| Matrix | dot product, BF16과 in-vector matrix multiply가 v8.x에서 점진적으로 추가됐다. | 후속 v9.x에서 SME/SME2의 streaming mode와 ZA matrix storage를 추가한다. | SME는 모든 Armv9.0 CPU의 기본 기능이 아니다. HWCAP2_SME와 vector length ABI를 확인한다. |
| Memory safety | MTE는 Armv8.5-A에서 도입됐다. PAC는 v8.3-A, BTI는 v8.5-A 계열 기능이다. | 첫 ARMv9 Cortex 제품군이 MTE, PAC/BTI를 적극 채택하고 이후 보안 확장을 이어간다. | MTE·PAC·BTI를 ARMv9 전용이라고 부르기보다 도입 버전과 해당 CPU 구현 여부를 따로 기록한다. |
| 격리 | TrustZone의 Secure/Non-secure world와 virtualization을 중심으로 한다. Secure EL2는 v8.4-A에서 추가됐다. | RME와 Realm world를 도입해 Arm CCA의 confidential computing 경계를 만든다. | RME hardware만으로 끝나지 않는다. RMM, firmware, KVM과 platform의 CCA 지원이 함께 필요하다. |
| 진화 방식 | v8.x revision이 기존 software ecosystem을 유지하며 기능을 추가한다. | v9.x도 같은 방식으로 SME, GCS, BRBE, RME 개선 등을 연차별로 추가한다. | “Armv9” 한 단어보다 Armv9.x-A + FEAT_* + core revision을 기록해야 재현 가능하다. |
A64 ABI, EL0~EL3 개념, translation table과 stage-2 virtualization, cache coherency와 memory ordering의 큰 구조는 연속적이다. 기존 arm64 kernel 지식이 그대로 출발점이 된다.
AArch32 실행 가능 범위, SVE2·SME·MTE·RME·GCS 구현 여부, vector length, PMU event와 erratum은 CPU와 platform마다 확인한다.
컴파일 대상 문자열만 믿지 않고 AT_HWCAP, AT_HWCAP2와 prctl()을 사용한다. 선택 기능 명령은 탐지 후 별도 code path에서 실행한다.
ARMv9에서 자주 만나는 기능
SVE2
SVE와 Neon 기능을 확장한 scalable vector ISA다. 128~2048-bit 범위에서 구현이 vector length를 선택하므로, 코드는 특정 폭을 고정하지 않는 vector-length-agnostic 방식으로 작성한다.
SME
streaming SVE mode와 ZA matrix storage를 추가한다. Linux에서는 context switch, signal frame, ptrace와 KVM이 더 큰 scalable state를 보존해야 한다.
MTE
pointer와 memory allocation에 tag를 붙여 use-after-free와 범위 밖 접근을 탐지한다. Armv8.5-A에서 도입됐으며 ARMv9 전용 기능은 아니지만 여러 ARMv9 코어에서 중요한 보안 기능이다.
PAC · BTI · GCS
PAC는 pointer에 인증 코드를 결합하고, BTI는 간접 분기 도착점을 제한하며, GCS는 return address의 별도 보호 복사본을 유지한다. 서로 대체 관계가 아니다.
RME · CCA
RME는 Realm을 위한 hardware architecture이고, RMM은 Realm 수명과 stage-2 관리를 맡는 software component다. Host가 자원을 관리해도 보호된 Realm 내용을 직접 읽지 못하게 경계를 만든다.
PMU · SPE · BRBE
아키텍처가 공통 뼈대를 정하지만 event 번호와 구현 범위는 코어에 따라 달라진다. profiling 전에 해당 CPU TRM과 Linux perf list를 함께 확인한다.
| 제품 예 | 공식 표기 | 읽을 때 주의할 점 |
|---|---|---|
| Neoverse N2 | Armv9.0-A | 첫 ARMv9 infrastructure core로 소개된다. 최신 ARMv9 전체 기능과 동일시하지 않는다. |
| Cortex-A720 | Armv9.2-A | SVE2, MTE 등 제품 페이지의 구현 목록과 TRM을 기준으로 판단한다. |
| Cortex-A725 | Armv9.2-A | 같은 v9.2라도 microarchitecture와 PMU·cache 구현은 A720과 다르다. |
| Neoverse V3 | Armv9.2-A | RME/CCA, SVE2, MTE, BRBE, SPE 등 server workload 관련 구현을 제품 자료에서 확인한다. |
| 2025 A-profile update | Armv9.7-A | 아키텍처의 진화 예시다. 기존 ARMv9 CPU가 v9.7 기능을 자동으로 지원한다는 뜻은 아니다. |
CPU별 TRM에서 찾을 내용
공개 TRM은 특정 코어의 programmer's model과 implementation-defined behavior를 설명한다. Arm의 문서 안내에 따르면 TRM은 아키텍처 문서의 내용을 반복하지 않으며, integration manual은 별도 권한이 필요한 경우가 있다.
| 코어 | 문서 ID / 공식 링크 | 주요 용도 |
|---|---|---|
| Cortex-A510 | Core TRM 101604 | Armv9 efficiency core의 cache, PMU, debug, power와 구현 정의 레지스터 확인. |
| Cortex-A720 | Core TRM 102530 | Armv9.2-A premium efficient core의 memory system, PMU와 control register 확인. |
| Neoverse N2 | Core TRM 102099 | Armv9 infrastructure core의 cache topology, PMU event와 server 구현 세부 확인. |
| Cortex-A725 / Neoverse V3 | A725 product · V3 product | 제품의 architecture level과 구현 기능을 먼저 확인하고, 연결된 technical documentation에서 적용 가능한 TRM·errata를 찾는다. |
TRM 안에서 우선 검색할 항목
cache hierarchy / coherency / TLB
PMU events / counters / SPE
IMPLEMENTATION DEFINED system registers
reset / power / clock / debug
feature implementation and limitations
revision history / errata pointer
명령의 일반 의미는 DDI 0602, 시스템 레지스터의 아키텍처 정의는 DDI 0601로 돌아간다. TRM에서는 해당 코어만의 숫자와 선택 사항을 덧붙인다.
문제별로 가장 짧게 찾는 법
| 질문 | 첫 문서 | 다음 확인 |
|---|---|---|
| A64 명령의 encoding과 pseudocode는? | DDI 0602 | 해당 명령이 요구하는 FEAT_*와 trap 조건을 DDI 0487에서 연결한다. |
| 시스템 레지스터 field와 접근 권한은? | DDI 0601 | EL2/EL3 trap, reset value와 feature 의존성을 DDI 0487에서 확인한다. |
| MMU, exception, barrier와 memory ordering은? | DDI 0487 | Linux의 page-table·barrier 구현과 실제 CPU erratum을 대조한다. |
| L1/L2 cache, PMU event, IMP_* register는? | Core TRM | 코어 revision과 errata가 실제 SoC에 맞는지 확인한다. |
| GIC, SMMU, MMIO, boot firmware 연결은? | Component / SoC docs | Device Tree 또는 ACPI, firmware interface와 board manual을 확인한다. |
| 현재 Linux에서 이 기능을 쓸 수 있는가? | HWCAP / kernel ABI | ID register, kernel config, command line과 userspace opt-in 조건까지 확인한다. |
Linux 6.18.37 문서로 연결하기
Architecture manual은 hardware contract이고, 아래 Linux 문서는 kernel이 그 기능을 userspace ABI와 task state, virtualization interface로 어떻게 노출하는지 설명한다.
ARM64 Linux 문서
부팅, ABI, CPU feature, vector와 security 문서의 전체 목차.
SVEScalable Vector Extension
HWCAP, vector length, signal frame와 prctl() ABI.
Scalable Matrix Extension
streaming mode, ZA/ZT state와 userspace ABI.
MTEMemory Tagging Extension
tagged address ABI와 synchronous/asynchronous fault mode.
PACPointer Authentication
keys, HWCAP과 userspace·virtualization 노출.
CCAArm CCA support
Realm, RMM과 Linux/KVM 경계.
GCSGuarded Control Stack
userspace enablement와 control-flow 보호 ABI.
FeatureCPU feature registers
kernel이 이질적인 CPU의 ID register를 userspace에 안전하게 보이는 방식.
Kernel internalsSVE/SME context switch
scalable state의 소유권, 저장·복원과 signal frame을 세 architecture로 비교.
실제 장비에서 마지막으로 확인한다
제품명이 ARMv9라고 해서 모든 ARMv9 feature가 활성화되는 것은 아니다. hardware 구현, firmware 설정, kernel 지원과 userspace opt-in이 모두 맞아야 한다.
lscpu와/proc/cpuinfo로 CPU model, architecture와 kernel이 공개한 flag를 기록한다.- 프로그램에서는
getauxval(AT_HWCAP)과AT_HWCAP2를 사용한다. userspace가 ID register를 직접 읽을 수 있다고 가정하지 않는다. dmesg에서 CPU feature, erratum workaround, SVE/SME/MTE/CCA 초기화와 비활성화 이유를 확인한다./sys/devices/system/cpu에서 online CPU와 topology를 확인한다. big.LITTLE 시스템은 CPU마다 microarchitecture가 다를 수 있다.- PMU는
perf list와 실제 event 동작을 확인한 뒤 core TRM의 event 번호와 의미를 대조한다. - 실물 장비가 없으면 Arm Fixed Virtual Platforms의 ARMv9 모델로 firmware와 OS enablement를 먼저 검증한다.
Linux가 주로 해석하는 architecture ID register
ID_AA64PFR0_EL1 / ID_AA64PFR1_EL1
ID_AA64ISAR0_EL1 / ID_AA64ISAR1_EL1 / ID_AA64ISAR2_EL1
ID_AA64MMFR0_EL1 / ID_AA64MMFR1_EL1 / ID_AA64MMFR2_EL1
ID_AA64ZFR0_EL1
ID_AA64SMFR0_EL1
kernel은 여러 CPU의 값을 정규화하고 안전한 userspace ABI로 공개한다. application은
HWCAP과 prctl() 같은 Linux ABI를 우선 사용해야 한다.
Arm 공식 자료
- DDI 0487Arm Architecture Reference Manual for A-profile architecture
- DDI 0601Arm A-profile System Registers
- DDI 0602Arm A-profile A64 Instruction Set Architecture
- DDI 0608Armv9-A Architecture Reference Manual supplement (retired)
- GuideIntroducing the Arm architecture
- Armv8.xUnderstanding the Armv8.x extensions
- Armv9-AArmv9-A architecture overview
- SVE2Introduction to SVE2
- SMEScalable Matrix Extension for Armv9-A
- MTEProviding protection for complex software
- CCA / RMMRealm Management Monitor Architecture
- Armv9.7-AArm A-profile architecture developments 2025
- FVPFixed Virtual Platforms
2026-08-07 KST에 Arm 공식 공개 페이지를 확인했다. /latest/ 링크는 Arm이 새 문서 issue를
게시하면 가리키는 revision이 바뀔 수 있으므로, 설계 검토와 erratum 판단 때는 열어 본 issue와 날짜를 함께 기록한다.