본문 바로가기
카테고리 없음

ARMv8에서 Virtual address를 통해 cache flush 시키기3

by HaveaNiceDay! 2020. 3. 25.

2편에서 분석한 결과 해당 어셈블리를 그대로 쓰면 될 것이라고 판단했다.

 

먼저 개인적인 호기심으로 현재 내 시스템에서 clidr_el1, ccsid_el1(level1), ccsid_el1(level2)가 궁금해서 asm 코딩을 통해서 뽑아보기로 하였다.

필자의 실험 환경은 xilnx의 ZCU102보드이며, 해당 보드는 ARM cortex-A53 프로세서를 사용한다.

cortex-A53은 16-way의 1MB L2 캐시를 가지고 있다고 스펙에 적혀있다[1]. 과연 진짜 그럴까?

출력: clidr: 0xa200023, ccsid_l1: 0x700fe01a, ccsid_l2: 0x707fe07a

 

1. CLIDR_EL1

종류 설명
ICB 000(0) 비공개
LoUU 001(1) 2레벨부터 unification cache이라는 소리
LoC 010(2) Consistency를 맞추기 위해서 3레벨(main memory)까지 데이터를 내려야된다
LoUIS 001(1) 2레벨부터 unification cache이라는 소리
Ctype2 100(4) Instruction, Data 통합 캐시(l2)
Ctype1 011(3) Instruction, Data 분리 캐시(l1)

2. CCSID_EL1

 

2.1 level1(0x700fe01a)

종류 설명
WT 0  
WB 1 Support write-back
RA 1 Support Read-allocation
WA 1 Support Write-allocation
NumSets-1 000_0000_0111_1111(127) 128 set
Associativity-1 00_0000_0011(3) 4 associativity
LineSize(word log2)-2 010(2) Line = 16word = 64byte

총 용량 = 128*4*64 = 32KB

 

2.2 level2(0x707fe07a)

종류 설명
WT 0  
WB 1 Support write-back
RA 1 Support Read-allocation
WA 1 Support Write-allocation
NumSets-1 000_0011_1111_1111(1023) 1024 set
Associativity-1 00_0000_1111(15) 16 associativity
LineSize(word log2)-2 010(2) Line = 16word = 64byte

총 용량 = 1024*16*64 = 1MB

 

3. SCTLR_EL1(0x34d5d91d)

시스템의 권환등의 컨트롤을 하는 레지스터이다.

 

4. CPUACTLR_EL1(0x90ca000)

 

ctr_el0(0x84448004)


참조

[1]https://www.xilinx.com/support/documentation/data_sheets/ds891-zynq-ultrascale-plus-overview.pdf

댓글