отзовитесь эхом для регистрации работ только с sudo su

Я использую макетную плату 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 из сценария в пользователе ценился бы терминал.

1
задан 11 July 2015 в 03:45

3 ответа

Помещение su наверху сценария и затем выполнения команд обычно будет работать просто великолепно. Причина, которую необходимо использовать sudo su вместо всего sudo, состоит в том, потому что sudo только работает над основной программой, перенаправление (>) выполняется без полномочий пользователя root.

1
ответ дан 7 December 2019 в 16:14

Причина 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 часть будет находиться под Вашей учетной записью. Я не уверен, почему это не работало в Вашем случае.

0
ответ дан 7 December 2019 в 16:14

Ха. Это странно.

Это должно работать:

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

0
ответ дан 7 December 2019 в 16:14

Другие вопросы по тегам:

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