Envsys

Envsys — фреймворк для мониторинга аппаратных сенсоров на уровне ядра в операционной системе NetBSD.

По состоянию на 4 марта 2019 года, данный фреймворк используется примерно 85 драйверами устройств для экспорта различных сенсоров, связанных с мониторингом окружающей среды, что подтверждается наличием символа sysmon_envsys_register в дереве исходного кода NetBSD[1].

Общие сведения
Envsys
Тип системный мониторинг
Автор Juan Romero Pardines (2007)
Разработчик NetBSD Foundation
Написана на C
Операционные системы NetBSD (начиная с версии 5.0)
Первый выпуск 1 июля 2007
Репозиторий bxr.su/n/sys/sys/envsys.h
Лицензия BSD (четырёхпунктная лицензия)
Сайт mdoc.su/n/envsys.4

История

Фреймворк претерпел две основные ревизии. Первая версия envsys.h была добавлена 15 декабря 1999 года, а страница руководства envsys.4 появилась 27 февраля 2000 года. В период с 2000 по 2007 год в руководстве envsys(4) для NetBSD указывалось, что «API является экспериментальным» и «вся API должна быть заменена на интерфейс sysctl(8), если таковой будет разработан». Примечательно, что в 2003 году именно этот подход был реализован в OpenBSD через sysctl hw.sensors, когда некоторые драйверы envsys(4) были портированы туда.

Вторая основная ревизия состоялась 1 июля 2007 года. В ней сериализация взаимодействия с пользовательским пространством была переосмыслена с использованием property list благодаря новой библиотеке proplib(3) NetBSD (передача данных между ядром и userland по-прежнему осуществляется через ioctl).

Фреймворк Envsys послужил прототипом для sysctl hw.sensors в OpenBSD (2003), а множество драйверов и типов сенсоров переносились между NetBSD и OpenBSD в обе стороны. Поддержка сенсоров типа drive была добавлена в NetBSD 1 мая 2007 года по аналогии с drive в OpenBSD, в то же время, когда bio(4) и bioctl были портированы из OpenBSD в NetBSD[2].

Возможности

Наиболее распространённым типом экспортируемых устройств являются температурные сенсоры (ENVSYS_STEMP), как отмечается в исследовании популярности сенсорных модулей NetBSD 5.0.1. Сенсоры регистрируются в ядре с помощью API sysmon_envsys(9). Для доступа к данным сенсоров и их мониторинга на уровне пользовательского пространства используется утилита envstat через взаимодействие с proplib(3) и ioctl(2) с файлом псевдо-устройства /dev/sysmon, демон управления питанием powerd, реагирующий на события ядра выполнением скриптов из /etc/powerd/scripts/, а также сторонние инструменты, такие как symon и GKrellM из pkgsrc.

Фреймворк позволяет пользователю изменять пределы мониторинга, заданные драйвером, и обеспечивает возможность контроля сенсоров непосредственно в пространстве ядра или даже программирования чипа для самостоятельного аппаратного мониторинга. Определены два уровня предельных значений: критический и предупреждающий, оба из которых дополнительно подразделяются на категории выше и ниже нормы. При превышении данных порогов может генерироваться системное событие в ядре, которое улавливается в пользовательском пространстве powerd с последующим запуском заранее определённых скриптов пользователя. Для сравнения, в OpenBSD платформа hw.sensors осуществляет мониторинг пользовательских значений через пользовательский демон sensorsd.

По состоянию на 2019 год сам фреймворк Envsys не поддерживает управление вентиляторами непосредственно, однако драйверы могут реализовать поддержку работы с вентиляторами чипов иными средствами, например, через собственный интерфейс sysctl, как реализовано в драйвере dbcool(4). При этом драйверы самых популярных Super I/O чипов, таких как lm(4) и itesio(4), не реализуют управление вентиляторами вовсе (в частности, исторически в OpenBSD, NetBSD и DragonFly указанные драйверы даже не показывают коэффициент заполнения (duty cycle) вентиляторов — только значения оборотов в минуту (RPM)).

Примечания

  1. Murenin, Constantine Aleksandrovich. OpenBSD Hardware Sensors — Environmental Monitoring and Fan Control (англ.). — 2010-05-21. Архивировано 20 августа 2025 года.
  2. Super User's BSD Cross Reference: /NetBSD/usr.sbin/powerd/ (англ.). bxr.su. Дата обращения: 26 сентября 2025. Архивировано 28 декабря 2024 года.

Ссылки