리눅스 드라이버, UP 환경에선 정상작동, SMP 환경에서는 패닉
글쓴이: jenix / 작성시간: 목, 2007/02/15 - 6:58오후
안녕하세요..
UP 환경에선 정상작동하던 커널 드라이버가 있습니다.
근데 이 드라이버가 SMP 환경에서는 중간에 패닉을 일으키네요.
하드웨어로 데이터를 암호화할 수 있는 암호화 가속 디바이스인데요,
SMP 환경에서 갑자기 데이터 량이 확 증가하면 패닉을 일으킵니다..
커널 패닉 메시지에서 call trace 어드레스를 보면 메모리 할당/ 해제 하다가 죽는데,,
이게 UP 환경에선 전혀 그런 일이 없거든요;; ㅠㅠ
어디를 집중적으로 봐야할지 막막합니다..
직접 제작한 드라이버는 아니고, 벤더로 부터 받은 드라이버인데.. 지원이 안되서 --; 직접 고쳐야할 것 같네요.
드라이버구조는 케릭터 디바이스를 사용하고 커널 스레드를 이용하여 폴링 방식으로 이루어져 있습니다.
pci 인터페이스구요.
커널 옵션에서 irq cpu 밸런싱 맞춰주는 옵션을 켰는데, cat /proc/interrupt 시에 이쪽저쪽 cpu에 irq 가 분산되길래
혹시 이거때문일까(-ㅅ-)하고 이 옵션을 끄고 테스트하니 한쪽 cpu 에서 몰려서 irq 가 발생하는데도, 패닉이 역시 동일하게 나타나구요.
커널은 2.4.26 기반입니다. 특별히 커널에 대해 수정을 가한 사항은 없구요.
커널에서 SMP 옵션을 끄고 UP 환경에서 드라이버를 사용하면 정말 아무 문제가 없습니다.
CPU 가 2개만 되면 이러네요.
경험있으신 고수님들, 어느 부분을 중점적으로 살펴봐야할지 조언좀 부탁드릴게요 ㅠ_ㅠ
Forums:
driver가 SMP-safe하게
driver가 SMP-safe하게 개발되었는지
확인을 해보세요~
/***************************************
Being the one is just like being in love.
***************************************/
앗.. 질문이 그래서..
앗.. 질문이 그래서.. 드라이버가 smp-safe 한거 같지가 않아서
소스코드를 살펴볼때 어디를 집중적으로 살펴봐야할지 질문을 한건데 ^^;;
개인적으로 드는 생각은;; 의심가는 부분에 전부 락을 걸어버린다 -_-;; 인데..
이렇게 하는게 맞는 방향인지..
---------------------------------------------------------------------------
http://jinhyung.org -- 방문해 보세요!! Jenix 의 블로그입니다! :D
---------------------------------------------------------------------------
http://jinhyung.org -- 방문해 보세요!! Jenix 의 블로그입니다! :D
스케줄은 안 되는
스케줄은 안 되는 코드에서 (UP에서 정상 동작한다니) 동시에 억세스되면 안 된다 싶은 데이터 등 race condition이 발생한다 싶은 곳을 찾아야죠. "그게 뭐냐?"고 물으신다면.. 정답이 없고 어떻게 동작하는 지 이해하지 않고는 특별한 왕도는 없네요.
시간이 부족하다면 다 스핀락을 거는 것도 방법이죠.
----
익명이나 오래전 글에 리플은 무조건 -1
제가 아는 분인가...?
제가 아는 분이면 고생이 많으시군요... ^^;;
句日新, 日新 日新 又日新.
句日新, 日新 日新 又日新.
제가 아는 분인가...?
제가 아는 분이면 고생이 많으시군요... ^^;;
句日新, 日新 日新 又日新.
句日新, 日新 日新 又日新.
댓글 달기