f_offset
Jeff Roberson
jroberson at jroberson.net
Thu Apr 17 03:02:02 UTC 2008
On Wed, 16 Apr 2008, M. Warner Losh wrote:
> In message: <300DE361-167E-4491-8E8C-7A227225B506 at mac.com>
> Marcel Moolenaar <xcllnt at mac.com> writes:
> :
> : On Apr 14, 2008, at 1:27 AM, Jeff Roberson wrote:
> : >
> : > On Mon, 14 Apr 2008, Arthur Hartwig wrote:
> : >
> : >> ext Jeff Roberson wrote:
> : >>> So I'm in the midst of working on other filesystem concurrency
> : >>> issues and that has brought me back around to f_offset again. I'm
> : >>> working on a method to allow non-overlapping writes and reads to
> : >>> proceed concurrently to the same file. This means the exclusive
> : >>> vnode lock can not be used to protect f_offset even in the write
> : >>> case.
> : >>> To maintain the existing semantics I'm simply going to add an
> : >>> exclusive sx_xlock() around access to f_offset. This is done
> : >>> inconsistently today which is fine from the perspective of the
> : >>> updates in most cases being user-space races. However, f_offset
> : >>> is 64bit and can not be written atomically on 32bit systems and so
> : >>> requires some extra synchronization there.
> : >> I'm not sure of the processor family constraints of the i386
> : >> builds, but the Intel IA32 architecture manual says reads and
> : >> writes of a quadword (64 bits) aligned on a quadword boundary are
> : >> atomic (Pentium and newer CPUs). Guess that leaves out i386, i486
> : >> (any others?)
> : >
> : > Thanks. I hadn't seen that. Do you know which manual and section
> : > states this? I was intending to simply use cmpxchg8b but it sounds
> : > like that may not be necessary. We still have to handle other 32bit
> : > archs like powerpc and mips but I'm not sure if any of those are SMP.
> :
> : I'm working on SMP for PowerPC..
>
> Support for MIPS SMP is in the initial commit. It might not be
> working, but one of the big reasons that people want MIPS and FreeBSD
> is due to the excellent scaling work that's been done as well as the
> prevenance of multicore MIPS designs for certain application domains.
My intent is to support 32bit platforms with a generic shim that grabs
a mtx pool lock to provide atomic like primitives for 64bit. I think that
will sufficiently solve the issue.
For 32bit non-smp we could simply disable interrupts during the operation.
>
> Warner
>
More information about the freebsd-arch
mailing list