Статистика по процессору LS1046a
Всем привет! В этот раз я немного расскажу про то, как мы организовали процесс сбора данных о частоте и температуре процессора LS1046a без использования дополнительного программного обеспечения на базе сборки Yocto. Мы расскажем о том, как собрали данные при помощи своего велосипеда bash-скрипта, чтобы дополнительно не нагружать систему и как визуализировали их с использованием нашего небольшого веб-сервиса.
Необходимые инструменты
- Устройство с процессором NXP LS1046a
- Yocto на целевом устройстве или любой другой Linux дистрибутив
- Доступ к терминалу на устройстве.
Решение задачи
Описание скрипта сбора данных
Для сбора данных о частоте и температуре процессора мы используем bash-скр ипт. Этот скрипт собирает данные, записывает их в формат JSON и сохраняет в файл cpu_data.json
. Давайте рассмотрим ключевые моменты скрипта:
-
Мы передаем скрипту серийный номер/имя тестируемого устройства, длительность сбора данных и (опционально) примечание.
./cpu.sh SN001 120 "Дополнительная заметка"
-
Скрипт определяет функции для получения текущего времени, метки времени, частоты процессора и температуры.
- Для LS1046a данные о частоте мы получаем из
/sys/devices/system/cpu/cpufreq/policy0/cpuinfo_cur_freq
- Данны о температуре мы берем из
/sys/class/hwmon/hwmon3/temp1_input
- Для LS1046a данные о частоте мы получаем из
-
Данные собираются в цикле, каждую секунду, и записываются в формате JSON.
Разбор скрипта и его функций
- Проверка аргументов командной строки.
- Определение функций для получения времени, метки времени, частоты и температуры.
- Создание и форматирование JSON-файла.
- Основной цикл сбора данных и записи их в JSON.
Готовый скрипт
#!/bin/bash
if [ $# -lt 2 ]; then
echo "Usage: $0 <serial_number> <duration_in_seconds> <note>"
echo "note: optional parameter"
echo "Example: $0 SN0001 10 \"Test 1\""
exit 1
fi
serialnumber="$1"
duration="$2"
note="$3"
get_current_time() {
current_time=$(date +"%D %H:%M:%S")
echo "$current_time"
}
get_timestamp() {
date +%s
}
get_cpu_frequency() {
cat /sys/devices/system/cpu/cpufreq/policy0/cpuinfo_cur_freq
}
get_cpu_temperature() {
val=$(cat /sys/class/hwmon/hwmon3/temp1_input)
result=$(echo "scale=2; $val / 1000.0" | bc)
printf "%.2f\n" "$result"
}
echo "Collecting data for $duration seconds..."
json_file="cpu_data.json"
echo '{"SN": "'"$serialnumber"'",' > "$json_file"
if [ -n "$note" ]; then
echo ' "note": "'"$note"'",' >> "$json_file"
fi
echo ' "cpu":[' >> "$json_file"
end_time=$((SECONDS + duration))
while [ $SECONDS -lt $end_time ]; do
timestamp=$(get_timestamp)
frequency=$(get_cpu_frequency)
temperature=$(get_cpu_temperature)
get_current_time
echo "CPU Frequency: ${frequency} Hz"
echo "Core Temperature: ${temperature}"
echo " {\"timestamp\":$timestamp, \"frequency\":$frequency, \"temperature\":$temperature}," >> "$json_file"
sleep 1
done
sed -i '$ s/,$//' "$json_file"
echo ']}' >> "$json_file"
echo ''
echo "Done! Data written to $json_file"
Пример формируемого json файла нашим скриптом:
{ "SN": "SN0001",
"note": "This is a note",
"cpu":[
{"timestamp":1692713925, "frequency":3219.181, "temperature":61.0},
{"timestamp":1692713926, "frequency":2740.720, "temperature":59.0},
{"timestamp":1692713927, "frequency":1705.188, "temperature":61.0},
{"timestamp":1692713928, "frequency":3010.267, "temperature":68.0},
{"timestamp":1692713929, "frequency":1500.000, "temperature":59.0},
{"timestamp":1692713930, "frequency":1500.000, "temperature":58.0},
{"timestamp":1692713931, "frequency":3860.388, "temperature":58.0},
{"timestamp":1692713932, "frequency":457.516, "temperature":59.0},
{"timestamp":1692713933, "frequency":1500.000, "temperature":59.0},
{"timestamp":1692713934, "frequency":1500.000, "temperature":57.0}
]}
Визуализация данных
Для визуализации данных мы используем веб-компонент на React, который можно найти по ссылк е cpuChart. Этот сервис позволяет загружать и визуализировать данные из JSON-файла.
Заключение
В данной статье мы рассмотрели, как решить задачу сбора данных о частоте и температуре процессора без установки дополнительного программного обеспечения. Мы использовали bash-скрипт для сбора данных и веб-сервис для их визуализации, который к слову, тоже написан нами. Этот подход позволил нам решить нашу задачу по анализу и мониторингу процессора LS1046a во время проводимых нагрузочных тестирований. Надеюсь эта информация будет кому-то полезна.