Skip to content

Latest commit

 

History

History
30 lines (22 loc) · 1.5 KB

memlock.md

File metadata and controls

30 lines (22 loc) · 1.5 KB
title date author
设置 memlock 限制
2021-11-26 06:00:00 -0800
ihciah

设置 memlock 限制

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"