다음과 같은 애플리케이션을 시작할 수 있는 스크립트(.sh)가 있습니다.
#!/bin/sh
./application1 configuration1.cfg param1 param2 param3 &
sleep 2
./application2 configuration2.cfg param1 param2 param3 &
sleep 2
등
프로세스를 시작할 때 CPU 선호도를 할당하는 방법이 있습니까?
나중에는 정말 하기 싫었어요. C++를 통해 프로그래밍 방식으로 이 작업을 수행할 수 있지만 쉘이 가장 좋은 방법인 것 같습니다.
그렇다면 부팅한 후 실제로 해당 CPU/코어에 고정되어 있는지 어떻게 확인할 수 있나요?
답변1
유틸리티 프로그램이 있는데,taskset
util-linux의 일부인 는 이러한 목적을 위한 것입니다. 예를 들어:
taskset -c 0-15 script
실행되고 script
ID가 0~15인 CPU만 사용하도록 제한됩니다.
스크립트가 실제로 올바른 CPU에서 실행되도록 제한되어 있는지 확인하려면 파일을 보면 됩니다 . 파일 에는 (비트맵, CPU 0이 허용되는 경우 최하위 비트가 설정됨) 및 (CPU ID 목록) /proc/<pid>/status
이라는 항목이 포함되어 있습니다. ).Cpus_allowed
Cpus_allowed_list
답변2
나 자신도 "학습 경험"을 하고 있지만 이것이 관련이 있을 수 있습니다.
특정 CPU의 백그라운드에서 bash 스크립트를 실행하려면 다음을 시도하십시오.
taskset -c 1 ./myScript &
myScript에 다음 줄을 포함합니다.
echo MyScript: $$\($BASHPID\) taskset -cp $BASHPID
$BASHPID는 나에게 새로운 것입니다. "현재 Bash 프로세스의 프로세스 ID입니다. 어떤 경우에는 $$와 다를 수 있습니다."
개인적으로 저는 특정 CPU의 백그라운드에서 bash 기능을 실행하는 데 어려움을 겪고 있습니다.
taskset -c 1 ./myFunction &
...제공: 작업 세트: myFunction을 실행할 수 없습니다: 해당 파일이나 디렉터리가 없습니다
몇 번의 잘못된 시작 후에
(taskset -cp 1 $BASHPID;myFunction)&
...유망해 보이네요.