changes to kiobuf support in 2.4.(?)4

From: Jeremy Higdon (jeremy@classic.engr.sgi.com)
Date: Thu Aug 02 2001 - 00:55:00 EST


I'm curious about the changes made to kiobuf support, apparently in
order to improve raw I/O performance. I was reading through some old
posts circa early April, where I saw reference to a rawio-bench program.
Can someone explain what it does?

I have a driver that uses kiobufs to perform I/O. Prior to these
changes, the kiobuf allocation and manipulation was very quick and
efficient. It is now very slow.

The kiobuf part of the I/O request is as follows:

        alloc_kiovec()
        map_user_kiobuf()
        ... do I/O, using kiobuf to store mappings ...
        kiobuf_wait_for_io()
        free_kiovec()

Now that the kiobuf is several KB in size, and 1024 buffer heads
are allocated, the alloc_kiovec part goes from a percent or so of
CPU usage to do 13000 requests per second to around 90% CPU usage
to do 3000 per second.

It looks as though the raw driver allocates one kiobuf at open time
(rather than on a per-request basis), but if two or more requests
are issued to a single raw device, it too devolves into the allocate
on every request strategy.

Before I go further, I'd appreciate if someone could confirm my
hypotheses and also explain rawio-bench (and maybe point me to some
source, if available).

thanks

jeremy
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Tue Aug 07 2001 - 21:00:16 EST