Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 21 Mar 2015 20:49:00 +1100 (EST)
From:      Bruce Evans <brde@optusnet.com.au>
To:        Xin LI <delphij@freebsd.org>
Cc:        svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org
Subject:   Re: svn commit: r280308 - head/sys/fs/devfs
Message-ID:  <20150321200221.K1846@besplex.bde.org>
In-Reply-To: <201503210114.t2L1ECcB075556@svn.freebsd.org>
References:  <201503210114.t2L1ECcB075556@svn.freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On Sat, 21 Mar 2015, Xin LI wrote:

> Log:
>  Disable timestamping on devfs read/write operations by default.
>
>  Currently we update timestamps unconditionally when doing read or
>  write operations.  This may slow things down on hardware where
>  reading timestamps is expensive (e.g. HPET, because of the default
>  vfs.timestamp_precision setting is nanosecond now) with limited
>  benefit.
>
>  A new sysctl variable, vfs.devfs.dotimes is added, which can be
>  set to non-zero value when the old behavior is desirable.

I don't like this.  It defaults to non-POSIX-conformant behaviour...

The slowness is mostly from no delayed update of times in devfs.
Switching vfs.timestamp_precision to a hardware timecounter would
have been even more expensive for regular files if file systems
didn't have delayed updates.  The assumption that vfs_timestamp()
doesn't use a slow timecounter was so often satisfied that no one
missed devfs also not supporting mounting with -noatime.

Delayed updates are even easier to implement for devfs than for disk
file systems the times never need to be written to disk.  A slow update
is still wasteful for atimes, but not as bad as for disk file systems
since it doesn't trigger a slower sync to disk.

> ...
> Modified: head/sys/fs/devfs/devfs_vnops.c
> ==============================================================================
> --- head/sys/fs/devfs/devfs_vnops.c	Sat Mar 21 00:21:30 2015	(r280307)
> +++ head/sys/fs/devfs/devfs_vnops.c	Sat Mar 21 01:14:11 2015	(r280308)
> ...
> @@ -1700,7 +1708,8 @@ devfs_write_f(struct file *fp, struct ui
> 	resid = uio->uio_resid;
>
> 	error = dsw->d_write(dev, uio, ioflag);
> -	if (uio->uio_resid != resid || (error == 0 && resid != 0)) {
> +	if (devfs_dotimes &&
> +	    (uio->uio_resid != resid || (error == 0 && resid != 0))) {
> 		vfs_timestamp(&dev->si_ctime);
> 		dev->si_mtime = dev->si_ctime;
> 	}

An old bug is evident in the diff.  Writing shouldn't change the ctime.

Bruce



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20150321200221.K1846>