[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH gnumach] Add timing info to MACH_LOCK_MON lock monitoring
From: |
Damien Zammit |
Subject: |
[PATCH gnumach] Add timing info to MACH_LOCK_MON lock monitoring |
Date: |
Sat, 18 Mar 2023 03:25:05 +0000 |
Booting to beginning of bootstrap with different number of cpus
and checking the lock statistics where TIME is in milliseconds:
-smp 1
db{0}> show all slocks
SUCCESS FAIL MASKED STACK TIME LOCK/CALLER
1 0/0 1/100 0/0 8030/8030 0x323(c1196280)
30760 0/0 0/0 2112/0 130/0 0xf5effdd0(f5ed3480)
30740 0/0 0/0 0/0 130/0 0xf647be2c(f5ed3588)
14345 0/0 0/0 30/0 80/0 0xf5a74e2c(f5a69008)
14345 0/0 0/0 30/0 80/0 0xf5effe2c(f5ec3e28)
14345 0/0 0/0 30/0 70/0 0xf5a74e2c(f5a69110)
14345 0/0 0/0 30/0 70/0 0xf5a74e2c(f5a692c8)
14345 0/0 0/0 18/0 70/0 0xf5a74e2c(f5a69588)
15125 total locks, 0 empty buckets
2290658 0/0 442463/19 3893961/1 10120/0 0xc10a4100(c10a4100)
-smp 2
db{0}> show all slocks
SUCCESS FAIL MASKED STACK TIME LOCK/CALLER
1 0/0 1/100 0/0 84990/84990 0x2133(c1196280)
149307 515/0 3372/2 1/0 5610/0 0xc118a110(c118a554)
126539 0/0 2/0 0/0 3740/0 0xc1098ec4(c1189b00)
32796 0/0 0/0 1/0 3340/0 0xf5a75dec(f5ab1428)
199546 3/0 1714/0 2/0 2610/0 0xc1098e54(c118a60c)
16415 0/0 0/0 1/0 1630/0 0xf5ef1de0(f5ab1320)
16395 0/0 0/0 1/0 1550/0 0xf5ef1dec(f5ab12c8)
14355 0/0 0/0 1869/0 1150/0 0xf5aafde0(f5ab1950)
15554 total locks, 0 empty buckets
2345053 1048/0 469257/20 3986453/1 138330/0
0xc10a4100(c10a4100)
-smp 4
db{0}> show all slocks
SUCCESS FAIL MASKED STACK TIME LOCK/CALLER
1 0/0 1/100 0/0 88870/88870 0x22b7(c1196280)
63530 0/0 0/0 2106/0 6140/0 0xf5a73dec(f5aa52c8)
150145 2/0 3372/2 1/0 5820/0 0xc118a110(c118a554)
126871 0/0 2/0 0/0 3790/0 0xc1098ec4(c1189b00)
200036 8/0 1714/0 2/0 2750/0 0xc1098e54(c118a60c)
16421 0/0 0/0 1/0 1650/0 0xf5b10de0(f5aa51c0)
14345 0/0 0/0 30/0 1270/0 0xf5b19dec(f5a626f0)
14345 0/0 0/0 30/0 1160/0 0xf5a77dec(f5ad91c0)
15679 total locks, 0 empty buckets
2382816 865/0 483970/20 4266287/1 147300/0
0xc10a4100(c10a4100)
-smp 8
db{0}> show all slocks
SUCCESS FAIL MASKED STACK TIME LOCK/CALLER
1 0/0 1/100 0/0 89090/89090 0x22cd(c1196280)
150603 7/0 3372/2 1/0 5520/0 0xc118a110(c118a554)
49191 0/0 0/0 1/0 4890/0 0xf5abbdec(f661b008)
127331 0/0 2/0 0/0 4010/0 0xc1098ec4(c1189b00)
200746 6/0 1714/0 2/0 2730/0 0xc1098e54(c118a60c)
16421 0/0 0/0 1/0 1580/0 0xf5a73de0(f5b3fed8)
14345 0/0 0/0 18/0 1290/0 0xf5b19dec(f5ad9588)
1505 5/0 0/0 1/0 1240/0 0xf5a73e70(f5ac9f10)
18330 total locks, 0 empty buckets
2368778 878/0 481867/20 4343006/1 147660/0
0xc10a4100(c10a4100)
---
i386/i386/hardclock.c | 8 ++++++++
i386/i386/hardclock.h | 4 ++++
kern/lock_mon.c | 10 ++++------
3 files changed, 16 insertions(+), 6 deletions(-)
diff --git a/i386/i386/hardclock.c b/i386/i386/hardclock.c
index 9ac4f51d..d3f49aa1 100644
--- a/i386/i386/hardclock.c
+++ b/i386/i386/hardclock.c
@@ -46,6 +46,10 @@
extern char return_to_iret[];
+#ifdef MACH_LOCK_MON
+unsigned int tick_stamp;
+#endif
+
void
hardclock(int iunit, /* 'unit' number */
int old_ipl, /* old interrupt level */
@@ -78,4 +82,8 @@ hardclock(int iunit, /* 'unit' number */
#ifdef LINUX_DEV
linux_timer_intr();
#endif /* LINUX_DEV */
+#ifdef MACH_LOCK_MON
+ if (cpu_number() == 0)
+ tick_stamp++;
+#endif
}
diff --git a/i386/i386/hardclock.h b/i386/i386/hardclock.h
index b326c3cb..659e0424 100644
--- a/i386/i386/hardclock.h
+++ b/i386/i386/hardclock.h
@@ -19,6 +19,10 @@
#ifndef _I386_HARDCLOCK_H_
#define _I386_HARDCLOCK_H_
+#ifdef MACH_LOCK_MON
+extern unsigned int tick_stamp;
+#endif
+
void hardclock(
int iunit,
int old_ipl,
diff --git a/kern/lock_mon.c b/kern/lock_mon.c
index b8216788..9dc75ce5 100644
--- a/kern/lock_mon.c
+++ b/kern/lock_mon.c
@@ -47,6 +47,7 @@
#include <kern/lock.h>
#include <kern/printf.h>
#include <machine/ipl.h>
+#include <machine/hardclock.h>
#include <ddb/db_sym.h>
#include <ddb/db_output.h>
@@ -56,13 +57,10 @@ def_simple_lock_data(, kdb_lock)
def_simple_lock_data(, printf_lock)
#if NCPUS > 1 && MACH_LOCK_MON
-
-#if TIME_STAMP
-extern time_stamp_t time_stamp;
-#else /* TIME_STAMP */
+#define TIME_STAMP 1
typedef unsigned int time_stamp_t;
-#define time_stamp 0
-#endif /* TIME_STAMP */
+/* in milliseconds */
+#define time_stamp (tick_stamp * 1000 / hz)
#define LOCK_INFO_MAX (1024*32)
#define LOCK_INFO_HASH_COUNT 1024
--
2.39.0
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [PATCH gnumach] Add timing info to MACH_LOCK_MON lock monitoring,
Damien Zammit <=