Module Name: src
Committed By: ad
Date: Sat Nov 23 17:32:10 UTC 2019
Modified Files:
src/sys/dev: lockstat.c
Log Message:
- Increase the default number of buffers, and scale it by ncpu.
- Stop tracing when the device is closed.
To generate a diff of this commit:
cvs rdiff -u -r1.25 -r1.26 src/sys/dev/lockstat.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/dev/lockstat.c
diff -u src/sys/dev/lockstat.c:1.25 src/sys/dev/lockstat.c:1.26
--- src/sys/dev/lockstat.c:1.25 Thu Jun 1 02:45:09 2017
+++ src/sys/dev/lockstat.c Sat Nov 23 17:32:10 2019
@@ -1,7 +1,7 @@
-/* $NetBSD: lockstat.c,v 1.25 2017/06/01 02:45:09 chs Exp $ */
+/* $NetBSD: lockstat.c,v 1.26 2019/11/23 17:32:10 ad Exp $ */
/*-
- * Copyright (c) 2006, 2007 The NetBSD Foundation, Inc.
+ * Copyright (c) 2006, 2007, 2019 The NetBSD Foundation, Inc.
* All rights reserved.
*
* This code is derived from software contributed to The NetBSD Foundation
@@ -37,10 +37,11 @@
* Only one thread can hold the device at a time, providing a global lock.
*
* XXX Timings for contention on sleep locks are currently incorrect.
+ * XXX Convert this to use timecounters!
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: lockstat.c,v 1.25 2017/06/01 02:45:09 chs Exp $");
+__KERNEL_RCSID(0, "$NetBSD: lockstat.c,v 1.26 2019/11/23 17:32:10 ad Exp $");
#include <sys/types.h>
#include <sys/param.h>
@@ -71,7 +72,7 @@ __KERNEL_RCSID(0, "$NetBSD: lockstat.c,v
#endif
#define LOCKSTAT_MINBUFS 1000
-#define LOCKSTAT_DEFBUFS 10000
+#define LOCKSTAT_DEFBUFS 20000
#define LOCKSTAT_MAXBUFS 1000000
#define LOCKSTAT_HASH_SIZE 128
@@ -453,6 +454,10 @@ lockstat_close(dev_t dev, int flag, int
{
lockstat_lwp = NULL;
+ if (lockstat_dev_enabled) {
+ lockstat_stop(NULL);
+ lockstat_free();
+ }
__cpu_simple_unlock(&lockstat_lock);
return 0;
}
@@ -490,9 +495,10 @@ lockstat_ioctl(dev_t dev, u_long cmd, vo
/*
* Sanitize the arguments passed in and set up filtering.
*/
- if (le->le_nbufs == 0)
- le->le_nbufs = LOCKSTAT_DEFBUFS;
- else if (le->le_nbufs > LOCKSTAT_MAXBUFS ||
+ if (le->le_nbufs == 0) {
+ le->le_nbufs = MIN(LOCKSTAT_DEFBUFS * ncpu,
+ LOCKSTAT_MAXBUFS);
+ } else if (le->le_nbufs > LOCKSTAT_MAXBUFS ||
le->le_nbufs < LOCKSTAT_MINBUFS) {
error = EINVAL;
break;