title | date | author |
---|---|---|
设置 memlock 限制 |
2021-11-26 06:00:00 -0800 |
ihciah |
io_uring 需要在用户态和内核态共享内存,如 ring 或 registered buffer。
很多内核的默认配置会带一个数值较小的 memlock 限制,如 64(指 64 KiB)。我们需要更大的 memlock 才能正常工作(如果你手动指定了 ring 的大小,你可能需要确保它的大小是合法的)。
要查看当前的限制,可以使用 ulimit -l
(如果你刚刚修改完配置,需要重新登录会话才会生效):
❯ ulimit -l
unlimited
要全局修改这个限制,可以修改 /etc/security/limits.conf
文件,添加 2 行内容(你也可以把星号换成你的用户名):
* hard memlock unlimited
* soft memlock unlimited
如果你只希望对本会话生效,可以考虑使用 root 用户执行 ulimit -Sl unlimited && ulimit -Hl unlimited your_cmd
。
在 systemd 中,可以通过 LimitMEMLOCK
配置来设置 memlock 限制,可以参考 /etc/systemd/user.conf
和 /etc/systemd/system.conf
。
除了 unlimited 外,正常情况下设置 512 一般是足够的。但如果吞吐量较高,可以考虑配置更大的限制(或 unlimited)并在创建 Runtime 时指定更大的 ring entry 数以获得更好的性能(参考 configuration.md)。
memlock 不够时的表现是什么?有时候在你读写时会返回错误:code: 105, kind: Uncategorized, message: "No buffer space available"
。