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