Yes. Interestingly my direct write i/o performance is better than my direct read i/o performance for my passthrough device... And that doesn&#39;t make any kind of sense to me.<br><br>pdev0 = pass through device on top of lvm<br>
<br>root@voffice-base:/home/neha/sbd# time dd if=/dev/pdev0 of=/dev/null bs=4096 count=1024 iflag=direct<br>1024+0 records in<br>1024+0 records out<br>4194304 bytes (4.2 MB) copied, 4.09488 s, 1.0 MB/s<br><br>real    0m4.100s<br>
user    0m0.028s<br>sys    0m0.000s<br><br>root@voffice-base:/home/neha/sbd# time dd if=/dev/shm/image of=/dev/pdev0 bs=4096 count=1024 oflag=direct<br>1024+0 records in<br>1024+0 records out<br>4194304 bytes (4.2 MB) copied, 0.0852398 s, 49.2 MB/s<br>
<br>real    0m0.090s<br>user    0m0.004s<br>sys    0m0.012s<br><br>Thanks,<br>Neha<br><br><div class="gmail_quote">On Thu, Apr 11, 2013 at 11:53 AM, Rajat Sharma <span dir="ltr">&lt;<a href="mailto:fs.rajat@gmail.com" target="_blank">fs.rajat@gmail.com</a>&gt;</span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">so you mean direct I/O read of your passthrough device is lower than<br>
direct I/O read of lvm?<br>
<div><div><br>
On Thu, Apr 11, 2013 at 8:39 PM, neha naik &lt;<a href="mailto:nehanaik27@gmail.com" target="_blank">nehanaik27@gmail.com</a>&gt; wrote:<br>
&gt; Hi,<br>
&gt;  I am calling the merge function of the block device driver below me(since<br>
&gt; mine is only pass through). Does this not work?<br>
&gt; When i tried seeing what read requests were coming then i saw that when i<br>
&gt; issue dd with count=1 it retrieves 4 pages,<br>
&gt; so i tried with &#39;direct&#39; flag. But even with direct io my read performance<br>
&gt; is way lower than my write performance.<br>
&gt;<br>
&gt; Regards,<br>
&gt; Neha<br>
&gt;<br>
&gt;<br>
&gt; On Wed, Apr 10, 2013 at 11:15 PM, Rajat Sharma &lt;<a href="mailto:fs.rajat@gmail.com" target="_blank">fs.rajat@gmail.com</a>&gt; wrote:<br>
&gt;&gt;<br>
&gt;&gt; Hi,<br>
&gt;&gt;<br>
&gt;&gt; On Thu, Apr 11, 2013 at 2:23 AM, neha naik &lt;<a href="mailto:nehanaik27@gmail.com" target="_blank">nehanaik27@gmail.com</a>&gt; wrote:<br>
&gt;&gt; &gt; Hi All,<br>
&gt;&gt; &gt;    Nobody has replied to my query here. So i am just wondering if there<br>
&gt;&gt; &gt; is a<br>
&gt;&gt; &gt; forum for block device driver where i can post my query.<br>
&gt;&gt; &gt; Please tell me if there is any such forum.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; Thanks,<br>
&gt;&gt; &gt; Neha<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; ---------- Forwarded message ----------<br>
&gt;&gt; &gt; From: neha naik &lt;<a href="mailto:nehanaik27@gmail.com" target="_blank">nehanaik27@gmail.com</a>&gt;<br>
&gt;&gt; &gt; Date: Tue, Apr 9, 2013 at 10:18 AM<br>
&gt;&gt; &gt; Subject: Passthrough device driver performance is low on reads compared<br>
&gt;&gt; &gt; to<br>
&gt;&gt; &gt; writes<br>
&gt;&gt; &gt; To: <a href="mailto:kernelnewbies@kernelnewbies.org" target="_blank">kernelnewbies@kernelnewbies.org</a><br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; Hi All,<br>
&gt;&gt; &gt;   I have written a passthrough block device driver using &#39;make_request&#39;<br>
&gt;&gt; &gt; call. This block device driver simply passes any request that comes to<br>
&gt;&gt; &gt; it<br>
&gt;&gt; &gt; down to lvm.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; However, the read performance for my passthrough driver is around 65MB/s<br>
&gt;&gt; &gt; (measured through dd) and write performance is around 140MB/s for dd<br>
&gt;&gt; &gt; block<br>
&gt;&gt; &gt; size 4096.<br>
&gt;&gt; &gt; The write performance matches with lvm&#39;s write performance more or less<br>
&gt;&gt; &gt; but,<br>
&gt;&gt; &gt; the read performance on lvm is around 365MB/s.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; I am posting snippets of code which i think are relevant here:<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; static int passthrough_make_request(<br>
&gt;&gt; &gt; struct request_queue * queue, struct bio * bio)<br>
&gt;&gt; &gt; {<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;         passthrough_device_t * passdev = queue-&gt;queuedata;<br>
&gt;&gt; &gt;         bio-&gt;bi_bdev = passdev-&gt;bdev_backing;<br>
&gt;&gt; &gt;         generic_make_request(bio);<br>
&gt;&gt; &gt;         return 0;<br>
&gt;&gt; &gt; }<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; For initializing the queue i am using following:<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; blk_queue_make_request(passdev-&gt;queue, passthrough_make_request);<br>
&gt;&gt; &gt; passdev-&gt;queue-&gt;queuedata = sbd;<br>
&gt;&gt; &gt; passdev-&gt;queue-&gt;unplug_fn = NULL;<br>
&gt;&gt; &gt; bdev_backing = passdev-&gt;bdev_backing;<br>
&gt;&gt; &gt; blk_queue_stack_limits(passdev-&gt;queue, bdev_get_queue(bdev_backing));<br>
&gt;&gt; &gt; if ((bdev_get_queue(bdev_backing))-&gt;merge_bvec_fn) {<br>
&gt;&gt; &gt;         blk_queue_merge_bvec(sbd-&gt;queue, sbd_merge_bvec_fn);<br>
&gt;&gt; &gt; }<br>
&gt;&gt; &gt;<br>
&gt;&gt;<br>
&gt;&gt; What is the implementation for sbd_merge_bvec_fn? Please debug through<br>
&gt;&gt; it to check requests are merging or not? May be that is the cause of<br>
&gt;&gt; lower performance?<br>
&gt;&gt;<br>
&gt;&gt; &gt; Now, I browsed through dm code in kernel to see if there is some flag or<br>
&gt;&gt; &gt; something which i am not using which is causing this huge performance<br>
&gt;&gt; &gt; penalty.<br>
&gt;&gt; &gt; But, I have not found anything.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; If you have any ideas about what i am possibly doing wrong then please<br>
&gt;&gt; &gt; tell<br>
&gt;&gt; &gt; me.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; Thanks in advance.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; Regards,<br>
&gt;&gt; &gt; Neha<br>
&gt;&gt; &gt;<br>
&gt;&gt;<br>
&gt;&gt; -Rajat<br>
&gt;&gt;<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; _______________________________________________<br>
&gt;&gt; &gt; Kernelnewbies mailing list<br>
&gt;&gt; &gt; <a href="mailto:Kernelnewbies@kernelnewbies.org" target="_blank">Kernelnewbies@kernelnewbies.org</a><br>
&gt;&gt; &gt; <a href="http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies" target="_blank">http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies</a><br>
&gt;&gt; &gt;<br>
&gt;<br>
&gt;<br>
</div></div></blockquote></div><br>