Ответ
Sysfs — это виртуальная файловая система в ядре Linux, которая предоставляет иерархический доступ к информации об устройствах, драйверах и подсистемах ядра. Она монтируется в директорию /sys
и позволяет просматривать и изменять параметры ядра и устройств "на лету" через обычные файловые операции.
Зачем это нужно в бэкенде?
- Мониторинг: Получение данных о состоянии системы: загрузка CPU, использование памяти, состояние сетевых интерфейсов, температура сенсоров.
- Контейнеризация: Docker и Kubernetes активно используют
sysfs
(вместе сcgroups
) для изоляции и ограничения ресурсов контейнеров (CPU, память, I/O). - Управление оборудованием: Взаимодействие с устройствами, например, управление подсветкой (LEDs) или получение данных с сенсоров.
Как взаимодействовать в Go?
Взаимодействие с sysfs
в Go не требует специальных библиотек. Так как это файловая система, используются стандартные пакеты os
и io/ioutil
.
Пример: чтение доступных ядер CPU
package main
import (
"fmt"
"log"
"os"
"strings"
)
func main() {
// Файл /sys/devices/system/cpu/online показывает диапазоны активных ядер, например "0-3" или "0,2-3"
data, err := os.ReadFile("/sys/devices/system/cpu/online")
if err != nil {
// Не все ОС имеют sysfs, поэтому важна обработка ошибок
log.Fatalf("Не удалось прочитать sysfs: %v", err)
}
onlineCPUs := strings.TrimSpace(string(data))
fmt.Printf("Активные CPU: %sn", onlineCPUs)
}
Ключевые характеристики:
- Структура: Данные организованы в виде директорий и файлов. Один файл обычно содержит одно значение.
- Текстовый формат: Большинство файлов содержат простые текстовые строки, которые легко парсить.
- Динамичность: Содержимое
sysfs
отражает текущее состояние системы и меняется при подключении/отключении устройств.