[lkml]   [2001]   [Oct]   [3]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
Subject[PATCH] kiobuf_init optimization
	I have come up with a change to the kiobuf_init() routine that
drops the blind memset() to 0 of the entire kiobuf structure and zeros
out 3 specific fields instead. Since this is done on every IO and the
kiobuf structure is over 8K in size (8756 bytes I believe) it becomes
quite costly from a cpu cycle perspective as well as a cache utilization
perspective. The typical IO path uses a small subset of the
preallocated fields within the kiobuf structure. Therefore, the IO path
pays a performance penalty for having to zero out many fields that it
typically doesn't use.

The kiobuf_init() routine using a memset() of the entire kiobuf
structure is in the top 10 of cpu consuming kernel routines in Oracle 9i
testing using raw io. Using the included kiobuf_init patch, our testing
has shown a 5% improvement in Oracle transactional performance in 4 and
8 processor configurations, and the kiobuf_init() routine became a
non-issue for performance. The testing was performed with Oracle, but
this patch could provide performance improvements to any application
that uses raw IO or relies on kiobufs in the IO path.

Obviously, since the structure is no longer set to zero, any
code that makes a zero assumption would break. I haven't come across
code that makes this assumption yet for fields that I did not
specifically zero out in the patch, but I could very well be missing
something. It appears that Alan has included this patch in his
2.4.10-ac4 tree. So, let me know if you have any problems that you
think might be related to this patch. Any input would be greatly

The patch is against a 2.4.9 tree, but it is localized to just
the kiobuf_init() routine and should apply to any of the recent kernels.

Run from the root level of your kernel tree:
patch -p1 < kiobuf_init_speedup.patch

I cannot currently receive the kernel mailing list at this email
address, so please cc: me on posts related to this patch.

Andrew Bond

[unhandled content-type:application/octet-stream]
 \ /
  Last update: 2005-03-22 13:03    [W:0.051 / U:0.116 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site