Vcgencmd uzun yıllardan beri Raspberry Pi işletim sisteminin derinlerine gömülmüştü, ancak Ahududu Pi 5 onu gerçekten sevmeyi öğrenmemiz için. En temel düzeyde komut, SoC’nin bir parçasını oluşturan VideoCore GPU’dan bilgi çıkışı sağlamak için kullanılır. Ancak birkaç ekstra seçenek/argümanla birçok farklı bileşen için canlı CPU sıcaklık verilerini, voltajlarını, saat hızlarını ve çok daha fazlasını alabiliriz.
Bu nasıl yapılır, komutun temel kullanımını tanıtacağız ve ardından herhangi bir şeyi kıyaslayacak özel bir Bash betiği yazacağız. Ahududu Pi sistem.
Vcgencmd’nin Temel Kullanımı
Komutun saat hızlarını, sıcaklıkları, voltajları vb. ölçmek için birden fazla seçeneği vardır. Bunları inceleyelim ve her komutun nasıl kullanıldığını ve çıktısının bir örneğini görelim.
Saat Hızlarını Ölçme
Her bilgisayarın birden fazla saat hızı vardır. CPU Gigahertz’de çalışıyor olabilir, ancak bilgisayarınızın bazı bölümleri çok daha düşük hızlarda çalışıyor olacaktır. Vcgencmd komutunun izleme seçenekleri vardır
Tanım | Emretmek | Örnek Çıktı |
---|---|---|
Arm CPU çekirdek hızını alın | vcgencmd tedbir_saat kolu | frekans(0)=1500004352 |
GPU çekirdek hızını alın | vcgencmd tedbir_saat çekirdeği | frekans(0)=500001504 |
H.264 blok hızını alın | vcgencmd tedbir_saat h264 | frekans(0)=0 |
Görüntü sensörünün işlem hattı hızını alın | vcgencmd tedbir_saat isp | frekans(0)=500000672 |
3D blok hızını elde edin | vcgencmd tedbir_saat v3d | frekans(0)=500001504 |
UART hızını alın | vcgencmd tedbir_saat uart | frekans(0)=43999120 |
PWM bloğunu alın (analog ses çıkışı) | vcgencmd tedbir_saat pwm | frekans(0)=0 (Raspberry Pi 5’te analog video çıkışı var ancak ses yok) |
SD kart arayüzü saat hızını alın | vcgencmd tedbir_saat emmc | frekans(0)=200000432 |
Piksel değerlerini alın | vcgencmd ölçü_saat pikseli | frekans(0)=107999800 |
Analog video kodlayıcı hızını elde edin | vcgencmd tedbir_saat vec | frekans(0)=0 |
HDMI saatini edinin | vcgencmd tedbir_saat hdmi | frekans(0)=648002816 |
Ekran paralel arayüzünün saat hızını alın | vcgencmd tedbir_saat dpi | frekans(0)=0 |
Gerilimleri Ölçme
Vcgencmd’yi kullanarak VideoCore yongasının, RAM’in voltajlarını ve Güç Yönetimi IC (PMIC) dahil olmak üzere birçok güç kaynağında kullanılan voltajları ve akımları ölçebiliriz.
Tanım | Emretmek | Örnek Çıktı |
---|---|---|
VideoCore voltajını alın | vcgencmd tedbir_volts çekirdeği | volt=0,7200V |
RAM çekirdek voltajını alın | vcgencmd ölçü_volts sdram_c | volt=0,6000V |
RAM G/Ç voltajını alın | vcgencmd tedbir_volts sdram_i | volt=0,6000V |
RAM Phy voltajını alın | vcgencmd ölçü_volts sdram_p | volt=1.1000V |
PMIC voltajlarını okuyun | vcgencmd pmic_read_adc | 3V7_WL_SW_A akım(0)=0,00390372A 3V3_SYS_A akım(1)=0,05562801A 1V8_SYS_A akım(2)=0,16493220A DDR_VDD2_A akım(3)=0,02049453A DDR_VDDQ_A akım(4)=0,0000000 0A 1V1_SYS_A akımı(5)=0,18152300A 0V8_SYS_A akımı (6)=0,32693650A VDD_CORE_A akımı(7)=0,71440000A 3V3_DAC_A akımı(17)=0,48840000A 3V3_ADC_A akımı(18)=0,42735000A 1V1_SYS_A akımı(16)=5,55555000A HDMI_A akımı(2) 2)=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 değerlerinin seçici çıkışı. Listeden istediğiniz değeri bulun ve argüman olarak ekleyin. | vcgencmd pmic_read_adc EXT5V_V | EXT5V_V volt(24)=5,12416000V |
Sistem Kısma Durumu
Raspberry Pi yaklaşık 80 santigrat dereceye ulaştığında termal kısma girecektir. Bu, CPU’yu serin tutmak amacıyla hızını azaltır. Karşılaştırmaları çalıştırırken bir CPU’nun kısılıp kısılmadığını bilmemiz gerekir ve vcgencmd bize bunu bildirecek komuta sahiptir.
Tanım | Emretmek | Örnek Çıktı |
---|---|---|
Sistemin gaz kelebeği durumunu bir bit modeli olarak döndürür. | vcgencmd get_throttled | kısılmış=0x0 |
Satır 1 – Hücre 0 | Satır 1 – Hücre 1 | Satır 1 – Hücre 2 |
Sistem Gaz Kelebeği Durumu Bit Tablosu
Tanım | Biraz | Onaltılı Değer |
---|---|---|
Düşük voltaj algılandı | 0 | 0x1 |
Etkinleştirme frekansı sınırlandı | 1 | 0x2 |
Şu anda kısıtlanmış | 2 | 0x4 |
Yumuşak sıcaklık sınırı etkin | 3 | 0x8 |
Düşük voltaj oluştu | 16 | 0x10000 |
Etkinleştirme sıklığı sınırı oluştu | 17 | 0x20000 |
Kısıtlama meydana geldi | 18 | 0x40000 |
Yumuşak sıcaklık sınırı oluştu | 19 | 0x80000 |
Vcgencmd ile Sistem Yapılandırma Bilgisi
Vcgencmd mevcut sistem yapılandırmasını incelemek ve dökümünü almak için kullanılabilir. Varsayılan olarak çıktı, standart çıktıya (terminal) yönlendirilir, ancak bir kanal kullanılarak çıktı, karşılaştırma için bir dosyaya yönlendirilebilir.
Tanım | Emretmek | Örnek Çıktı |
---|---|---|
Sistem yapılandırmasını döndürür | 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 kamera_auto_detect=1 core_freq=910 core_freq_min=500 devre dışı bırak_commandline_tags=2 devre dışı bırak_fw_kms_setup=1 devre dışı bırak_l2cache=1 devre dışı_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_length=16 Framebuffer_ignore_alpha=1 Framebuffer_swap=1 gpu_freq_min=500 hdmi_enable_4kp60=1 hevc_freq =910 hevc_freq_min=50 0 görmezden_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 için bellek bölünmesini döndürür | vcgencmd get_mem kolu | kol=1020M |
GPU için bellek bölünmesini döndürür | vcgencmd get_mem grafik işlemcisi | gpu=4M Not: Pi 5 için bu dinamik olarak tahsis edilmiş gibi görünüyor. |
Vcgencmd ile Basit Bir Karşılaştırma Komut Dosyası
Vcgencmd ve Bash komut dosyası oluşturma bilgimizle, her 60 saniyede bir CPU sıcaklığı, hız ve gaz durumu okuması yapacak ve ardından ayrıntıları bir CSV dosyasında saklayacak basit bir kıyaslama aracı yapabiliriz.
Senaryo üç bölüme ayrılmıştır. Referans alınabilecek bir taban çizgisi veren 60 saniyelik rölanti sıcaklığı okuması. İkinci kısım, dört çekirdeğin tümünü beş dakika boyunca zorlamak için stres kullanan stres testinin kendisidir. Son olarak CPU’nun soğuduğunu göstermek için boşta kalma süresini 60 saniye boyunca tekrarlıyoruz.
Bu scripti Raspberry Pi 5’e yazacağız fakat aynı script Raspberry Pi’nin tüm modellerinde çalışacak.
1. Bir terminal açın ve yazılım havuzlarını güncelleyin ve ardından stresi yükleyin. Stres, CPU’ları test etmek için kullanılan bir komut satırı aracıdır.
sudo apt update && sudo apt install stress
2. Ana Raspberry Pi masaüstü menüsünden Programlama >> Geany’yi seçin. Geany, kodlama için harika ve hafif bir metin düzenleyicisidir.
3. Betiğe sistem kabuğunu nerede bulacağını söyleyin. Bu, keskin (#) ve bang (!) kelimelerinin birleşiminden oluşan “shabang” adını taşır.
#!/bin/bash
4. Kullanıcıyı uygulamanın ne yapacağı konusunda bilgilendiren kabuğa bir mesaj gönderin. Daha sonra çıktı dosyasının adını saklayacak bir değişken oluşturun. Bu bir CSV dosyası olmalıdır, ancak ad sizin seçiminiz olabilir.
echo "Tom's Hardware Benchmark Tool"
output_file="benchmark.csv"
5. CSV dosyası için bir başlık oluşturun ve dosyaya yazın. Bu, CSV dosyasındaki ve e-tablodaki sütun başlıklarını ayarlayacaktır.
echo "Timestamp,CPU Temperature (°C),CPU Clock Speed (MHz),CPU Throttled" > "$output_file"
6. Uygulamanın 60 saniye boyunca boşta kalacağını belirten bir mesaj çıktısı alın.
echo "Idle data for 60 seconds"
7. 60 kez yinelenecek bir for döngüsü oluşturun.
for i in 1..60; do
8. Geçerli saati bir değişkene yazın, ardından zaman damgasını kabuğa yazdırın.
timestamp=$(date +"%Y-%m-%d %H:%M:%S")
echo "$timestamp"
9. Geçerli CPU sıcaklığını almak, sıcaklık dışındaki tüm bilgileri kesmek ve bir değişkene kaydetmek için vcgencmd’yi kullanın. Daha sonra sıcaklığı kabuğa yansıtın. Bunu yapmazsak CSV dosyasındaki verileri temizlememiz gerekecek, ancak şu anda bunların kaldırılmasını otomatik hale getirebiliriz.
cpu_temp=$(vcgencmd measure_temp | cut -d= -f2 | cut -d\' -f1)
echo "$cpu_temp"
10. Vcgencmd’yi kullanarak mevcut CPU hızını MHz cinsinden alın, bir değişkene kaydedin ve ardından hızı kabuğa yazdırın. Hızı MHz cinsinden elde etmek için, komutun çıktısından hızı dilimlememiz ve ardından 1.000.000’e bölmemiz gerekir.
cpu_clock_speed=$(($(vcgencmd measure_clock arm | awk -F= 'print $2') / 1000000))
echo "$cpu_clock_speed"
11. CPU’nun kısılıp kısılmadığını kontrol edin, verileri bir değişkene kaydedin ve kabuğa yazdırın. Bu, bir bit modeli döndürecektir; kodu çözmek için lütfen tabloya bakın.
throttled_status=$(vcgencmd get_throttled)
echo "$throttled_status"
12. Kabuğa # dizisini yankılayın. Bu, terminal penceresinde yazdırıldığında verilerin bölümlere ayrılmasına yardımcı olacaktır.
echo "################"
13. Verileri CSV dosyasına yazın. Verileri CSV dosyasına eklemek için >> kullandığımızı unutmayın. Yalnızca tek bir > olsaydı üzerine yazılırdı.
echo "$timestamp,$cpu_temp,$cpu_clock_speed,$throttled_status" >> "$output_file"
14. Hala for döngüsünün içindeyken bir saniye duraklayın ve ardından for döngüsünü kapatın. For döngüsündeki kod, CSV dosyasına boşta kalma süresinin saniyesi başına bir olmak üzere 60 okuma yazacaktır.
sleep 1
done
15. Dört CPU çekirdeğinin tamamında 300 saniye (beş dakika) boyunca bir stres testi çalıştırmak için stres komutunu çağırın. “&” komutu arka plana yerleştirecek ve betiğimizin çalışmasını engellemeyecektir.
stress --cpu 4 -t 300 &
16. Stres testinin şimdi başladığını belirten bir mesajı yankılayın (yazdırın).
echo "Stress data for 300 seconds"
17. Önceki for döngüsünü tekrarlıyoruz, sadece 60’ı 300’e değiştirin ve ardından aynı sıcaklığı, CPU hızını ve gaz kelebeği durumunu değişkenlere kaydedin ve ardından CSV dosyasına yazın.
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
18. Son bölüm, CPU’nun normale dönmesine izin veren bir soğuma süresidir. Bu, boşta kalma süresiyle aynı döngüdür.
echo "Cool down data for 60 seconds"
for i in 1..60; do
# Get current timestamp
timestamp=$(date +"%Y-%m-%d %H:%M:%S")
echo "$timestamp"
# Get CPU temperature in degrees Celsius
cpu_temp=$(vcgencmd measure_temp | cut -d= -f2 | cut -d\' -f1)
echo "$cpu_temp"
# Get CPU clock speed in MHz
cpu_clock_speed=$(($(vcgencmd measure_clock arm | awk -F= 'print $2') / 1000000))
echo "$cpu_clock_speed"
# Check if the CPU is throttled
throttled_status=$(vcgencmd get_throttled)
echo "$throttled_status"
echo "################"
# Append data to CSV file
echo "$timestamp,$cpu_temp,$cpu_clock_speed,$throttled_status" >> "$output_file"
# Sleep for 1 second
sleep 1
done
19. Kodu ana dizininize kıyaslama.sh olarak kaydedin.
20. Bir terminalde dosyayı yürütülebilir hale getirin.
chmod +x benchmark.sh
21. Terminalden kodu çalıştırın ve kıyaslamanın tamamlanmasını bekleyin.
./benchmark.sh
22. CSV dosyasını bir e-tabloya aktarın ve bulgularınızın grafiklerini/tablolarını oluşturmak için kullanın.
Kod Listesini Tamamlayın
#!/bin/bash
echo "Tom's 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"
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
stress --cpu 4 -t 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"
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