Вопрос или проблема
Я хочу отслеживать время загрузки (время, необходимое системе для загрузки) по сравнению с установленной версией программного обеспечения (ядра и другого ПО) каждый день, чтобы иметь представление о производительности загрузки на моем компьютере с 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, хотите отслеживать производительность с течением времени или заинтересованы в управлении версиями программного обеспечения, данный метод будет полезен. Эффективный мониторинг загрузки системы — это шаг к повышению устойчивости и производительности вашего рабочего места или сервера.