빈번한 kmalloc(GFP_ATOMIC)에 대한 질문
글쓴이: gix / 작성시간: 수, 2021/02/03 - 3:31오후
안녕하세요.
linux kernel device driver를 작성하는데, interrupt handler에서 메모리를 할당한 후 사용합니다.
이때 kmalloc(GFP_ATOMIC)을 사용하는데요.
해당 인터럽트는 부팅 시 10회 ~ 20회 정도 불립니다.
해당 메모리를 계속해서 사용하는데 문제가 있을까요?
개인적으로 우려하는 바는 GFP_ATOMIC이 할당해주는 메모리가 미리 할당해놓은 메모리에서 나눠주는 걸로 알고 있는데,
제 driver 때문에 다른 driver나 system에서 GFP_ATOMIC allocation이 실패하지 않을까 하는 부분입니다.
이것 말고도 주의해야 하는 부분이 있으면 알려주시면 고맙겠습니다.
Forums:
몇 가지 소소한 피드백을 남깁니다
궁금하신 점에 대해 도움이 됐으면 하는 심정으로 몇 가지 소소한 피드백을 남깁니다.
>linux kernel device driver를 작성하는데, interrupt handler에서 메모리를 할당한 후 사용합니다.
>이때 kmalloc(GFP_ATOMIC)을 사용하는데요.
>해당 인터럽트는 부팅 시 10회 ~ 20회 정도 불립니다.
1. 인터럽트 핸들러에서 GFP_ATOMIC 플래그를 적용해 kmalloc() 함수를 호출하신 것은 잘하신 겁니다. GFP_KERNEL 플래그를 적용하시면 안 됩니다.
>해당 메모리를 계속해서 사용하는데 문제가 있을까요?
>개인적으로 우려하는 바는 GFP_ATOMIC이 할당해주는 메모리가 미리 할당해놓은 메모리에서 나눠주는 걸로 알고 있는데,
>제 driver 때문에 다른 driver나 system에서 GFP_ATOMIC allocation이 실패하지 않을까 하는 부분입니다.
>이것 말고도 주의해야 하는 부분이 있으면 알려주시면 고맙겠습니다.
2. kmalloc() 함수는 동적으로 메모리를 할당하는 기능인데요. 메모리를 할당하고 적절한 시점에 해제만 시키면 문제될 게 없습니다. 만약, kmalloc() 함수에서 너무 큰 사이즈의 지속적으로 메모리를 할당하면 문제가 될 수 있습니다.
3. 만약 시스템에 동적 메모리가 고갈되면 OOM Killer가 구동되어 시스템은 심각한 상태에 빠지게 될 것입니다.
4. 혹시 메모리 릭이 염려되면 KMEMLEAK 기능을 사용하셔서 디버깅을 하시면 됩니다.
(개인블로그)
http://rousalome.egloos.com
어떻게 design했느냐에 따라 얘기가 달라지겠죠.
어떻게 design했느냐에 따라 얘기가 달라지겠죠.
일반적인 상황에서만 본다면, 문제가 소지가 없습니다라고 말씀드릴수 없습니다.
본인께서 안정성에 대한 확신이 없다면,
그렇게 사용하지 마세요라고 말씀드리고 싶네요.
댓글 달기