갑작스러운 종료를 실행 중인 프로세스의 CPU 코어 ID를 가져옵니다.

갑작스러운 종료를 실행 중인 프로세스의 CPU 코어 ID를 가져옵니다.

Linux의 멀티 코어 프로세서에서는ps,top유사한 도구를 사용하면 특정 프로세스가 실행 중인 CPU 논리 코어 ID를 표시할 수 있습니다. 특정 시간 동안 프로세스가 실행된 경우 프로세스 목록에서 쉽게 식별할 수 있습니다.

RDPID대신 CPU 어셈블리(명령)에서 감지된 논리 코어 수 와 함께 "hello world"를 인쇄하는 독립 실행형 프로그램이 있습니다 .

$ ./hello_world
hello world
1
$

즉시 종료됩니다. 이 숫자를 제공된 또는 유사한 숫자와 ps비교 하고 싶습니다 top. 그렇다면 이 경우 동일한 정보(CPU 논리 코어 ID)를 어떻게 얻을 수 있습니까? 프로세스가 실행되는 동안 프로세스 정보를 얻는 방법은 무엇입니까?

답변1

프로세스에 의한 코어 ID 할당은 일시적이며(특별히 잠겨 있지 않은 경우) 도구는 일시적인 값만 표시할 수 있습니다.

스레드는 언제든지 다른 코어에서 다시 예약될 수 있습니다(보통 시스템 호출 중 또는 시간 분할을 초과하는 경우). 다중 스레드 프로세스는 여러 코어에서 동시에 실행될 수 있습니다.

안정성을 유지하기 위해 일부 최적화(예: 캐싱 개선)가 있을 수 있지만 신뢰할 수는 없습니다.

게다가 echo이는 내장된 쉘입니다. 즉, 기존 쉘 프로세스 내에서 "실행"됩니다.

답변2

Linux 시스템 호출이 있습니다.getcpu, 시스템 호출을 할 때 스레드가 예약된 CPU를 반환합니다.

해당 매뉴얼 페이지의 설명을 읽고 Paul의 말이 얼마나 옳은지 알아보세요. 시스템 호출을 한 후 돌아올 때 다른 CPU 코어에 예약될 가능성이 높습니다. 따라서 getcpu는 과거 특정 시점의 스레드 CPU 코어에 대해서만 보장된 명령문을 작성합니다. 지금은 아니야.

간단히 말하면 다음과 같습니다.

프로세스가 실행되는 동안 프로세스 정보를 얻는 방법은 무엇입니까?

스레드가 실행 중인 CPU 코어를 가져오는 데 사용할 수 있지만 getcpu즉시 사용되지 않게 됩니다. 코어 할당은 정적이지 않습니다.

관련 정보