본문 바로가기

Linux is..../TIP

kernel: mtrr: type mismatch for e0000000,4000000 old: uncachable new: write-combining

지난회사를 퇴사한지 어언 반년이 지났건만 아직도 연계되어서 오는 연락들....

쩝....뭐 개인적으로야 기분이 썩 나쁘지않다만서도 아직도 굴레를 벗어나지 못한 향수를 느끼는걸 보면 뭐랄까? 뭐라 설명해야하지 ㅎ


아무튼 한두건정도 연달아 문의한 내용에 대해서 포스팅하려한다.


환경

RedHat Enterprise Linux 5



문제

/var/log/messages 에러메시지중, 간헐적으로 kernel: mtrr: type mismatch for e0000000,4000000 old: uncachable new: write-combining 메시지가 남겨지는 이유?



근본원인

먼저 접근방법에 대해 논의전, MTRRs(Memory Type Range Registers)에 대해 알아야 한다. 간략하게 설명하면 MTRR을 지원하는 프로세스에게 메모리 영역에 대한 접근방법을 통제할 수 있도록 하는 기능으로 프로세서 모델에 따라 지원여부 및 방법이 다르다고 볼수 있다.



다음과 같은 접근 방법을 이용할 수 있습니다.

     * uncached

     * write-through

     * write-combining

     * write-protect

     * write-back



이 중 write-combining 모드의 경우, 말 그대로 여러 write transfers를 묶어 하나의 큰 transfer를 만들수 있도록 하여 성능을 향상시킬 수 있는데, graphic card등에서 이용된다.


MTRR 영역은 하드웨어서 제공하는 제한적인 리소스이다. X 서버는 이 MTRR을 framebuffer로 사용할수 있는데, 만약 MTRR 영역을 원하는대로 이용할 수 없을 경우 다음과 같은 경고가 출력될 수 있다.


Nov 14 23:31:52 LGEAFAP01 kernel: mtrr: type mismatch for e0000000,4000000 old: uncachable new: write-combining

Nov 14 23:32:01 LGEAFAP01 kernel: mtrr: type mismatch for e0000000,4000000 old: uncachable new: write-combining

Nov 14 23:32:10 LGEAFAP01 kernel: mtrr: type mismatch for e0000000,4000000 old: uncachable new: write-combining


보통은 무시하고 넘어갈 수 있으나, 일부의 경우 X 서버가 죽는등의 문제가 발생하고 있다.


최근 메모리를 증설하시면서 MTRR 영역에 변동이 있었던 것으로 생각된다. 

이는 하드웨어적인 제한이므로 소프트웨어에서 처리할 수 있는 방법은 없다. 다음은 시도해볼 수 있는 workaround 이다.


Workaround

1. BIOS에서 Video Memory 용량을 변경

2. BIOS에서 "MTRR Mapping" 설정을 지원할 경우 이를 변경