1 个不稳定版本
0.1.0 | 2024 年 5 月 28 日 |
---|
#352 在 Unix API 中
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