多个线程无法访问 modprobe 创建的同一个 RAMdisk

多个线程无法访问 modprobe 创建的同一个 RAMdisk

modprove brd rd_size=62914560我在 CentOS 7.5 上创建了 60GB 的 RAMdisk 。检查结果,fdisk -l /dev/ram*显示 16 个 60GB 大小的 ram 块设备(/dev/ram0、/dev/ram1、...、/dev/ram15)。

我想在一个 ram 块设备上运行 16 个随机访问的作业(线程)来检查性能。我使用 FIO 工具运行这样的工作负载。但是,我收到以下错误:

/dev/ram1 的缓存失效失败:设备或资源繁忙

为什么会出现这种情况?访问单个 RAM 块设备的作业(线程)数量是否有限制?当我使用 检查块设备时lsblk,未显示 ram 块设备。是什么原因?

谢谢

答案1

lsblk手册页:

该命令默认以树状格式打印所有块设备(RAM 磁盘除外)。

这不是一个错误,这是一个功能! :-)

如果你想包含 RAM 设备,你可以这样做lsblk -I 1

lsblk -I 1
NAME  MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
ram0    1:0    0  9,8M  0 disk 
ram1    1:1    0  9,8M  0 disk 
ram2    1:2    0  9,8M  0 disk
...

答案2

您一次性提出了多个问题,这降低了您获得全部答案的机会:-(

但是,我收到以下错误:

/dev/ram1 的缓存失效失败:设备或资源繁忙

为什么会出现这种情况?访问单个 RAM 块设备的作业(线程)数量是否有限制?

释放 brd 设备使用的页面的功能已在ff26956875c2f05e12ecec9938411a2c7dfc767d: brd: remove support for BLKFLSBUF。这样做是因为BLKFLSBUF向子 RAM 分区发出指令会导致父 BRD 设备损坏(我猜想可能还有其他可能共享该页面的同级分区)。

访问单个 RAM 块设备的作业(线程)数量是否有限制?

不,请参阅上文。

当我使用 lsblk 检查块设备时,未显示 ram 块设备。是什么原因?

因为lsblk设计时默认不显示 RAM 块设备...从手册页的开头lsblk(8):

该命令默认以树状格式打印所有块设备(RAM 磁盘除外)。

请参阅lsblk 手册页中的选项了解如何更改lsblk显示内容。

相关内容