mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-11-28 22:31:06 +01:00
MINOR: threads: augment rwlock debugging stats to report seek lock stats
We currently use only read and write lock operations with rwlocks, but ours also support upgradable seek locks for which we do not report any stats. Let's add them now when DEBUG_THREAD is enabled.
This commit is contained in:
parent
3cfaa8d1e0
commit
8d5360ca7f
@ -97,10 +97,13 @@
|
||||
struct lock_stat {
|
||||
uint64_t nsec_wait_for_write;
|
||||
uint64_t nsec_wait_for_read;
|
||||
uint64_t nsec_wait_for_seek;
|
||||
uint64_t num_write_locked;
|
||||
uint64_t num_write_unlocked;
|
||||
uint64_t num_read_locked;
|
||||
uint64_t num_read_unlocked;
|
||||
uint64_t num_seek_locked;
|
||||
uint64_t num_seek_unlocked;
|
||||
};
|
||||
|
||||
struct ha_spinlock {
|
||||
@ -123,6 +126,8 @@ struct ha_rwlock {
|
||||
unsigned long wait_writers; /* a bit is set to 1 << tid for waiting writers */
|
||||
unsigned long cur_readers; /* a bit is set to 1 << tid for current readers */
|
||||
unsigned long wait_readers; /* a bit is set to 1 << tid for waiting waiters */
|
||||
unsigned long cur_seeker; /* a bit is set to 1 << tid for the lock seekers */
|
||||
unsigned long wait_seekers; /* a bit is set to 1 << tid for waiting seekers */
|
||||
struct {
|
||||
const char *function;
|
||||
const char *file;
|
||||
|
||||
@ -422,16 +422,26 @@ static inline void show_lock_stats()
|
||||
"\t # write unlock: %lu (%ld)\n"
|
||||
"\t # wait time for write : %.3f msec\n"
|
||||
"\t # wait time for write/lock: %.3f nsec\n"
|
||||
"\t # seek lock : %lu\n"
|
||||
"\t # seek unlock : %lu (%ld)\n"
|
||||
"\t # wait time for seek : %.3f msec\n"
|
||||
"\t # wait time for seek/lock : %.3f nsec\n"
|
||||
"\t # read lock : %lu\n"
|
||||
"\t # read unlock : %lu (%ld)\n"
|
||||
"\t # wait time for read : %.3f msec\n"
|
||||
"\t # wait time for read/lock : %.3f nsec\n",
|
||||
|
||||
lock_label(lbl),
|
||||
lock_stats[lbl].num_write_locked,
|
||||
lock_stats[lbl].num_write_unlocked,
|
||||
lock_stats[lbl].num_write_unlocked - lock_stats[lbl].num_write_locked,
|
||||
(double)lock_stats[lbl].nsec_wait_for_write / 1000000.0,
|
||||
lock_stats[lbl].num_write_locked ? ((double)lock_stats[lbl].nsec_wait_for_write / (double)lock_stats[lbl].num_write_locked) : 0,
|
||||
lock_stats[lbl].num_seek_locked,
|
||||
lock_stats[lbl].num_seek_unlocked,
|
||||
lock_stats[lbl].num_seek_unlocked - lock_stats[lbl].num_seek_locked,
|
||||
(double)lock_stats[lbl].nsec_wait_for_seek / 1000000.0,
|
||||
lock_stats[lbl].num_seek_locked ? ((double)lock_stats[lbl].nsec_wait_for_seek / (double)lock_stats[lbl].num_seek_locked) : 0,
|
||||
lock_stats[lbl].num_read_locked,
|
||||
lock_stats[lbl].num_read_unlocked,
|
||||
lock_stats[lbl].num_read_unlocked - lock_stats[lbl].num_read_locked,
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user