Linux에서 사용자가 사용한 총 프로세서 수를 어떻게 알 수 있습니까?

Linux에서 사용자가 사용한 총 프로세서 수를 어떻게 알 수 있습니까?

Linux에서 사용자가 사용한 총 프로세서 수를 어떻게 알 수 있습니까? 예: 사용자 "X"는 총 3개의 프로세서를 사용하는 2개 이상의 프로세스를 실행합니다. 어떻게 알 수 있나요? 불가능하다면 사용자가 몇 개의 프로세서를 사용할 수 있는지 어떻게 알 수 있습니까? 예: 사용자 "X"가 2개의 프로세서(8개 가능)로 세션을 열었습니다.

사용자 이름(예: "root")을 가져오고 스칼라 번호를 반환하는 Perl 함수를 작성해야 합니다. 가능한 것 중 하나는 다음과 같습니다. 1. 사용된 총 사용자 프로세서(예: 8에서 2) 2. 사용된 총 사용자 코어 3. 사용 가능한 프로세서 user 제 경우에는 사용자가 며칠 동안 실행되는 하나의 큰 프로세스(어쩌면 그 이상이지만 많지는 않음)를 실행하며 (특수 사용자의) 프로세스가 시스템을 로드하는 방법을 알고 싶습니다.... 왜냐하면 그가 많은 리소스를 사용한다면, 그를 막아야겠어...

답변1

특정 프로그램이 어떤 코어를 사용했는지 알 수 없습니다. CPU는 많은 요소를 기반으로 스레드를 보이지 않게 자동으로 코어에 할당하고, 처리 시간을 할당하는 방법에 시간 분할이 있더라도 모든 것이 동기식으로 실행되는 것처럼 보이도록 약간의 작업을 수행합니다. 각 스레드에.

결론은 세션을 코어 세트에 매핑할 수 없다는 것입니다. 하나 이상의 코어에서 스레드를 실행하는 프로그램 사용에 세션을 매핑할 수 있지만 이는 엄격하게 모든 프로세스의 현재 상태를 기반으로 필요한 경우입니다.

sally에 2개의 코어, bob에 2개의 코어, tom에 4개의 코어를 할당하여 '고갈'시키는 것과는 다릅니다. Sally, Bob 및 Tom의 프로그램은 모두 최대 8개의 코어를 사용할 수 있으며 시스템은 스레드를 처리 시설에 가장 잘 할당하는 방법을 결정합니다.

답변2

당신이 사용할 수있는sched_getaffinity 및 sched_setaffinity사용자 프로세스가 실행할 수 있는 코어가 무엇인지 조회합니다. 그러나 이것이 모든 제품에서 실행된다는 의미는 아닙니다.

프로세스를 시작하여 프로세스가 실행될 수 있는 코어를 제한할 수 있습니다.CPU세트(특정 부분cgroup)

예를 들어 참조이 가이드Red Hat 6에서 cgroup에 프로세스를 추가하는 방법과이 가이드CPU와 메모리를 그룹별(또는 사용자별로) 분할하는 방법을 효과적으로 만드는 방법에 대해 설명합니다.

특정 사용자가 사용하고 있는 CPU%를 얻는 데 관심이 있는 경우 다음 oneliner를 사용할 수 있습니다.

top -b -n 1 -u <username> | awk 'NR>7 { sum += $9; } END { print sum; }'

관련 정보