svn commit: r324870 - in head/sys: amd64/include kern
Mateusz Guzik
mjg at FreeBSD.org
Sun Oct 22 20:43:51 UTC 2017
Author: mjg
Date: Sun Oct 22 20:43:50 2017
New Revision: 324870
URL: https://svnweb.freebsd.org/changeset/base/324870
Log:
Make the sleepq chain hash size configurable per-arch and bump on amd64.
While here cache-align chains.
This shortens longest found chain during poudriere -j 80 from 32 to 16.
Pushing this higher up will probably require allocation on boot.
Modified:
head/sys/amd64/include/param.h
head/sys/kern/subr_sleepqueue.c
Modified: head/sys/amd64/include/param.h
==============================================================================
--- head/sys/amd64/include/param.h Sun Oct 22 20:22:23 2017 (r324869)
+++ head/sys/amd64/include/param.h Sun Oct 22 20:43:50 2017 (r324870)
@@ -152,4 +152,8 @@
#define INKERNEL(va) (((va) >= DMAP_MIN_ADDRESS && (va) < DMAP_MAX_ADDRESS) \
|| ((va) >= VM_MIN_KERNEL_ADDRESS && (va) < VM_MAX_KERNEL_ADDRESS))
+#ifdef SMP
+#define SC_TABLESIZE 1024 /* Must be power of 2. */
+#endif
+
#endif /* !_AMD64_INCLUDE_PARAM_H_ */
Modified: head/sys/kern/subr_sleepqueue.c
==============================================================================
--- head/sys/kern/subr_sleepqueue.c Sun Oct 22 20:22:23 2017 (r324869)
+++ head/sys/kern/subr_sleepqueue.c Sun Oct 22 20:43:50 2017 (r324870)
@@ -93,7 +93,10 @@ __FBSDID("$FreeBSD$");
* Constants for the hash table of sleep queue chains.
* SC_TABLESIZE must be a power of two for SC_MASK to work properly.
*/
-#define SC_TABLESIZE 256 /* Must be power of 2. */
+#ifndef SC_TABLESIZE
+#define SC_TABLESIZE 256
+#endif
+CTASSERT(powerof2(SC_TABLESIZE));
#define SC_MASK (SC_TABLESIZE - 1)
#define SC_SHIFT 8
#define SC_HASH(wc) ((((uintptr_t)(wc) >> SC_SHIFT) ^ (uintptr_t)(wc)) & \
@@ -137,7 +140,7 @@ struct sleepqueue_chain {
u_int sc_depth; /* Length of sc_queues. */
u_int sc_max_depth; /* Max length of sc_queues. */
#endif
-};
+} __aligned(CACHE_LINE_SIZE);
#ifdef SLEEPQUEUE_PROFILING
u_int sleepq_max_depth;
More information about the svn-src-head
mailing list