라즈베리파이(RPI)는 기기를 위하여 최적화된 리눅스를 만들어 배포하고 있습니다.
하드웨어를 모니터링하는 리눅스 명령어들이 있기는 하지만... RPI에서 사용하는 SOC에서 사용하기는 좀 애매한 것도 있습니다.
RPI 에서는 하드웨어 모니터링을 위한 vcgencmd 라는 명령어를 제공하고 있습니다.
이 명령어는 클럭속도, 온도, 전압, VideoCore GPU 관련정보등 다양한 것을 확인할 수 있습니다.
Vcgencmd 의 사용법
클럭속도, 온도, 전압 등을 측정하는데 여러가지 옵션이 있습니다.
클럭 속도 측정
SOC에는 클럭속도라는 것이 하나가 있는 것이 아닙니다. CPU , GPU등을 비롯하여 여러가지의 속도가 있습니다.
설명 | 명령어 | 출력 |
Arm CPU 코어 클럭 정보 | vcgencmd measure_clock arm | frequency(0)=1500004352 |
GPU 코어 속도 | vcgencmd measure_clock core |
frequency(0)=500001504 |
H.264 블럭 속도 | vcgencmd measure_clock h264 | frequency(0)=0 |
이미지센서 라인 속도 | vcgencmd measure_clock isp | frequency(0)=500000672 |
3D 블럭 속도 | vcgencmd measure_clock v3d |
frequency(0)=500001504 |
UART 속도 | vcgencmd measure_clock uart | frequency(0)=43999120 |
PWM 속도 (아날로그 오디오 출력) | vcgencmd measure_clock pwm | frequency(0)=0 |
SD카드 인터페이스 속도 | vcgencmd measure_clock emmc | frequency(0)=200000432 |
픽셀 값 속도 | vcgencmd measure_clock pixel | frequency(0)=107999800 |
아날로그 비디오 인코더 속도 | vcgencmd measure_clock vec | frequency(0)=0 |
HDMI속도 | vcgencmd measure_clock hdmi | frequency(0)=648002816 |
디스플레이 병렬 인터페이스 속도 | vcgencmd measure_clock dpi | frequency(0)=0 |
전압측정
vcgencmd를 사용하면 VideoCore 칩, RAM 전압, PMIC 등 다양한 전원에서 전압, 전류를 확인할 수 있습니다.
설명 | 명령어 | 출력 |
VideoCore 전압 | vcgencmd measure_volts core | volt=0.7200V |
RAM core 전압 | vcgencmd measure_volts sdram_c | volt=0.6000V |
RAM I/O 전압 | vcgencmd measure_volts sdram_i | volt=0.6000V |
RAM Phy 전압 | vcgencmd measure_volts sdram_p | volt=1.1000V |
PMIC 전압 | vcgencmd pmic_read_adc | 3V7_WL_SW_A current(0)=0.00390372A 3V3_SYS_A current(1)=0.05562801A 1V8_SYS_A current(2)=0.16493220A DDR_VDD2_A current(3)=0.02049453A DDR_VDDQ_A current(4)=0.00000000A 1V1_SYS_A current(5)=0.18152300A 0V8_SYS_A current(6)=0.32693650A VDD_CORE_A current(7)=0.71440000A 3V3_DAC_A current(17)=0.48840000A 3V3_ADC_A current(18)=0.42735000A 1V1_SYS_A current(16)=5.55555000A HDMI_A current(22)=0.02344320A 3V7_WL_SW_V volt(8)=3.71462400V 3V3_SYS_V volt(9)=3.31096100V 1V8_SYS_V volt(10)=1.79926600V DDR_VDD2_V volt(11)=1.11355200V DDR_VDDQ_V volt(12)=0.60842430V 1V1_SYS_V volt(13)=1.10622600V 0V8_SYS_V volt(14)=0.80476110V VDD_CORE_V volt(15)=0.72097620V 3V3_DAC_V volt(20)=3.30768900V 3V3_ADC_V volt(21)=3.30494200V 1V1_SYS_V volt(19)=0.79765500V HDMI_V volt(23)=5.10004000V EXT5V_V volt(24)=5.09602000V BATT_V volt(25)=0.00683760V |
PMIC 전압에서 특정한 항목 출력 | vcgencmd pmic_read_adc EXT5V_V | EXT5V_V volt(24)=5.12416000V |
시스템 스로틀 상태
RPI가 80도에 도달하면 열로 인한 기기의 파손을 방지하기 위해서 CPU속도를 줄이게 됩니다. 이렇게 되었는지 아닌지 알려주는 것이 있습니다.
설명 | 명령어 | 출력 |
시스템 스로틀 상태를 비트로 반환 | vcgencmd get_throttled | throttled=0x0 |
* vcgencmd get_throttled로 반환된 비트에 따른 시스템 상태
설명 | 비트 | 16진수값 |
저전압 감지 | 0 | 0x1 |
Arm 주파수 제한 | 1 | 0x2 |
현재 스로틀 상태 | 2 | 0x4 |
소프트 온도 제한 활성화 | 3 | 0x8 |
전압부족이 발생 | 16 | 0x10000 |
암 주파수 제한이 발생 | 17 | 0x20000 |
스토틀이 발생 | 18 | 0x40000 |
소프트 온도 제한 발생 | 19 | 0x80000 |
vcgencmd를 사용한 시스템 정보
vcgencmd를 사용하여 현재 시스템 구성을 확인할 수 있습니다. 기본 출력은 터미널입니다.
설명 | 명령어 | 출력 |
시스템 구성 정보 | vcgencmd get_config int | arm_64bit=1 arm_boost=1 arm_freq=2400 arm_freq_min=1000 arm_peri_high=1 audio_pwm_mode=2 auto_initramfs=1 camera_auto_detect=1 core_freq=910 core_freq_min=500 disable_commandline_tags=2 disable_fw_kms_setup=1 disable_l2cache=1 disable_overscan=1 display_auto_detect=1 display_default_lcd=-1 display_hdmi_rotate=-1 display_lcd_rotate=-1 dvfs=4 enable_gic=1 enable_uart=-1 force_eeprom_read=1 force_pwm_open=1 framebuffer_depth=16 framebuffer_ignore_alpha=1 framebuffer_swap=1 gpu_freq_min=500 hdmi_enable_4kp60=1 hevc_freq =910 hevc_freq_min=500 ignore_lcd=-1 init_uart_clock=0x2dc6c00 isp_freq=910 isp_freq_min=500 mask_gpu_interrupt1=16418 max_framebuffers=2 over_voltage_avs=0x20404 pause_burst_frames=1 program_serial_random=1 total_mem=8192 usb_max_current_enable=1 v3d_freq=960 v3d_freq_min=500 vpred=8921 hdmi_force_cec_address:0=65535 hdmi_force_cec_address:1=65535 |
arm cpu 메모리 분할 정보 | vcgencmd get_mem arm | arm=1020M |
gpu 메모리 분할 정보 | vcgencmd get_mem gpu | gpu=4M |
vcgencmd를 사용하여 간단한 벤치마킹 스크립트
터미널 명령어는 bash 스크립트를 이용하여 간단한 것을 만들 수 있습니다.
60초마다 CPU 온도, 속도, 스로틀링 상태를 읽고 세부정보를 CSV 파일에 저장하도록 하겠습니다.
CPU에 부하를 주기 위한 것은 stress 프로그램을 사용합니다.
sudo apt update && sudo apt install stress
bash 스크립트를 작성합니다.
#!/bin/bash
echo "Hardware Benchmark Tool"
output_file="benchmark.csv"
echo "Timestamp,CPU Temperature (°C),CPU Clock Speed (MHz),CPU Throttled" > "$output_file"
echo "Idle data for 60 seconds"
# 60번 반복되는 루프 (벤치마크 실행전 잠시 유휴)
for i in {1..60}; do
# 시간을 출력
timestamp=$(date +"%Y-%m-%d %H:%M:%S")
echo "$timestamp"
# vcgencmd를 사용하여 현재 온도
cpu_temp=$(vcgencmd measure_temp | cut -d= -f2 | cut -d\' -f1)
echo "$cpu_temp"
# vcgencmd를 사용하여 현재 클럭속도 Mhz단위 가져옴
cpu_clock_speed=$(($(vcgencmd measure_clock arm | awk -F= '{print $2}') / 1000000))
echo "$cpu_clock_speed"
# vcgencmd를 사용하여 CPU가 스로틀 되었는지 확인
throttled_status=$(vcgencmd get_throttled)
echo "$throttled_status"
echo "################"
#처음에 설정된 파일에 저장을 한다.
echo "$timestamp,$cpu_temp,$cpu_clock_speed,$throttled_status" >> "$output_file"
# Sleep for 1 second
sleep 1
done
# 스트레스 명령어를 4코어에 대해 300초동안 백그라운드에서 실행
stress --cpu 4 -t 300 &
# 위쪽에 사용된 vcgencmd 명령어와 같은 방식으로 300초 동안 기록한다.
echo "Stress data for 300 seconds"
for i in {1..300}; do
timestamp=$(date +"%Y-%m-%d %H:%M:%S")
echo "$timestamp"
cpu_temp=$(vcgencmd measure_temp | cut -d= -f2 | cut -d\' -f1)
echo "$cpu_temp"
cpu_clock_speed=$(($(vcgencmd measure_clock arm | awk -F= '{print $2}') / 1000000))
echo "$cpu_clock_speed"
throttled_status=$(vcgencmd get_throttled)
echo "$throttled_status"
echo "################"
echo "$timestamp,$cpu_temp,$cpu_clock_speed,$throttled_status" >> "$output_file"
# Sleep for 1 second
sleep 1
done
echo "Stress test complete, 60 second cool down period"
# 스트레스 테스트 종료후 유휴 60초
echo "Cool down data for 60 seconds"
for i in {1..60}; do
timestamp=$(date +"%Y-%m-%d %H:%M:%S")
echo "$timestamp"
cpu_temp=$(vcgencmd measure_temp | cut -d= -f2 | cut -d\' -f1)
echo "$cpu_temp"
cpu_clock_speed=$(($(vcgencmd measure_clock arm | awk -F= '{print $2}') / 1000000))
echo "$cpu_clock_speed"
throttled_status=$(vcgencmd get_throttled)
echo "$throttled_status"
echo "################"
echo "$timestamp,$cpu_temp,$cpu_clock_speed,$throttled_status" >> "$output_file"
# Sleep for 1 second
sleep 1
done
https://www.tomshardware.com/how-to/raspberry-pi-benchmark-vcgencmd
'Software' 카테고리의 다른 글
[Linux] Lutris - 게임 통합 관리 (Steam, EPIC, GOG, Humble Bundle) (0) | 2023.10.22 |
---|---|
PreSonus Studio One 6.5 리눅스 지원 (0) | 2023.10.12 |
가짜 USB를 빠르게 검사하는 프로그램... ValiDrive 1.0 (0) | 2023.10.08 |