1 个不稳定版本

0.1.0 2024 年 5 月 28 日

#352Unix API

Apache-2.0

33KB
644

Zeus 守护进程 (zeusd)

zeusd 是一个设计为以管理员权限运行并公开封装了特权 NVML 方法的 API 端点的守护进程。

问题

Zeus 中的能耗优化器需要更改 GPU 的配置,包括其功率限制或频率,这需要 Linux 安全能力 SYS_ADMIN(这几乎等同于 sudo)。然而,授予整个应用程序如此强的权限仅仅为了更改 GPU 配置并不是一个好主意。

解决方案

zeusd 在节点上作为一个特权守护进程运行,并提供封装了特权 NVML 方法的 API 端点。然后,无特权应用程序可以请求 zeusd 代表它们更改 GPU 的配置。为了尽可能降低延迟,zeusd 使用 Rust 编写。

如何使用 zeusd

安装 zeusd

cargo install zeusd

以下配置下,zeusd 将监听位于 /var/run/zeusd.sock 的 Unix 域套接字,该套接字对任何人都可写(因为文件权限为 666)。

sudo zeusd --socket-path /var/run/zeusd.sock --socket-permissions 666

完整帮助信息

$ zeusd --help
The Zeus daemon runs with elevated provileges and communicates with unprivileged Zeus clients to allow them to interact with and control compute devices on the node

Usage: zeusd [OPTIONS]

Options:
      --mode <MODE>
          Operating mode: UDS or TCP
          
          [default: uds]

          Possible values:
          - uds: Unix domain socket
          - tcp: TCP

      --socket-path <SOCKET_PATH>
          [UDS mode] Path to the socket Zeusd will listen on
          
          [default: /var/run/zeusd.sock]

      --socket-permissions <SOCKET_PERMISSIONS>
          [UDS mode] Permissions for the socket file to be created
          
          [default: 666]

      --socket-uid <SOCKET_UID>
          [UDS mode] UID to chown the socket file to

      --socket-gid <SOCKET_GID>
          [UDS mode] GID to chown the socket file to

      --tcp-bind-address <TCP_BIND_ADDRESS>
          [TCP mode] Address to bind to
          
          [default: 127.0.0.1:4938]

      --allow-unprivileged
          If set, Zeusd will not complain about running as non-root

      --num-workers <NUM_WORKERS>
          Number of worker threads to use. Default is the number of logical CPUs

  -h, --help
          Print help (see a summary with '-h')

  -V, --version
          Print version

依赖项

~23–35MB
~611K SLoC