changes to kiobuf support in 2.4.(?)4

Jeremy Higdon (jeremy@classic.engr.sgi.com)
Wed, 1 Aug 2001 22:55:00 -0700 (PDT)


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/