---
title: 设置 memlock 限制
date: 2021-11-26 14:00:00
author: 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"`。
