
저는 Ubuntu 14.04가 설치된 NVIDIA의 Jetson TK1 개발 보드를 사용하고 있습니다. 4코어 ARM 시스템이며 기본적으로 그 중 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
스케줄러가 충분한 로드를 감지하면 자동으로 깨어나도록 되어 있지만 (적어도 우리 워크로드의 경우) 그렇지 않습니다. 해결 방법은 /sys 내부 위치에 "1"을 쓰는 것입니다.
/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
주로 모든 CPU를 깨운 다음 명령을 실행하여 작업 부하를 시작할 수 있는 스크립트가 필요하기 때문입니다. 이상적으로는 /etc/rc.local
. 작동하지 않습니다. 부팅 시 rc.local이 실행된 후 커널이 CPU 전원을 끌 수 있습니까?
어쨌든 내 스크립트는 다음과 같습니다.
#!/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
활성 CPU는 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
어떤 CPU에서도 1이 에코되지 않습니다. 그러나 sudo su
하나의 CPU에 대해 에코하면 루트 셸 외부의 다른 CPU에 에코가 가능해집니다.
마지막으로 tee
이렇게 사용해도 작동하지 않습니다.
echo 1 | sudo tee /sys/devices/system/cpu/cpu1/online
sudo bash -c
이런 일이 발생하는 이유와 사용자 터미널의 스크립트 내에서 사용할 수 있는 방법에 대한 도움을 주시면 감사하겠습니다.
답변1
sudo echo 1 > /sys/devices/system/cpu/cpu0/online
동작하지 않는 이유 는 해당 부분이 주 명령어( ) sudo
에만 적용되기 때문입니다. echo 1
리디렉션( > /sys/devices/system/cpu/cpu0/online
)에는 적용되지 않으므로 파일에 쓰기 부분은 사용자 계정에서 수행됩니다.
echo 1 | sudo tee /sys/devices/system/cpu/cpu0/online
쓰기 부분은 아래에서 수행되고 부분은 귀하의 계정 아래에 있으므로 다음과 같은 것을 사용하면 효과 sudo
가 echo
있습니다 . 귀하의 경우에는 왜 작동하지 않았는지 잘 모르겠습니다.
답변2
su
스크립트 맨 위에 놓고 명령을 정상적으로 실행하면 정상적으로 작동합니다. sudo su
just 대신 사용해야 하는 이유 sudo
는 sudo가 메인 프로그램에서만 작동하기 때문에 리디렉션( >
)은 루트 권한 없이 실행되기 때문입니다.
답변3
뭐. 이상 하네.
이것은 작동합니다:
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