Как записать продолжительность загрузки?

Вопрос или проблема

Я хочу отслеживать время загрузки (время, необходимое системе для загрузки) по сравнению с установленной версией программного обеспечения (ядра и другого ПО) каждый день, чтобы иметь представление о производительности загрузки на моем компьютере с arch-linux.

Я использую команду systemd systemd-analyze time для получения времени загрузки.

Моя идея заключается в том, чтобы вести журнал со:

[день]
.......Время загрузки [с]:  2.145 (ядро) + 13.675 (пользовательское пространство)
.......с версией ядра 4.11.2
.......версия gnome-shell 3.24.1
[день+1]
.......Время загрузки [с]:  3.145 (ядро) + 21.665 (пользовательское пространство)
.......с версией ядра 4.17.11
.......версия gnome-shell 3.28.3

Как я могу это сделать?

Основная идея

Мне бы хотелось сделать это как службу systemd, которая записывает это в файл:

$ systemd-analyze time | sed 's/Startup finished in //;s/ +.*(initrd)//;s/ =.*$//'
442ms (ядро) + 10.224s (пользовательское пространство)

Это сокращает вывод systemd-analyze time до только нужных частей. Остальную информацию легко получить с помощью команд uname и gnome-shell:

$ systemd-analyze time | \
    sed 's/Startup finished in //;s/ +.*(initrd)//;s/ =.*$//'; \
    printf "ядро: %s\ngnome-shell: %s\n" "$(uname -r)" "$(gnome-shell --version)"
442ms (ядро) + 10.224s (пользовательское пространство)
ядро: 3.10.0-693.21.1.el7.x86_64
gnome-shell: GNOME Shell 3.25.4

Более уточненно

В качестве скрипта выше:

$ cat ./boottime.bash
#!/bin/bash

printf "[%s]\n" "$(date)"
printf ".......Время загрузки [с]: %s\n" "$(systemd-analyze time | sed 's/Startup finished in //;s/ +.*(initrd)//;s/ =.*$//')"
printf ".......с версией ядра: %s\n" "$(uname -r)"
printf ".......версия gnome-shell: %s\n" "$(gnome-shell --version)"

#[день]
#.......Время загрузки [с]:  2.145 (ядро) + 13.675 (пользовательское пространство)
#.......с версией ядра 4.11.2
#.......версия gnome-shell 3.24.1
#[день+1]
#.......Время загрузки [с]:  3.145 (ядро) + 21.665 (пользовательское пространство)
#.......с версией ядра 4.17.11
#.......версия gnome-shell 3.28.3

Вывод:

$ ./boottime.bash
[Сб 4 Авг 14:34:40 EDT 2018]
.......Время загрузки [с]: 442ms (ядро) + 10.224s (пользовательское пространство)
.......с версией ядра: 3.10.0-693.21.1.el7.x86_64
.......версия gnome-shell: GNOME Shell 3.25.4

Файл юнита:

$ cat /etc/systemd/system/boottime.service
[Unit]
Description=Служба времени загрузки
After=systend-user-sessions.service

[Service]
Type=simple
ExecStart=/opt/bin/boottime.bash

TLDR; парсинг systemd-analyze time

Используемый выше sed работает следующим образом:

sed 's/Startup finished in //;s/ +.*(initrd)//;s/ =.*$//')"
  • s/Startup finished in // – удаляет все слева до слова in
  • s/ +.*(initrd)// – удаляет все, начиная с +, до (initrd)
  • s/ =.*$// – удаляет все в конце строки, начиная с =, до конца строки $

Ответ или решение

Как записывать продолжительность загрузки в Arch Linux

Мониторинг времени загрузки системы является важным аспектом оценки производительности и диагностики возможных проблем. В данной статье мы рассмотрим, как записывать время загрузки (как время загрузки ядра, так и время загрузки пользовательского пространства) на компьютере с Arch Linux, а также привязать эти данные к установленным версиям ПО, таким как ядро и GNOME Shell.

Основная идея

Для начала, вы можете использовать команду systemd-analyze time, которая предоставляет информацию о времени загрузки. Однако, чтобы сохранять эти данные в формате, который вы хотите, можно написать простой скрипт на Bash, который будет обрабатывать вывод команды.

Обработка вывода команды

Вывод systemd-analyze time имеет уникальный формат. Чтобы извлечь необходимую информацию, мы воспользуемся инструментом sed для обработки строки. Ниже приведён пример команды, который обрабатывает вывод, чтобы оставить только необходимые детали:

systemd-analyze time | sed 's/Startup finished in //;s/ +.*(initrd)//;s/ =.*$//'
Создание Bash-скрипта

Теперь давайте создадим Bash-скрипт для автоматизации процесса записи времени загрузки. Ваш скрипт может выглядеть следующим образом:

# boottime.bash
#!/bin/bash

# Записываем данные в лог-файл
LOG_FILE="/var/log/boottime.log"
{
    printf "[%s]\n" "$(date)"
    printf ".......Boot time [s]: %s\n" "$(systemd-analyze time | sed 's/Startup finished in //;s/ +.*(initrd)//;s/ =.*$//')"
    printf ".......with kernel version: %s\n" "$(uname -r)"
    printf ".......gnome-shell version: %s\n" "$(gnome-shell --version)"
} >> "${LOG_FILE}"

Этот скрипт будет записывать дату, время, время загрузки, версию ядра и версию GNOME Shell в указанный лог-файл.

Настройка Systemd-службы

После того как вы создали скрипт, важно автоматизировать его выполнение. Создайте Systemd-службу, которая будет запускать ваш скрипт при каждой загрузке системы. Создайте файл службы:

/etc/systemd/system/boottime.service

Содержимое файла может быть следующим:

[Unit]
Description=Запись времени загрузки
After=multi-user.target

[Service]
Type=simple
ExecStart=/path/to/your/boottime.bash

[Install]
WantedBy=multi-user.target

После создания файла службы активируйте и запустите его:

sudo systemctl enable boottime.service
sudo systemctl start boottime.service

Заключение

С помощью вышеуказанного подхода вы сможете ежедневно записывать время загрузки вашей системы вместе с версиями ядра и GNOME Shell. Это поможет визуализировать и анализировать производительность загрузки со временем, позволив вам принимать обоснованные решения о необходимых обновлениях программного обеспечения или изменениях конфигураций.

SEO оптимизация

Если вы ищете способы оптимизации загрузки Arch Linux, хотите отслеживать производительность с течением времени или заинтересованы в управлении версиями программного обеспечения, данный метод будет полезен. Эффективный мониторинг загрузки системы — это шаг к повышению устойчивости и производительности вашего рабочего места или сервера.

Оцените материал
Добавить комментарий

Капча загружается...