快速回忆
ulimit -l #查看限制是否为unlimited
vim /etc/security/limits.conf #该文件中添加限制参数:对于非root用户:
* hard memlock unlimited
* soft memlock unlimited
现象
在root能够正常执行ib_write_bw,但是在普通用户无法执行。如果是同一台设备client和server报错相同。
报错:
Couldn’t allocate MR
failed to create mr
Failed to create MR
Couldn’t create IB resources
现象2:
ib_write_bw指定-s小包的时候没问题。
根因
shell启动命令受限于ulimit,限制了memory lock的最大值数量。ib_write_bw默认启动是65536的size。ulimit默认限制阈值是64KB。由于ib_write_bw在启动前reg mr的过程会pin mem,这里的pin mem就是锁住内存。
解决办法:将内存锁定限制修改为unlimited
实操
查看方式
ulimit -a #查看各种限制
ulimit -l #查看memory lock限制
设置方式
临时设置:ulimit -l 1048576
单位KB,并且这汇总方式无法指定为unlimited
默认设置:vim /etc/security/limits.conf
,修改默认值,该文件中添加限制参数:
对于非root用户:
* hard memlock unlimited
* soft memlock unlimited
对于root用户:
root hard memlock unlimited
root soft memlock unlimited
修改后重新启动一个shell,默认创建后就支持
其他
- 以后遇到Couldn’t allocate MR,可以先设置-s 1 来查看是否可以通。
后记
ulimit是针对每个shell进程的,系统创建shell的时候会根据 /etc/security/limits.conf中来设置默认的限制值。ulimit修改的也是当前shell的。另外要熟悉rdma的mem内存原理,知道锁内存的情况,结合ulimit就打通,从而进行设置和解决无法alloc MR的问题。