tech-kern archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: wapbl_flush() speedup



On Dec 4, 2012, at 10:11 PM, David Laight <david%l8s.co.uk@localhost> wrote:

> On Tue, Dec 04, 2012 at 09:53:11PM +0100, J. Hannken-Illjes wrote:
>> 
>> On Dec 4, 2012, at 8:10 PM, Michael van Elst <mlelstv%serpens.de@localhost> 
>> wrote:
>> 
>>> hannken%eis.cs.tu-bs.de@localhost ("J. Hannken-Illjes") writes:
>>> 
>>>> The attached diff tries to coalesce writes to the journal in MAXPHYS
>>>> sized and aligned blocks.
>>> [...]
>>>> Comments or objections anyone?
>>> 
>>>> + * Write data to the log.
>>>> + * Try to coalesce writes and emit MAXPHYS aligned blocks.
>>> 
>>> Looks fine, but I would prefer the code to use an arbitrarily sized
>>> buffer in case we get individual per device transfer limits. Currently
>>> that size would still be MAXPHYS, but then the code could query the driver
>>> for a proper size.
>> 
>> As `struct wapbl' is per-mount and I suppose this will be per-mount-static
>> it will be just a small `s/MAXPHYS/get-the-optimal-length/' as soon as
>> tls-maxphys comes to head.
> 
> Except that you want the writes to be preferably aligned to that length,
> not just of that length.



That is exactly how the diff works:

        /*
         * Remaining space so this buffer ends on a MAXPHYS boundary.
         */
        resid = MAXPHYS - dbtob(wl->wl_buffer_addr % btodb(MAXPHYS)) -
            wl->wl_buffer_len;

aligns the end of the write to MAXPHYS.  So the first write will be
of size <= MAXPHYS, the following writes will be of size MAXPHYS and
aligned to MAXPHYS and the last write will be of size <= MAXPHYS.

--
J. Hannken-Illjes - hannken%eis.cs.tu-bs.de@localhost - TU Braunschweig 
(Germany)



Home | Main Index | Thread Index | Old Index