[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-Id: <200804270617.36629.vda.linux@googlemail.com>
Date: Sun, 27 Apr 2008 06:17:36 +0200
From: Denys Vlasenko <vda.linux@...glemail.com>
To: David Chinner <dgc@....com>, Benjamin LaHaise <bcrl@...ck.org>
Cc: xfs@....sgi.com, Eric Sandeen <sandeen@...deen.net>,
Adrian Bunk <bunk@...nel.org>, linux-kernel@...r.kernel.org,
linux-fsdevel@...r.kernel.org, linux-aio@...ck.org
Subject: [PATCH] vfs: reduce stack usage by shrinking struct kiocb
Hi Al, Benjamin, David,
struct kiocb is placed on stack by, for example, do_sync_write().
Eventually it contributes to xfs writeout path's stack usage, among others.
This is *the* path which causes 4k stack overflows on i386 with xfs.
This patch trivially reorders fields of this structure,
and makes some of them smaller.
Reordering helps 64-bit architectures:
int, void*, int, void* - bad,
int, int, void*, void* - better.
These fields are made smaller:
ki_flags: long -> short: possible values are 0,1,2, so short is enough.
ki_nr_segs: ulong -> uint: nobody uses 4 billion element writev's
(and it would not work anyway)
ki_cur_seg: same
For 32bit x86, it makes this struct only 4 bytes smaller.
This isn't much, but it helps not only xfs, but all filesystems.
For 64-bit case savings are a bit more significant,
as ulong -> uint actually makes a difference, and reordering
of 64-bit fields eliminates some padding.
Only compile tested. Observed stack reductions on 32 bits:
-sock_recvmsg [vmlinux]: 196
-sock_sendmsg [vmlinux]: 196
+sock_recvmsg [vmlinux]: 192
+sock_sendmsg [vmlinux]: 192
-do_sync_write [vmlinux]: 140
-do_sync_read [vmlinux]: 140
+do_sync_write [vmlinux]: 136
+do_sync_read [vmlinux]: 136
-do_sync_readv_writev [vmlinux]: 132
+do_sync_readv_writev [vmlinux]: 128
Signed-off-by: Denys Vlasenko <vda.linux@...glemail.com>
--
vda
View attachment "stk4.diff" of type "text/x-diff" (1453 bytes)
Powered by blists - more mailing lists