lockprof: add contested-only profiling
This allows tracking all wait times with much smaller runtime impact. For example when doing -j 104 buildkernel on tmpfs: no profiling: 2921.70s user 282.72s system 6598% cpu 48.562 total all acquires: 2926.87s user 350.53s system 6656% cpu 49.237 total contested only: 2919.64s user 290.31s system 6583% cpu 48.756 total
This commit is contained in:
parent
fca5cfd584
commit
a0842e69aa
@ -272,6 +272,7 @@ DPCPU_DEFINE_STATIC(struct lock_prof_cpu, lp);
|
|||||||
#define LP_CPU(cpu) (DPCPU_ID_PTR((cpu), lp))
|
#define LP_CPU(cpu) (DPCPU_ID_PTR((cpu), lp))
|
||||||
|
|
||||||
volatile int __read_mostly lock_prof_enable;
|
volatile int __read_mostly lock_prof_enable;
|
||||||
|
int __read_mostly lock_contested_only;
|
||||||
static volatile int lock_prof_resetting;
|
static volatile int lock_prof_resetting;
|
||||||
|
|
||||||
#define LPROF_SBUF_SIZE 256
|
#define LPROF_SBUF_SIZE 256
|
||||||
@ -605,6 +606,8 @@ lock_profile_obtain_lock_success(struct lock_object *lo, int contested,
|
|||||||
/* don't reset the timer when/if recursing */
|
/* don't reset the timer when/if recursing */
|
||||||
if (!lock_prof_enable || (lo->lo_flags & LO_NOPROFILE))
|
if (!lock_prof_enable || (lo->lo_flags & LO_NOPROFILE))
|
||||||
return;
|
return;
|
||||||
|
if (lock_contested_only && !contested)
|
||||||
|
return;
|
||||||
spin = (LOCK_CLASS(lo)->lc_flags & LC_SPINLOCK) ? 1 : 0;
|
spin = (LOCK_CLASS(lo)->lc_flags & LC_SPINLOCK) ? 1 : 0;
|
||||||
if (spin && lock_prof_skipspin == 1)
|
if (spin && lock_prof_skipspin == 1)
|
||||||
return;
|
return;
|
||||||
@ -729,6 +732,8 @@ SYSCTL_INT(_debug_lock_prof, OID_AUTO, skipspin, CTLFLAG_RW,
|
|||||||
&lock_prof_skipspin, 0, "Skip profiling on spinlocks.");
|
&lock_prof_skipspin, 0, "Skip profiling on spinlocks.");
|
||||||
SYSCTL_INT(_debug_lock_prof, OID_AUTO, rejected, CTLFLAG_RD,
|
SYSCTL_INT(_debug_lock_prof, OID_AUTO, rejected, CTLFLAG_RD,
|
||||||
&lock_prof_rejected, 0, "Number of rejected profiling records");
|
&lock_prof_rejected, 0, "Number of rejected profiling records");
|
||||||
|
SYSCTL_INT(_debug_lock_prof, OID_AUTO, contested_only, CTLFLAG_RW,
|
||||||
|
&lock_contested_only, 0, "Only profile contested acquires");
|
||||||
SYSCTL_PROC(_debug_lock_prof, OID_AUTO, stats,
|
SYSCTL_PROC(_debug_lock_prof, OID_AUTO, stats,
|
||||||
CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_MPSAFE, NULL, 0,
|
CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_MPSAFE, NULL, 0,
|
||||||
dump_lock_prof_stats, "A",
|
dump_lock_prof_stats, "A",
|
||||||
|
Loading…
Reference in New Issue
Block a user