求助:用fio测试ramdisk测试出现的问题
系统是arm64,ramdisk使能,所以从dev/ram0 到 dev/ram15用fio测试ramdisk性能,往里面写数据。
如果一次测试一个ramdisk,测试是ok的
如果并发测试,ram0 到 ram15的话,则会出现错误
fio: cache invalidation of /dev/ram2 failed: Device or resource busy
大家有遇到类似问题吗? 回复 1# linuxlife123
没有用过FIO去测试,不过试过同时挂在多个镜像文件都能用,这个场景也是同时在用着多个loop文件呀。
建议在内核里加些打印信息,定位一下。必现的问题,加打印很快就能找到原因。。
回复 2# Tinnal
多谢Tinna。问题出现在 brd.c中 brd_ioctl中
当 bdev->bd_opners 大于1的时候,就返回设备 busy错误,
看了一下,这个bd_opners属于 block_device的一个成员变量,所以,我觉的,如果同时打开ram0,到ram15这么多设备
这个现象应该是不能避免的。不知道理解的对不对。
还有一个疑惑,为什么x86的机器这么测试没有问题。。。
//-----------brd_ioctl函数-----
error = -EBUSY;
//printk("%s-opener:%d\n",__func__,bdev->bd_openers);
if (bdev->bd_openers <= 1)
{
/*
* Kill the cache first, so it isn't written back to the
* device.
*
* Another thread might instantiate more buffercache here,
* but there is not much we can do to close that race.
*/
kill_bdev(bdev);
brd_free_pages(brd);
error = 0;
}
mutex_unlock(&bdev->bd_mutex);
mutex_unlock(&brd_mutex);
if(error)
printk("[%d]\n",error);
return error;
回复 3# linuxlife123
但为什么bd_opners会大于1呢, RAM0~RAM15是不同的bdev呀。你的上层代码是不是存在并发了。
本帖最后由 linuxlife123 于 2015-01-31 21:54 编辑
回复 4# Tinnal
现在有2个问题:【1】就是bd_openers大于1的情况怎么出现的? 上层没有并发的情况,上层是一个脚本,就是往ram0 到ram15里面同时写数据。
【2】在x86机器上,单独测试某个ramdisk 测试出来的iops和同时测试16个ramdisk测试出来iops 数据差不多,但是在arm64机器上,同时测试16个ramdisk
得到的iops数据只是单独测试某个ramdisk得到的iops数据的一半。
认像当中loop设备创建好像有并发的问题。你在创建loop设备时加把锁串行化一下试试。 回复 6# Tinnal
理论上来讲确实是因为并发造成这个打印信息,但是上层也确实没有并发。
我是通过shell命令来往ram1 - ram15发送数据。应该就排除了上层命令并发的可能性。
这个和loop设备有什么关系吗? 回复 7# linuxlife123
采用&让程序在后台运行,是有并发的可能的。
页:
[1]