본문 바로가기

Programming/ARM

ARM 의 TLB 운용에 대한 간단 정리

ARM 의 TLB 운용에 대해서 읽어본것들을 정리 하였습니다.

내용은 arm 사이트의 있는 내용을 조악하게 번역한 수준입니다.

도움이 될것 같아서 사이트에 올립니다.


각 키워드 중심으로 보시면 됩니다.


set-associative region

lockdown region

MicroTLB

MainTLB

page walk

TLB miss


내용은 ARM coretex A9 기준입니다.


< 내용 정리 >

TLB 에 들어있는 매칭 table 들을 TLB entry 라고 한다.

ARM Main TLB 는 set-associative region 과 lockdown region 이 있다.

       - Invalidate TLB operations 는 set-associative region 에 이는 TLB entry 들만 무효화 한다.

       - invalidate TLB Single Entry operations" 는 어느 region 에 있던지 상관없이 표적된 virtual address 를 찾아서 무효화 시킨다.

TLB 는 각각 10개의 entry 를 가진 data MicroTLB, instruction Micro TLB 와 MainTLB 로 나뉜다.

MicroTLB 에서 먼저 찾고, miss 가 되면 MainTLB 에서 찾는다. 이것도 miss 나면 TLB miss 라고 부르고, page table 에서 찾는다.(page walk)


< tlb page walk >

http://en.wikipedia.org/wiki/Page_table


MMU는 시스템 page table 동작으로부터의 최근 사용된 mapping 들을 캐쉬에 저장한다.

이것은 TLB 라 부른다. TLB 는 associative(조합된) 캐쉬이다. virtual address 가 phusical address 로 전활될 필요가 있을때 TLB 를 우선적으로 찾아본다.

찾았을때 (TLB hit), physical address 를 리턴하고 메모리를 연속적으로 access 할 수 있다.

그러나 match 가 TLB 에 없을때 (TLB miss), handler 는 전통적으로 mapping 이 존제하는지 알아보기 위해 page table 안에 address mapping 을 찾는다. 이를 page walk 라고 한다.

만약 하나를 찾으면, 그것은 TLB 에 써진다. 그리고 명령을 재시작한다.

그 다음의 전환에서는 TLB hit 를 찾을 것이고 메모리 access 가 일어난다.


http://infocenter.arm.com/help/topic/com.arm.doc.ddi0211k/Chdbjegc.html


< MicroTLB ? >

http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0211k/Chdhhhei.html

page table information 을 위한 첫번째 레벨 캐싱은 10개의 entry들로 이루어진 작은 MicroTLB 이다.

data 와 instruction 각각 사용한다. (해석 : data 용 MicroTLB 와 instruction MicroTLB 가 있다.)


< mainTLB ? >

http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0211k/Chdjafig.html

mainTLB : MicroTLB 로부터 miss 된 cache 를 catch 하는 TLB 구조안의 두번째 layer.

lockable(잠글수 있는) translation entry들을 제공한다.

instruction  과 data MicroTLB 로부터의 TLB miss 는 통합된(instruction  과 data가) Main TLB 에서 처리된다. Main TLB  는 MicroTLB miss 로만 접근가능하다.


MainTLB 의 lockable region 의 entry들은 single entry 단위로 lock 하는것이 가능하다.(c10 lockdown register)


Main TLB 의 기능

       - Main TLB 는 두 element 들로 이루어져 있다.

               = lock 이 가능한 8가지 element들의 fully-associative array(완전히 연관된 배열)

               = cache 안에서 사용되는 것과 유사한 적은 연관성의 Tag RAM 과 Data RAM structure

       - low-associativity region 은 두개의 각각 64 entry의 structure 이다. RAM 사용에 따라 다르다.

               = 4개의 32-bit wide RAM

               = 2개의 64-bit wide RAM

               = 한개의 128-bit wide RAM


< lockdown TLB? >

3.3.22. c10, TLB Lockdown Register

The purpose of the TLB Lockdown Register is to control where hardware page table walks place the TLB entry in either:

the set associative region of the TLB.

the lockdown region of the TLB, and if in the lockdown region, which entry to write.

TLB lockdown register 의 목적은 h/w page table walks에 TLB entry 를 위치시키는 컨트롤을 하기 위함이다. 다음과 같은 경우에..

       - TLB의 associative region(?) 을 set

       - TLB region 의 lockdown, 그리고 lockdown region 에서 entry 를 write 할때,

TLB 구조체의 묘사를 보면, 락다운 리전은 8 entries 들을 담고 있다. 0~7 까지 숫자가 붙어있다.


TLB 락다운 레지스터는

       - CP15 c10 안에 있다.

       - 32bit r/w 레지스터

       - privileged mode 에서만 접근 가능하다.



Figure 3.48. TLB Lockdown Register format




[28:26] Victim

       연속되는 h/w page table walk 가 TLB entry 에 위치한 lockdown 리전의 특별한 entry.

       TLB entry 를 위한 락다운 리전에 정의된 victim 값. 0-7 사이의 값이 허용된다. reset value 0

[0] p

       보호 bit.

       0 = TLB의 the set associative region 안에 TLB entry 를 위치 시킴 (reset value)

       1 = victim bit 에 의해 정의된 TLB 의 lockdown rgion 안에 TLB entry 를 위치시킴

       subsequent hardware page table walks(TLB miss 후 page table 을 찾는 동작)는 TLB entry 를 TLB  의 lockdown region 혹은 associative region 어느쪽에 둘지 결정한다.

       

lockdown region 안의 TLB entry들은 보호된다.

       - "Invalidate TLB operations" : invalidate(무효화) TLB 동작은 단지 TLB 의 보존되지 않은 entry들만 무효화 시킨다. 이것은 그것들이 단지 the set-associative region 의 entry들 만을 무효화 시킴을 의미한다. (해석 : lockdown region 의 TLB entry 는 무효화 시키지 않는다는 의미인것 같다.)

       - "invalidate TLB Single Entry operations" 는 Rd 에 주어진 virtual address 에 일치하는 TLB entry 는 lockdown region 이나 set-associative region 안에 있는지 신경쓰지 않고 무효화 시킨다.

'Programming > ARM' 카테고리의 다른 글

PMU - Performance Monitoring Unit  (0) 2018.05.14
irq 용어  (0) 2018.04.03
눈으로 보는 ARM - ASM 해석  (0) 2010.09.22
compile 된 binary 가 thumb / thumb-2 인지 check 하기  (2) 2010.07.15
Cache - Flush, clean, Invalidate  (0) 2010.06.24