[커널 17차] 26주차

2021.03.01 18:07

주영 조회 수:538

2020년 2월 27일

 

linux version : mainline 5.9

 

init/main.c.  start_kernel();

 

 

parse_early_param() 분석

local_daif_restore() 분석

 - config_arm64_pseudo_nmi 옵션이 비활성화되어 있어 조건문에 들어가지 않는다. (그러나 분석 진행) 

 - daif 레지스터는 모두 1로 설정되어 있다. (f.c 버전)

 - flags의 PSR_A_BIT가 0이면 I도 꺼준다(마스킹 제거)

   flags의 PSR_A_BIT가 1이면 I를 켜준다. (마스킹)

==> daf가 set되면 i를 set 하겠다. (인터럽트 무시)

       daf가 클리어되면 i도 초기화 인터럽트를 ICC_PMR_EL1을 사용하겠다.

 

 - write_sysreg(flags, daif)는 현재 flags 값이 I만 켜져 있는 상황이므로 daif의 I를 제외하고 모두 0으로 설정한다.

 

jump_table_init전 또는 하는 중에 hot pulg 될수 있을까? percpu lock을 지워도 되지 않을까?
의견 : 아무 문제가 없을 것 같다. static key를 건드릴때 cpu lock을 잡는 게 관습인 것 같다. static key consistency를 위해서.
 

저녁 시간

 

이론 분석

 

http://jake.dothome.co.kr/cache4/

 

Cache 기본 동작

 

질문 : (VIPT) 명령(instruction) 캐시에 캐시 컬러링을 사용하지 않는 이유는?

 

같은 물리주소가 여러 캐시라인에 올라간다 - synonym
다른 물리주소를 같은 가상 주소로 본다 - homonym
 

명령 캐시는 read-only이므로 synonym 문제를 해결하지 않아도 된다.

 

명령 캐시는 하드웨어에서 앨리어싱 처리를 해주지 않아도 문제가 없다.
데이터 캐시는 하드웨어 상에서 앨리어싱 처리를 해준다.
 

VIPT는 homonym 문제는 없고 potential synonym 문제가 있을 것이다.

 

캐시 컬러링을으로 potential synonym 문제를 해결할 것이다.

potential synonym에 대해서 virtual index physicall tag 2비트를 겹치게 사용하여 이를 해결한다.

 

여러 문서에서 관련 내용을 찾았으나 ARMv8 대한 문서를 찾지 못함..

 

참고 자료

  • http://course.ece.cmu.edu/~ece447/s15/lib/exe/fetch.php?media=18447_recitation3.pdf
  • https://en.wikipedia.org/wiki/CPU_cache
  • https://community.arm.com/developer/ip-products/processors/f/cortex-a-forum/3608/why-is-the-i-cache-designed-as-vipt-while-the-d-cache-as-pipt
  • https://community.arm.com/developer/ip-products/processors/b/processors-ip-blog/posts/page-colouring-on-armv6-and-a-bit-on-armv7
  • http://www.cse.unsw.edu.au/~cs9242/02/lectures/03-cache/node8.html

 

자료

https://github.com/iamroot17/linux

XE Login