특정 프로그램에 대한 CPU 선호도를 설정하시겠습니까?

특정 프로그램에 대한 CPU 선호도를 설정하시겠습니까?

특정 코어 또는 다중 코어(예: 코어 1)에서 항상 실행되도록 특정 프로그램(예: gzip)의 CPU 선호도를 설정하려면 어떻게 해야 합니까?

작업 세트에 대해 읽었는데 실제로 프로그램을 사용하고 프로세스를 생성하기 전에 사용할 수 있습니까?

답변1

실행 파일의 모든 호출에 대해 선호도를 설정할 수는 없습니다. 선호도는 커널에 의해 관리되며 상위 프로세스에서 하위 프로세스로 상속됩니다. 실행 파일을 실행하는 동안 프로세스의 선호도를 변경하는 메커니즘은 없습니다.

gzip모든 호출을 CPU 1에서 실행 하려면 에서 gzip실제 스크립트 앞에 호출되는 래퍼 스크립트를 배치합니다 . PATH예를 들면 다음과 같습니다 .~/bin/gzip

#!/bin/sh
exec taskset 1 /bin/gzip "$@"

그러나 나는 이것이 완전히 쓸모없다고 생각한다. 프로세스의 선호도를 명시적으로 설정하면 속도가 느려지는 경우가 많습니다. 때로는 CPU 집약적인 작업을 특정 프로세서로 제한하고 시스템의 반응성을 높이는 것이 유용할 수 있지만 nice일반적으로 전체적으로 더 나은 성능을 발휘합니다. 그러나 실행 파일에 대한 모든 호출에 대해 무차별적으로 이 작업을 수행하는 것은 다음과 같이 들립니다.XY 문제.

답변2

지정된 코어에서만 실행하려는 단일 스레드 프로세스가 있습니다. 비디오 인코딩(CPU 집약적)을 수행하므로 이 작업이 진행되는 동안 다른 프로세스가 코어 주기를 분할하는 것을 원하지 않습니다. 저는 OS를 (4) 코어 Pi의 코어 0,1, 2로 제한하여 이를 달성했습니다. 최종 결과는 이제 코어 3이 사용되지 않는다는 것입니다.작업 세트그 위에서 'Movement'가 실행되며, 'Motion'은 해당 코어를 독점적으로 사용할 수 있는 권한을 갖습니다. 테스트를 거쳤으며 훌륭하게 작동합니다.

CPU 선호도를 SystemD 서비스로 자동화하기 위해 작성한 스크립트단일 스레드프로세스는 아래에 제공되며 사용자의 목적에 맞게 조정할 수 있습니다. 완료되면 파일에 chmod 700을 붙여넣으면 됩니다. 이것이 제가 해결해야 했던 동일한 문제에 도움이 되기를 바랍니다 - Terrence Houlahan

#!/bin/bash

# Backup system.conf before we modify it with sed:
cp -p /etc/systemd/system.conf /etc/systemd/system.conf.ORIGINAL

# Default allows OS to use ALL cores- we restrict it to only first 3 of 4 cores:
sed -i "s/#CPUAffinity=1 2/CPUAffinity=0 1 2/" /etc/systemd/system.conf

# We pin process motion to remaining core #3:

cat <<'EOF'> /home/pi/scripts/set-cpu-affinity.sh
#!/bin/bash

# Note: the number following cp is the CPU/core number in this case 3
taskset -cp 3 $(pgrep motion|cut -d ' ' -f2)

EOF


chmod 700 /home/pi/scripts/set-cpu-affinity.sh
chown pi:pi /home/pi/scripts/set-cpu-affinity.sh

# Now we configure script to run as a service to make CPU affinity persistent across reboots:
cat <<EOF> /etc/systemd/system/set-cpu-affinity.service
[Unit]
Description=Set CPU Affinity for the Motion process after it starts on boot
Wants=motion.service
After=motion.service

[Service]
User=root
Group=root
Type=oneshot
ExecStart=/home/pi/scripts/set-cpu-affinity.sh

[Install]
WantedBy=multi-user.target

EOF

chmod 644 /etc/systemd/system/set-cpu-affinity.service

systemctl enable set-cpu-affinity.service

chown -R pi:pi /home/pi

관련 정보