From mboxrd@z Thu Jan 1 00:00:00 1970 From: Alexander Aring Date: Thu, 2 Mar 2023 12:14:39 -0500 Subject: [Cluster-devel] [PATCH dlm-tool 12/14] dlm_controld: plock log waiters state In-Reply-To: <20230302171441.1509914-1-aahringo@redhat.com> References: <20230302171441.1509914-1-aahringo@redhat.com> Message-ID: <20230302171441.1509914-12-aahringo@redhat.com> List-Id: To: cluster-devel.redhat.com MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit This patch adds additional log_plock() calls to track the start and end of waiter states inside the dlm_controld lock database. With this information we know when a specific lock had contention in view of dlm_controld cluster-wide plock view. --- dlm_controld/plock.c | 38 ++++++++++++++++++++++++++++---------- 1 file changed, 28 insertions(+), 10 deletions(-) diff --git a/dlm_controld/plock.c b/dlm_controld/plock.c index 24ad777a..b93863f7 100644 --- a/dlm_controld/plock.c +++ b/dlm_controld/plock.c @@ -208,6 +208,25 @@ static uint64_t dt_usec(const struct timeval *start, const struct timeval *stop) return dt; } +static void plock_print_start_waiter(const struct lockspace *ls, + struct lock_waiter *w) +{ + log_plock(ls, "state waiter start %llx %p %llx-%llx %d/%u/%llx", + (unsigned long long)w->info.number, + w, + (unsigned long long)w->info.start, + (unsigned long long)w->info.end, + w->info.nodeid, w->info.pid, + (unsigned long long)w->info.owner); +} + +static void plock_print_end_waiter(const struct lockspace *ls, + const struct lock_waiter *w) +{ + log_plock(ls, "state waiter end %llx %p", + (unsigned long long)w->info.number, w); +} + static struct resource * rb_search_plock_resource(struct lockspace *ls, uint64_t number) { struct rb_node *n = ls->plock_resources_root.rb_node; @@ -659,13 +678,7 @@ static void clear_waiters(struct lockspace *ls, struct resource *r, continue; list_del(&w->list); - - log_dlock(ls, "clear waiter %llx %llx-%llx %d/%u/%llx", - (unsigned long long)in->number, - (unsigned long long)in->start, - (unsigned long long)in->end, - in->nodeid, in->pid, - (unsigned long long)in->owner); + plock_print_end_waiter(ls, w); free(w); } } @@ -680,6 +693,7 @@ static int add_waiter(struct lockspace *ls, struct resource *r, if (!w) return -ENOMEM; memcpy(&w->info, in, sizeof(struct dlm_plock_info)); + plock_print_start_waiter(ls, w); list_add_tail(&w->list, &r->waiters); return 0; } @@ -708,6 +722,7 @@ static void do_waiters(struct lockspace *ls, struct resource *r) continue; list_del(&w->list); + plock_print_end_waiter(ls, w); /* log_group(ls, "take waiter %llx %llx-%llx %d/%u/%llx", @@ -1835,7 +1850,7 @@ void send_all_plocks_data(struct lockspace *ls, uint32_t seq, uint32_t *plocks_d our_nodeid, seq, send_count); } -static void free_r_lists(struct resource *r) +static void free_r_lists(const struct lockspace *ls, struct resource *r) { struct posix_lock *po, *po2; struct lock_waiter *w, *w2; @@ -1847,6 +1862,7 @@ static void free_r_lists(struct resource *r) list_for_each_entry_safe(w, w2, &r->waiters, list) { list_del(&w->list); + plock_print_end_waiter(ls, w); free(w); } } @@ -1967,6 +1983,7 @@ void receive_plocks_data(struct lockspace *ls, struct dlm_header *hd, int len) w->info.pid = le32_to_cpu(pp->pid); w->info.nodeid = le32_to_cpu(pp->nodeid); w->info.ex = pp->ex; + plock_print_start_waiter(ls, w); list_add_tail(&w->list, &r->waiters); } pp++; @@ -1984,7 +2001,7 @@ void receive_plocks_data(struct lockspace *ls, struct dlm_header *hd, int len) fail_free: if (!(flags & RD_CONTINUE)) { - free_r_lists(r); + free_r_lists(ls, r); free(r); } return; @@ -1999,7 +2016,7 @@ void clear_plocks_data(struct lockspace *ls) return; list_for_each_entry_safe(r, r2, &ls->plock_resources, list) { - free_r_lists(r); + free_r_lists(ls, r); rb_del_plock_resource(ls, r); list_del(&r->list); free(r); @@ -2038,6 +2055,7 @@ void purge_plocks(struct lockspace *ls, int nodeid, int unmount) list_for_each_entry_safe(w, w2, &r->waiters, list) { if (w->info.nodeid == nodeid || unmount) { list_del(&w->list); + plock_print_end_waiter(ls, w); free(w); purged++; } -- 2.31.1