Hi

You can add this to the kernel that will be used for testing writecache.

Another suggestion is to try to use the dm table argument "writeback_jobs" 
- for example:
dmsetup create wc --table "0 `blockdev --getsize /dev/vdb` writecache s 
/dev/vdb /dev/vdc 4096 2 writeback_jobs 65536"

It limits the number of work that is submitted to kcopyd and it may 
improve latency.

Mikulas


Index: linux-2.6/drivers/md/dm-writecache.c
===================================================================
--- linux-2.6.orig/drivers/md/dm-writecache.c
+++ linux-2.6/drivers/md/dm-writecache.c
@@ -1538,14 +1538,15 @@ static void writecache_copy_endio(int re
 {
        struct copy_struct *c = ptr;
        struct dm_writecache *wc = c->wc;
+       unsigned long flags;
 
        c->error = likely(!(read_err | write_err)) ? 0 : -EIO;
 
-       raw_spin_lock_irq(&wc->endio_list_lock);
+       raw_spin_lock_irqsave(&wc->endio_list_lock, flags);
        if (unlikely(list_empty(&wc->endio_list)))
                wake_up_process(wc->endio_thread);
        list_add_tail(&c->endio_entry, &wc->endio_list);
-       raw_spin_unlock_irq(&wc->endio_list_lock);
+       raw_spin_unlock_irqrestore(&wc->endio_list_lock, flags);
 }
 
 static void __writecache_endio_pmem(struct dm_writecache *wc, struct list_head 
*list)
@@ -1799,7 +1800,7 @@ static void __writecache_writeback_ssd(s
                        from.count = to.count = wc->data_device_sectors - 
to.sector;
                }
 
-               dm_kcopyd_copy(wc->dm_kcopyd, &from, 1, &to, 0, 
writecache_copy_endio, c);
+               dm_kcopyd_copy(wc->dm_kcopyd, &from, 1, &to, 
BIT(DM_KCOPYD_EARLY_CALLBACK), writecache_copy_endio, c);
 
                __writeback_throttle(wc, wbl);
        }

--
dm-devel mailing list
[email protected]
https://listman.redhat.com/mailman/listinfo/dm-devel

Reply via email to