Я использую макетную плату Jetson TK1 от NVIDIA, которая имеет Ubuntu 14.04 на ней. Это - система ARM с 4 ядрами и по умолчанию, 3 из них "в режиме офлайн" -
ubuntu@tegra-ubuntu ~ $ lscpu
Architecture: armv7l
Byte Order: Little Endian
CPU(s): 4
On-line CPU(s) list: 0
Off-line CPU(s) list: 1-3
Thread(s) per core: 1
Core(s) per socket: 3
Socket(s): 1
В то время как они, как предполагается, автоматически просыпаются, когда планировщик обнаруживает достаточно загрузки, они не делают (по крайней мере, для нашей рабочей нагрузки). Обходное решение должно записать "1" в местоположение в/sys -
/sys/devices/system/cpu/cpu1/online
В документации говорится для следования за этими командами в порядке -
sudo su
echo 1 > /sys/devices/system/cpu/cpu1/online
и повторитесь для CPU 2 и 3. Это работает -
ubuntu@tegra-ubuntu ~ $ sudo su
[sudo] password for ubuntu:
root@tegra-ubuntu:/home/ubuntu# echo 1 > /sys/devices/system/cpu/cpu1/online
root@tegra-ubuntu:/home/ubuntu# lscpu
Architecture: armv7l
Byte Order: Little Endian
CPU(s): 4
On-line CPU(s) list: 0,1
Off-line CPU(s) list: 2,3
Thread(s) per core: 1
Core(s) per socket: 3
Socket(s): 1
root@tegra-ubuntu:/home/ubuntu#
Я не хочу использовать sudo su
, лично, потому что это повреждает мои глаза, но главным образом потому что нам нужен сценарий, который может разбудить все центральные процессоры и затем выполнить команду для запуска нашей рабочей нагрузки. Идеально, я вставил его /etc/rc.local
. Это не работает. Может быть ядро, выключает центральные процессоры после того, как rc.local выполняется при начальной загрузке?
В любом случае вот мой сценарий -
#!/bin/bash
sudo bash -c "echo '1' > /sys/devices/system/cpu/cpu1/online"
sudo bash -c "echo '1' > /sys/devices/system/cpu/cpu2/online"
sudo bash -c "echo '1' > /sys/devices/system/cpu/cpu3/online"
<some command>
Проблема, <some command>
выполнения и строки эха выше ничего не дают на stdout. Однако lscpu
шоу только 1 активный ЦП. Вставка этих строк в терминал непосредственно не работает. Это не было озадачивающей частью для меня. Я предположил, что испортил что-то. Вот то, что является озадачивающим. Выполнение sudo su
сопровождаемый echo
управляйте работами, как я сказал ранее. Теперь, выходя из корня и выполнения
sudo bash -c "echo '1' > /sys/devices/system/cpu/cpu2/online"
sudo bash -c "echo '1' > /sys/devices/system/cpu/cpu3/online"
в моей пользовательской оболочке (пользователь является sudoer), работы. Таким образом, если я не делаю sudo su
, 1 никогда не отражается ни для одного из центральных процессоров. Но повторение после sudo su
поскольку один ЦП позволяет мне повторить другие вне корневой оболочки.
Наконец, tee
используемый как так не работает ни один -
echo 1 | sudo tee /sys/devices/system/cpu/cpu1/online
Любая справка относительно того, почему это происходит и как я мог использовать sudo bash -c
из сценария в пользователе ценился бы терминал.
Помещение su
наверху сценария и затем выполнения команд обычно будет работать просто великолепно. Причина, которую необходимо использовать sudo su
вместо всего sudo
, состоит в том, потому что sudo только работает над основной программой, перенаправление (>
) выполняется без полномочий пользователя root.
Причина sudo echo 1 > /sys/devices/system/cpu/cpu0/online
не работает, то, потому что sudo
часть применяется только к основной команде (echo 1
); это не относится к перенаправлению (> /sys/devices/system/cpu/cpu0/online
), и таким образом, writing-to-the-file часть сделана под Вашей учетной записью пользователя.
Используя что-то как echo 1 | sudo tee /sys/devices/system/cpu/cpu0/online
должен работать, поскольку часть записи будет сделана под sudo
, в то время как echo
часть будет находиться под Вашей учетной записью. Я не уверен, почему это не работало в Вашем случае.
Ха. Это странно.
Это должно работать:
cat | sudo bash << "EOF"
echo 1 > /sys/devices/system/cpu/cpu1/online
echo 1 > /sys/devices/system/cpu/cpu2/online
echo 1 > /sys/devices/system/cpu/cpu3/online
EOF
, Возможно, другой материал работал на Вас, но потому что Вы не отключили масштабирующийся регулятор, он возвратил ядра прочь, прежде чем Вы начали использовать их?
Согласно http://elinux.org/Jetson/Performance Вы должны также echo 0 > /sys/devices/system/cpu/cpuquiet/tegra_cpuquiet/enable