
때로는 데스크톱 컴퓨터를 켠 후 4개 코어 중 하나가 무작위로 100%에 도달하고 컴퓨터가 "정지"되는 경우가 있습니다.
글쎄, htop
원격 연결에서 실행해 보니 모든 프로세스가 여전히 작동하는 것을 볼 수 있습니다.
예를 들어, YouTube 동영상에서 오디오가 계속 재생되지만 화면이 완전히 멈추고 마우스의 위치도 바뀌지 않는다는 흥미로운 일이 발생합니다.
htop 목록의 맨 위인 이번에는 kworker에서 CPU 사용량이 100%에 도달했지만 다른 경우에는 프로세스가 100%에 도달하지 않았습니다. CPU 1(코어 인덱스 0)은 100%입니다. 따라서 코어 0은 약 10% 활용되고 나머지 막대는 모두 빨간색으로 100% 채워집니다. 빨간색 채우기 표시등이 IO라고 가정합니다. 잠깐만요?
그러면 부하 평균은 계속 증가합니다.
그럼 일종의 IO와 관련이 있는 것 같아요. 비디오 IO인 것 같은데요? 이를 테스트하려면 어떤 명령을 사용할 수 있나요?
이 경우에는 새 원격 연결을 생성할 수도 없고, 허용되지 않으며 시도가 중단됩니다. 따라서 루프에서 이러한 명령을 시작하고 다음 정지가 발생할 때 출력을 모니터링하겠습니다.
답변1
예, 아마도 비디오 io일 것입니다. 100%로 열린 kworker가 있기 때문에 인터럽트 오버플로도 발생합니다.
Linux에서의 인터럽트 처리는 두 단계로 나뉩니다. 1) 직접 인터럽트 핸들러는 모든 인터럽트 데이터를 임시 큐로 수집합니다. 2) 작업자 스레드는 인터럽트 핸들러에서 작동하지 않고 별도의 커널 스레드로 작동합니다. 본질적으로 프로세스이지만 사용자 공간이 없으며 커널 내에서 완전히 실행됩니다.
그 이유는 인터럽트 핸들러가 인터럽트하기 때문입니다. 잠금 등을 무시하면 언제든지 발생할 수 있습니다. 따라서 복잡한 데이터 구조 처리를 가능한 한 적게 수행해야 합니다. 문제는 사용자 공간 신호 처리기에서 몇 가지 함수만 호출할 수 있다는 점에서 유사합니다. 따라서 인터럽트 데이터를 큐로 수집한 다음 작업자 스레드는 이미 커널 공간 외부에 있는 이러한 큐를 처리합니다.
이제 문제는 비디오 칩이 너무 많이 방해하지 않는다는 것입니다. 비디오 드라이버의 작업은 단지 vga 설정을 지정하고 화면에 매핑된 버퍼를 생성하는 것입니다. 너무 많이 귀찮게 해서는 안 되지만 그럼에도 불구하고 그런 일이 많이 발생합니다.
YouTube 오디오는 다중 스레드이고 해당 오디오 처리 스레드는 비디오 플레이어가 중단된 사실조차 알지 못하기 때문에 멈추지 않습니다.
당신의 dmesg에는 무엇이 있나요?
vga 하드웨어나 드라이버에 문제가 있는 것 같습니다.