2012-08-30 2 views
4

리눅스 커널이 TLB 미스를 처리하는 방법을 이해하려고합니다. 특히, 페이지 테이블 워크가 mm/memory.cfollow_page에서 발생하지만 TLB 미스가 발생할 때 follow_page가 어떻게 호출되는지 알고 있습니다. follow_page의 반환 값 (struct page)은 어떻게 하드웨어로 전달됩니까? 누군가 TLB 미스 처리를위한 콜 그래프를 보여줄 수 있습니까? TLB 미스 예외가 발생했을 때 하드웨어에 의해 follow_page이 호출 될 때까지?리눅스 커널에서 TLB 미스를 처리하기위한 콜 그래프

커널 코드 http://lxr.linux.no/linux+v3.4.4/+search=follow_page에서 follow_page을 검색했지만 결과가별로 도움이되지 않는 것 같습니다. 하드웨어를 x86_64라고 말하면됩니다.

+0

대부분의 x86 아키텍처에서 하드웨어는 TLB 미스가 발생할 때 페이지 보행을합니다. 'mm/memory.c'에서의 소프트웨어 페이지 워킹 코드'follow_page'는 TLB 미스 중에 호출되지 않습니다. 그래서 내 이해에 따라, 리눅스 커널에서 TLB 미스를 처리하기위한 콜 그래프가 없다. – Bhushan

+0

답변으로이 의견을 제출해야합니다. – GargantuChet

+0

@ GargantuChet 감사합니다. 나는 대답으로 나의 것을 게시했다. – Bhushan

답변

4

대부분의 x86 아키텍처에서 하드웨어는 TLB 미스가 발생할 때 페이지 워크를 수행한다는 것을 알게되었습니다. mm/memory.c에있는 소프트웨어 페이지 보행 코드 follow_page은 TLB 누락 중 호출되지 않습니다. 그래서 내 이해에 따라, 리눅스 커널에서 TLB 미스를 처리하기위한 콜 그래프가 없다.

0

80386 이후 Intel 프로세서의 MMU에는 변환 참조 버퍼 채우기에 대한 하드웨어 해결 방법이 있습니다. 이것이이 아키텍처의 페이지 테이블이 왜 엄격한 구조를 갖는지 설명합니다. 이 아키텍처에는 페이지 테이블을 걸어가는 곳 (follow_page)이 필요하지만 여러 가지가 있습니다. handle_mm_fault에 있지만 일반적으로 더 구체적인 경우를 예상하고 대부분의 테스트를 중단 할 수도 있습니다.

관련 문제