nullb driver分析0-环境搭建

0.前言

本系列文章主要从null block dev驱动(位于drivers/block/)着手来分析block多队列机制,本文只是简要说明相关环境搭建的方法。
内核版本:kernel 4.19

1.环境搭建方法

使能null block dev driver编译选项

本文选择将null block驱动编译进内核

挂载configfs文件系统

mount -t configfs none /mnt
mkdir -p /mnt/nullb/a

使能null block设备为后备存储设备

echo 1 > /mnt/nullb/a/memory_backed
这样可以对其进行格式化

模拟上电

echo 1 > /mnt/nullb/a/power

格式化为ext文件系统

mkfs.ext2 /dev/nullb0

挂载文件系统

mkdir /tmp
mount /dev/nullb0 /tmp

注:如上如果测试出现问题,可切换到内核5.10上进行测试

2.代码修改

测试时可能会遇到错误,可能需要做如下修改:

(1)由于作为后备存储时默认是250G大小,会导致错误,修改为1G进行测试

--- a/drivers/block/null_blk.h
+++ b/drivers/block/null_blk.h
@@ -132,7 +132,7 @@ static const struct kernel_param_ops null_queue_mode_param_ops = {
 device_param_cb(queue_mode, &null_queue_mode_param_ops, &g_queue_mode, 0444);
 MODULE_PARM_DESC(queue_mode, "Block interface to use (0=bio,1=rq,2=multiqueue)");
 
-static int g_gb = 250;
+static int g_gb = 1;

(2)实际测试时需要强制在代码中设置才起作用

--- a/drivers/block/null_blk.h
+++ b/drivers/block/null_blk.h
@@ -508,6 +508,7 @@ static struct nullb_device *null_alloc_dev(void)
                return NULL;
        }
 
+       dev->memory_backed = true;
        dev->size = g_gb * 1024;
        dev->completion_nsec = g_completion_nsec;
        dev->submit_queues = g_submit_queues;

(3) 如果测试多队列调度器部分,则需要设置如下参数

@@ -82,7 +82,7 @@ enum {
        NULL_Q_MQ               = 2,
 };
 
-static int g_no_sched;
+static int g_no_sched = 0;
 module_param_named(no_sched, g_no_sched, int, 0444);
 MODULE_PARM_DESC(no_sched, "No io scheduler");

3. 测试方法

测试中主要使用了如下工具跟踪函数的调用流程:
ftrace, stack_trace, perf, dd, dump_stack

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值