svn commit: r355226 - head/sys/sys

Mateusz Guzik mjg at FreeBSD.org
Sat Nov 30 16:40:17 UTC 2019


Author: mjg
Date: Sat Nov 30 16:40:16 2019
New Revision: 355226
URL: https://svnweb.freebsd.org/changeset/base/355226

Log:
  vfs: swap placement between v_type and v_tag
  
  The former is frequently accessed (e.g., in vfs_cache_lookup) and shares the
  cacheline with v_usecount, avoidably adding to cache misses during concurrent
  lookup. The latter is almost unused and probably can get garbage-collected.
  
  The struct does not change in size despite enum vs char * discrepancy.
  On 64-bit archs there used to be 4 bytes padding after v_type giving 480 bytes
  in total.

Modified:
  head/sys/sys/vnode.h

Modified: head/sys/sys/vnode.h
==============================================================================
--- head/sys/sys/vnode.h	Sat Nov 30 14:17:45 2019	(r355225)
+++ head/sys/sys/vnode.h	Sat Nov 30 16:40:16 2019	(r355226)
@@ -103,7 +103,7 @@ struct vnode {
 	 * Fields which define the identity of the vnode.  These fields are
 	 * owned by the filesystem (XXX: and vgone() ?)
 	 */
-	const char *v_tag;			/* u type of underlying data */
+	enum	vtype v_type;			/* u vnode type */
 	struct	vop_vector *v_op;		/* u vnode operations vector */
 	void	*v_data;			/* u private data for fs */
 
@@ -173,7 +173,7 @@ struct vnode {
 	int	v_writecount;			/* I ref count of writers or
 						   (negative) text users */
 	u_int	v_hash;
-	enum	vtype v_type;			/* u vnode type */
+	const char *v_tag;			/* u type of underlying data */
 };
 
 #endif /* defined(_KERNEL) || defined(_KVM_VNODE) */


More information about the svn-src-all mailing list