Unverified Commit 03aef060 authored by Mateusz Guzik's avatar Mateusz Guzik Committed by Christian Brauner
Browse files

pid: reorder fields in pid_namespace to reduce false sharing



alloc_pid() loads pid_cachep, level and pid_max prior to taking the
lock.

It dirties idr and pid_allocated with the lock.

Some of these fields share the cacheline as is, split them up.

No change in the size of the struct.

Signed-off-by: default avatarMateusz Guzik <mjguzik@gmail.com>
Link: https://patch.msgid.link/20260120204820.1497002-1-mjguzik@gmail.com


Reviewed-by: default avatarJan Kara <jack@suse.cz>
Signed-off-by: default avatarChristian Brauner <brauner@kernel.org>
parent 80218249
Loading
Loading
Loading
Loading
+7 −7
Original line number Diff line number Diff line
@@ -27,6 +27,13 @@ struct pid_namespace {
	struct idr idr;
	struct rcu_head rcu;
	unsigned int pid_allocated;
#ifdef CONFIG_SYSCTL
#if defined(CONFIG_MEMFD_CREATE)
	int memfd_noexec_scope;
#endif
	struct ctl_table_set	set;
	struct ctl_table_header *sysctls;
#endif
	struct task_struct *child_reaper;
	struct kmem_cache *pid_cachep;
	unsigned int level;
@@ -40,13 +47,6 @@ struct pid_namespace {
	int reboot;	/* group exit code if this pidns was rebooted */
	struct ns_common ns;
	struct work_struct	work;
#ifdef CONFIG_SYSCTL
	struct ctl_table_set	set;
	struct ctl_table_header *sysctls;
#if defined(CONFIG_MEMFD_CREATE)
	int memfd_noexec_scope;
#endif
#endif
} __randomize_layout;

extern struct pid_namespace init_pid_ns;