Date: Tue, 16 Oct 2001 11:24:45 -0700 (PDT) From: Matthew Dillon <dillon@apollo.backplane.com> To: Maxime Henrion <mux@qualys.com> Cc: freebsd-hackers@freebsd.org Subject: Re: cvs commit: src/sys/vm vnode_pager.c Message-ID: <200110161824.f9GIOjT33989@apollo.backplane.com> References: <xzpelo4r90f.fsf@flood.ping.uio.no> <200110152135.f9FLZpg56816@earth.backplane.com> <20011016172843.A469@nebula.cybercable.fr> <200110161618.f9GGIpM31430@apollo.backplane.com> <20011016190340.A465@nebula.cybercable.fr> <200110161712.f9GHCbg33501@apollo.backplane.com> <20011016194937.A447@nebula.cybercable.fr> <200110161757.f9GHv5633749@apollo.backplane.com> <20011016200300.B447@nebula.cybercable.fr> <200110161804.f9GI4wF33862@apollo.backplane.com> <20011016201014.C447@nebula.cybercable.fr>
next in thread | previous in thread | raw e-mail | index | archive | help
: :Matthew Dillon wrote: :> :> The time jump is irrelevant. It's whether you feel a glitch or not :> while the sync is running that counts. : :I don't do profiling on a sync command, I monitore the system with :``iostat -w 1'' then I see where the jump occurs and since it occurs :every 30s, I try to launch the profiling in a window around the jump as :little as possible. : :Am I doing it wrong ? :Maxime Well, 11% over a period of a single second, once every 30 seconds makes sense if there are a lot of vnodes cached. I think you are seeing the same issue, just that on -stable there is much lower overhead. Basically we have two routines that are causing problems: ffs_sync() qsync() (quota sync) The basic problem for both is that either a lock or a mutex is being obtained and released for each loop. Actually two are being obtained and two are being released for each loop. The high level scan of the vnode list for the mount point only requires one mutex to be held through the scan, so if we can flag the situation somehow in a manner that can be detected without having to get the vnode interlock, we can remove all in-loop lock/mutex operations for the degenerate case. We would still be scanning hundreds of thousands of vnodes, but at least we would be scanning them in a tight loop without any subroutine calls.. maybe 15nS/loop instead of 500nS. That would solve the problem. We can accomplish this for ffs_sync(). It's actually fairly easy to do. Accomplishing this for qsync() is harder due to the many-to-one relationship between inodes and their quota structures, and may require a complete rewrite of the quota syncing code. -Matt To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-hackers" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200110161824.f9GIOjT33989>