On 2021/04/12 8:34, Damien Le Moal wrote: > On 2021/04/12 1:30, Max Gurtovoy wrote: >> This will enable changing the virtual boundary of null blk devices. For >> now, null blk devices didn't have any restriction on the scatter/gather >> elements received from the block layer. Add a module parameter that will >> control the virtual boundary. This will enable testing the efficiency of >> the block layer bounce buffer in case a suitable application will send >> discontiguous IO to the given device. >> >> Initial testing with patched FIO showed the following results (64 jobs, >> 128 iodepth): >> IO size READ (virt=false) READ (virt=true) Write (virt=false) Write (virt=true) >> ---------- ------------------- ----------------- ------------------- ------------------- >> 1k 10.7M 8482k 10.8M 8471k >> 2k 10.4M 8266k 10.4M 8271k >> 4k 10.4M 8274k 10.3M 8226k >> 8k 10.2M 8131k 9800k 7933k >> 16k 9567k 7764k 8081k 6828k >> 32k 8865k 7309k 5570k 5153k >> 64k 7695k 6586k 2682k 2617k >> 128k 5346k 5489k 1320k 1296k >> >> Signed-off-by: Max Gurtovoy <mgurtovoy@xxxxxxxxxx> >> --- >> drivers/block/null_blk/main.c | 7 +++++++ >> 1 file changed, 7 insertions(+) >> >> diff --git a/drivers/block/null_blk/main.c b/drivers/block/null_blk/main.c >> index d6c821d48090..9ca80e38f7e5 100644 >> --- a/drivers/block/null_blk/main.c >> +++ b/drivers/block/null_blk/main.c >> @@ -84,6 +84,10 @@ enum { >> NULL_Q_MQ = 2, >> }; >> >> +static bool g_virt_boundary = false; >> +module_param_named(virt_boundary, g_virt_boundary, bool, 0444); >> +MODULE_PARM_DESC(virt_boundary, "Require a virtual boundary for the device. Default: False"); >> + >> static int g_no_sched; >> module_param_named(no_sched, g_no_sched, int, 0444); >> MODULE_PARM_DESC(no_sched, "No io scheduler"); >> @@ -1880,6 +1884,9 @@ static int null_add_dev(struct nullb_device *dev) >> BLK_DEF_MAX_SECTORS); >> blk_queue_max_hw_sectors(nullb->q, dev->max_sectors); >> >> + if (g_virt_boundary) >> + blk_queue_virt_boundary(nullb->q, PAGE_SIZE - 1); >> + >> null_config_discard(nullb); >> >> sprintf(nullb->disk_name, "nullb%d", nullb->index); >> > > Looks good to me, but could you also add the configfs equivalent setting ? Oops. Chaitanya already had pointed this out... Sorry about the noise :) -- Damien Le Moal Western Digital Research