Перейти к основному содержимому

Статистика по процессору LS1046a

· 3 мин. чтения
IgorKha
lab240 maintainer

Всем привет! В этот раз я немного расскажу про то, как мы организовали процесс сбора данных о частоте и температуре процессора 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
  • Данные собираются в цикле, каждую секунду, и записываются в формате JSON.

Разбор скрипта и его функций

  • Проверка аргументов командной строки.
  • Определение функций для получения времени, метки времени, частоты и температуры.
  • Создание и форматирование JSON-файла.
  • Основной цикл сбора данных и записи их в JSON.

Готовый скрипт

Bash-script для ls1046a
#!/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 файла нашим скриптом:

cpu_data.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 во время проводимых нагрузочных тестирований. Надеюсь эта информация будет кому-то полезна.

Полезные ссылки

  • Скачать данный скрип актуальной версии можно всегда на Github Gist
  • cpuChart для отображения данных из json файла cpu_data.json