프로세서 사용량 및 코어 사용량

프로세서 사용량 및 코어 사용량

스레딩과 병렬 처리를 시험해 보고 싶습니다. 내 프로세서에 여러 개의 코어가 있다는 것을 알고 있지만 각 코어에서 무슨 일이 일어나고 있는지 확인하는 방법을 모릅니다. 이 정보에 접근하는 올바른 방법은 무엇입니까?

보다 구체적으로 다음을 계획하고 있습니다. 여러 스레드를 시작하는 작은 프로그램을 작성하는 것을 상상합니다. 이 프로그램은 코어 전체에 분산되어 필요할 때 서로 통신해야 합니다. 어떤 스레드가 실행되고 있는지 관찰하고 싶습니다. 어떤 팁이 있습니까?

저는 이런 종류의 작업을 처음 시도합니다. (문제를 직접적으로 해결하지 못하는 정보에 대해서도 기꺼이 답변해 드리겠습니다.)

최고야, 바트

(구글링을 하면 "cat /proc/cpuinfo"로만 연결되는데, 이는 프로세서가 7개 있다는 것을 알려주는 것 같습니다. 이는 사실이 아니며 이 출력을 읽는 방법을 모른다는 것을 의미합니다.)

답변1

각 코어에는 자체 항목이 있으므로 /proc/cpuinfo여기에는 중복된 정보가 많이 있습니다.

보유한 CPU 및/또는 코어 수를 확인하려면 다음을 수행하세요.

# egrep 'processor|core id|physical id' /proc/cpuinfo
processor   : 0
physical id : 0
core id     : 0
processor   : 1
physical id : 0
core id     : 1

이것은 내 단일 칩 듀얼 코어 컴퓨터에서 실행됩니다. 따라서 번호가 0과 1인 두 개의 코어가 있지만 둘 다 물리적 CPU 0에 속합니다.

기억하세요, 컴퓨터 전문가들은 0부터 세기 시작하는 것을 좋아합니다.

듀얼 CPU, 싱글 코어 시스템의 출력은 다음과 같습니다.

$ egrep 'processor|core id|physical id' /proc/cpuinfo
processor       : 0
processor       : 1

그래서 CPU가 2개인데 코어가 지정되지 않았기 때문에 프로세서 칩당 코어가 하나씩 있는 것으로 알고 있습니다.

더 흥미로운 점이 있습니다.

$ egrep 'processor|core id|physical id' /proc/cpuinfo
processor       : 0
physical id     : 0
core id         : 0
processor       : 1
physical id     : 0
core id         : 1
processor       : 2
physical id     : 1
core id         : 0
processor       : 3
physical id     : 1
core id         : 1

이것이 내 듀얼 CPU 듀얼 코어 시스템입니다. 프로세서 0 또는 1에 각각 코어 0 또는 1로 "프로세서" 0-3이 있습니다.

당신은 이해했습니다.

요약하면 프로세서 0~7이 포함된 듀얼 CPU 쿼드 코어 시스템이 있는 것 같습니다.

답변2

프로세서 수:번호는 0부터 시작하므로 프로세서 1이 있으면 최소한 2개는 있어야 합니다.

스레드에 바인딩스레드는 CPU에 바인딩되지 않습니다(cpulimit 및 co.를 사용하여 트릭을 수행하지 않는 한 - 대부분의 경우 수행해서는 안 됨). 코어를 1000Hz로 구성하고 I/O가 없다고 가정하면 컨텍스트 전환은 초당 1000회 완료됩니다. 이제 2개의 프로세서 설정에는 이 시점에서 약 300개의 스레드가 실행되고 있습니다. 이는 각 프로세스에 6.(6)개의 슬롯이 할당된다는 의미입니다. 각 프로세스가 언제든지 두 개의 코어를 차지한다고 가정하는 것이 안전합니다.

주어진 계단 알고리즘에 따르면 I/O는 이것이 반드시 사실은 아니지만 1초 동안의 각 스레드는 두 개의 코어에 있을 수도 있고 기다리는 동안 실행되지 않을 수도 있습니다(따라서 코어에 의해 제한되지 않습니다).

하이퍼스레딩나는 당신이 하이퍼스레딩 기능을 갖춘 4코어 Intel iX를 갖고 있다고 추측합니다(듀얼 프로세서 시스템을 갖고 있지 않은 경우). 하이퍼스레딩은 별도의 코어를 시뮬레이션하여 작동합니다. 따라서 프로세스가 하나의 코어에서 I/O를 기다리고 있는 경우 다른 코어 실행으로 전환할 수 있으며 이는 물론 상황을 더욱 복잡하게 만듭니다.

관련 정보