1 个不稳定版本

0.1.0 2024年5月28日

#522 in Unix API

Apache-2.0

33KB
638

Zeus 守护进程 (zeusd)

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

问题

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

解决方案

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

如何使用 zeusd

安装 zeusd

cargo install zeus

如下,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