aboutsummaryrefslogtreecommitdiff
path: root/sys/sys/file.h
diff options
context:
space:
mode:
authorMateusz Guzik <mjg@FreeBSD.org>2020-11-18 19:47:24 +0000
committerMateusz Guzik <mjg@FreeBSD.org>2020-11-18 19:47:24 +0000
commit1463aa8cf25173f8dca62c1fa84a16e9664eefc0 (patch)
tree0b92a196828717dadb3ddd39b1dcede044613bf5 /sys/sys/file.h
parent30d21d279537e46629a697908d2d207c06bc310e (diff)
downloadsrc-1463aa8cf25173f8dca62c1fa84a16e9664eefc0.tar.gz
src-1463aa8cf25173f8dca62c1fa84a16e9664eefc0.zip
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.
Notes
Notes: svn path=/head/; revision=367814
Diffstat (limited to 'sys/sys/file.h')
-rw-r--r--sys/sys/file.h6
1 files changed, 3 insertions, 3 deletions
diff --git a/sys/sys/file.h b/sys/sys/file.h
index cbf61d0a3dcb..4efed9807bc8 100644
--- a/sys/sys/file.h
+++ b/sys/sys/file.h
@@ -177,14 +177,14 @@ struct fadvise_info {
};
struct file {
+ volatile u_int f_flag; /* see fcntl.h */
+ volatile u_int f_count; /* reference count */
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 */
+ struct ucred *f_cred; /* associated credentials. */
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_count; /* reference count */
/*
* DTYPE_VNODE specific fields.
*/