fd: reorder struct file to reduce false sharing

The size on LP64 is 80 bytes, which is just more than a cacheline, does
not lend itself to easy shrinking and rounding up to 2 would be a huge
waste given NOFREE marker.

The least which can be done is to reorder it so that most commonly used
fields are less likely to span different lines, and consequently suffer
less false sharing.

With the change at hand most commonly used fields land in the same line
about 3/4 of the time, as opposed to 2/4.
This commit is contained in:
Mateusz Guzik 2020-11-18 19:47:24 +00:00
parent 30d21d2795
commit 1463aa8cf2

View File

@ -177,14 +177,14 @@ struct fadvise_info {
}; };
struct file { struct file {
void *f_data; /* file descriptor specific data */
struct fileops *f_ops; /* File operations */
struct ucred *f_cred; /* associated credentials. */
struct vnode *f_vnode; /* NULL or applicable vnode */
short f_type; /* descriptor type */
short f_vnread_flags; /* (f) Sleep lock for f_offset */
volatile u_int f_flag; /* see fcntl.h */ volatile u_int f_flag; /* see fcntl.h */
volatile u_int f_count; /* reference count */ volatile u_int f_count; /* reference count */
void *f_data; /* file descriptor specific data */
struct fileops *f_ops; /* File operations */
struct vnode *f_vnode; /* NULL or applicable vnode */
struct ucred *f_cred; /* associated credentials. */
short f_type; /* descriptor type */
short f_vnread_flags; /* (f) Sleep lock for f_offset */
/* /*
* DTYPE_VNODE specific fields. * DTYPE_VNODE specific fields.
*/ */