젯슨나노 팬 PWM 제어 쉘 스크립트

Sangil Choi·2022년 11월 2일
0

Jetson Nano

목록 보기
1/1

젯슨 나노로 딥러닝 모델을 학습하거나 추론 할 때 온도가 상승해 성능이 저하되는 경우가 있다.
이를 방지하기 위해 팬을 구매했으며 주기적으로 온도를 확인해 팬의 동작 속도를 제어하는 셸 스크립트를 작성했다.
먼저 PWM 동작을 확인한다.

$sudo jetson_clocks
$sudo sh -c 'echo 255 > /sys/devices/pwm-fan/target_pwm'

제어값의 범위는 0 ~ 255 이며 값이 클 수록 팬이 빠르게 돌아간다.

#!/bin/bash
# /home/user/tempCheck.sh

thr1=60000
thr2=50000
thr3=40000
curState=0

while :
do
	tempStr=`cat /sys/class/thermal/thermal_zone0/temp`
	echo 'Temperature: '$tempStr

	temp=$((tempStr))
	state=0
	
	if [ "$temp" -gt "$thr1" ]
	then
		state=1
	elif [ "$temp" -gt "$thr2" ]
	then
		state=2
	elif [ "$temp" -gt "$thr3" ]
	then
		state=3
	else
		state=4
	fi

	if [ "$curState" -eq "$state" ]
	then
		echo 'Same before.  No need to change PWM.'
	else
		if [ "$state" -eq "1" ]
	        then
        	        echo `sudo sh -c 'echo 250 > /sys/devices/pwm-fan/target_pwm'`
                	echo 'PWM SET 250'
        	elif [ "$state" -eq "2" ]
        	then
                	echo `sudo sh -c 'echo 200 > /sys/devices/pwm-fan/target_pwm'`
                	echo 'PWM SET 200'
        	elif [ "$state" -eq "3" ]
        	then
                	echo `sudo sh -c 'echo 150 > /sys/devices/pwm-fan/target_pwm'`
                	echo 'PWM SET 150'
        	else
                	echo 'Fine'
        	fi

	fi
	curState=$state
	sleep 5
done

온도를 단계별로 구분하고 threshold 값을 지정한다.
이전과 비교하여 threshold 값을 넘지 않으면 팬을 제어하지 않는다.
한 번 온도를 체크하고 5초 동안 sleep 한다.

셸 스크립트의 권환을 변경한다.

$chmod 700 /home/user/tempCheck.sh

작성한 셸 스크립트를 서비스로 동작하기위해 systemd 경로에 pwm.service를 작성한다.

# /etc/systemd/system/pwm.service
[Unit]
Description=Control PWM By Temperature

[Service]
ExecStart=/home/user/tempCheck.sh
Restart=always

[Install]
WantedBy=multi-user.target

systemd에 서비스를 등록한다.

$sudo systemctl daemon-reload
$sudo systemctl enable pwm.service

pwm.service를 실행한다.

$sudo systemctl start pwm.service

pwm.service의 동작 상태를 확인한다.

$sudo systemctl status pwm.service
profile
return true

0개의 댓글