Установить сродство CPU для конкретной программы?

Обработайте (остальные) аргументы с помощью цикла и сдвига . Для аргументов типа KEY = VALUE , что-то вроде этого (в bash):

function foo {
    shift      # handle the first "fixed" arg  
    while [ -n "$1" ] ; do
        key=${1%%=*}
        val=${1#*=}
        echo "key: $key value: $val"
        shift   
    done    
}              
foo first MYDATA=2 OTHERDATA=false

Или вы можете использовать getopts (встроенная команда bash) для синтаксического анализа -x флаги стиля:

function bar {
    OPTIND=3   # skip first two args
    local opt
    while getopts "ab:" opt; do
        if [ "$opt" = "a" ] ; then
            echo flag -a encountered
        elif [ "$opt" = "b" ] ; then
            echo flag -b with arg $OPTARG
        fi
    done
}

bar fixed args -a -b foo
3
05.08.2015, 02:12
1 ответ

У меня был один -многопоточный процесс, который я хотел запустить исключительно на указанном ядре. Он выполнял кодирование видео -, которое интенсивно использовало ЦП -, поэтому не хотело, чтобы другие процессы -нарезали циклы ядра, пока это происходило. Я добился этого, ограничив ОС ядрами 0, 1 и 2 на (4 )ядрах Pi. Конечным результатом было то, что ядро ​​​​3 теперь не использовалось, и когданабор задачбыл выполнен с закреплением «движения» к нему, «движение» имело исключительное использование ядра. Это проверено и работает удовольствие.

Сценарий, который я написал для автоматизации CPU Affinity как службы SystemD дляОДИНОЧНЫХ -ПОТОЧНЫХпроцессов, предлагается ниже и может быть изменен в соответствии с вашими собственными целями. После того, как вы закончите, просто вставьте его в файл, chmod 700, и все готово. Надеюсь, это избавит вас от решения той же проблемы, которую мне пришлось решать -Терренс Хулахан

#!/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
1
27.01.2020, 21:27

Теги

Похожие вопросы