bug-hurd
[Top][All Lists]
Advanced

[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





reply via email to

[Prev in Thread] Current Thread [Next in Thread]