From patchwork Wed Aug 24 08:11:45 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Martin Wilck X-Patchwork-Id: 12953034 X-Patchwork-Delegate: christophe.varoqui@free.fr Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id E783BC00140 for ; Wed, 24 Aug 2022 08:12:21 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1661328740; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:list-id:list-help: list-unsubscribe:list-subscribe:list-post; bh=Zj5BKXO8blAdz/qxVvVT6iTPLD4I/MkX5qFCMojlfkQ=; b=eUzDAAC2ViKwq7/XF2fte5LtK7MGEpCQf3pfgIKyze9ve2m5zW3Xx1iEGnhtUsri2na1ul 6Dwh6IG7KTHbynUt4aJqhTPpxcMrsMYczULHu5shV3BOVHcvxP0PUn3X0ZpntiPv1br7b6 f7BJKokL3iMvLrzBUHNh7Q+vVdHDO4o= Received: from mimecast-mx02.redhat.com (mx3-rdu2.redhat.com [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-453-uPBh-5jiMTaDfNbE_fawQw-1; Wed, 24 Aug 2022 04:12:17 -0400 X-MC-Unique: uPBh-5jiMTaDfNbE_fawQw-1 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.rdu2.redhat.com [10.11.54.6]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 08C79380115B; Wed, 24 Aug 2022 08:12:16 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (unknown [10.30.29.100]) by smtp.corp.redhat.com (Postfix) with ESMTP id 64BF02166B26; Wed, 24 Aug 2022 08:12:14 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (localhost [IPv6:::1]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id 508161946A42; Wed, 24 Aug 2022 08:12:14 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx10.intmail.prod.int.rdu2.redhat.com [10.11.54.10]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id 2D5E71946A40 for ; Wed, 24 Aug 2022 08:12:13 +0000 (UTC) Received: by smtp.corp.redhat.com (Postfix) id 0EAD540315A; Wed, 24 Aug 2022 08:12:13 +0000 (UTC) Received: from mimecast-mx02.redhat.com (mimecast01.extmail.prod.ext.rdu2.redhat.com [10.11.55.17]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 0AC35492C3B for ; Wed, 24 Aug 2022 08:12:13 +0000 (UTC) Received: from us-smtp-1.mimecast.com (us-smtp-1.mimecast.com [207.211.31.81]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id E7A6085A58C for ; Wed, 24 Aug 2022 08:12:12 +0000 (UTC) Received: from smtp-out2.suse.de (smtp-out2.suse.de [195.135.220.29]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_128_GCM_SHA256) id us-mta-389-jA4TXsDIORGVN7Xm-SQiHw-1; Wed, 24 Aug 2022 04:12:11 -0400 X-MC-Unique: jA4TXsDIORGVN7Xm-SQiHw-1 Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by smtp-out2.suse.de (Postfix) with ESMTPS id 089F8200B1; Wed, 24 Aug 2022 08:12:10 +0000 (UTC) Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by imap2.suse-dmz.suse.de (Postfix) with ESMTPS id B5DDF13AE9; Wed, 24 Aug 2022 08:12:09 +0000 (UTC) Received: from dovecot-director2.suse.de ([192.168.254.65]) by imap2.suse-dmz.suse.de with ESMTPSA id YDeEKlndBWNqXwAAMHmgww (envelope-from ); Wed, 24 Aug 2022 08:12:09 +0000 From: mwilck@suse.com To: Christophe Varoqui , Benjamin Marzinski Date: Wed, 24 Aug 2022 10:11:45 +0200 Message-Id: <20220824081147.29270-2-mwilck@suse.com> In-Reply-To: <20220824081147.29270-1-mwilck@suse.com> References: <20220824081147.29270-1-mwilck@suse.com> MIME-Version: 1.0 X-Mimecast-Impersonation-Protect: Policy=CLT - Impersonation Protection Definition; Similar Internal Domain=false; Similar Monitored External Domain=false; Custom External Domain=false; Mimecast External Domain=false; Newly Observed Domain=false; Internal User Name=false; Custom Display Name List=false; Reply-to Address Mismatch=false; Targeted Threat Dictionary=false; Mimecast Threat Dictionary=false; Custom Threat Dictionary=false X-Scanned-By: MIMEDefang 2.85 on 10.11.54.10 Subject: [dm-devel] [PATCH v2 1/3] libmultipath: merge_mptable(): sort table by wwid X-BeenThere: dm-devel@redhat.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: device-mapper development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: dm-devel@redhat.com, Martin Wilck Errors-To: dm-devel-bounces@redhat.com Sender: "dm-devel" X-Scanned-By: MIMEDefang 2.78 on 10.11.54.6 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com From: Martin Wilck If the mptable is very large (for example, in a configuration with lots of maps assigned individual aliases), merge_mptable may get very slow because it needs to make O(n^2) string comparisons (with n being the number of mptable entries). WWID strings often differ only in the last few bytes, causing a lot of CPU time spent in strcmp(). merge_mptable is executed whenever multipath or multipathd is started, that is, also for "multipath -u" and "multipath -U" invocations from udev rules. Optimize it by sorting the mptable before merging. This way we don't need to iterate towards the end of the vector searching for duplicates. Signed-off-by: Martin Wilck --- libmultipath/config.c | 24 ++++++++++++++++++++++-- libmultipath/vector.c | 8 ++++++++ libmultipath/vector.h | 1 + 3 files changed, 31 insertions(+), 2 deletions(-) diff --git a/libmultipath/config.c b/libmultipath/config.c index ab8b26e..18d7159 100644 --- a/libmultipath/config.c +++ b/libmultipath/config.c @@ -520,6 +520,23 @@ merge_mpe(struct mpentry *dst, struct mpentry *src) merge_num(mode); } +static int wwid_compar(const void *p1, const void *p2) +{ + const char *wwid1 = (*(struct mpentry * const *)p1)->wwid; + const char *wwid2 = (*(struct mpentry * const *)p2)->wwid; + int cmp = strcmp(wwid1, wwid2); + + if (cmp) + return cmp; + /* + * qsort by itself is not a stable sorting algorithm: it may permute + * elements with equal keys, which we must avoid because of the way + * merge_mpe() works. Because the function arguments are offsets into + * the array (struct mpentry **), we can simply compare the pointers. + */ + return p1 < p2 ? -1 : p1 > p2 ? 1 : 0; +} + void merge_mptable(vector mptable) { struct mpentry *mp1, *mp2; @@ -533,10 +550,13 @@ void merge_mptable(vector mptable) free_mpe(mp1); continue; } + } + vector_sort(mptable, wwid_compar); + vector_foreach_slot(mptable, mp1, i) { j = i + 1; vector_foreach_slot_after(mptable, mp2, j) { - if (!mp2->wwid || strcmp(mp1->wwid, mp2->wwid)) - continue; + if (strcmp(mp1->wwid, mp2->wwid)) + break; condlog(1, "%s: duplicate multipath config section for %s", __func__, mp1->wwid); merge_mpe(mp2, mp1); diff --git a/libmultipath/vector.c b/libmultipath/vector.c index e2d1ec9..0befe71 100644 --- a/libmultipath/vector.c +++ b/libmultipath/vector.c @@ -208,3 +208,11 @@ int vector_find_or_add_slot(vector v, void *value) vector_set_slot(v, value); return VECTOR_SIZE(v) - 1; } + +void vector_sort(vector v, int (*compar)(const void *, const void *)) +{ + if (!v || !v->slot || !v->allocated) + return; + return qsort((void *)v->slot, v->allocated, sizeof(void *), compar); + +} diff --git a/libmultipath/vector.h b/libmultipath/vector.h index 2862dc2..c0b09cb 100644 --- a/libmultipath/vector.h +++ b/libmultipath/vector.h @@ -89,4 +89,5 @@ extern void vector_repack(vector v); extern void vector_dump(vector v); extern void dump_strvec(vector strvec); extern int vector_move_up(vector v, int src, int dest); +void vector_sort(vector v, int (*compar)(const void *, const void *)); #endif From patchwork Wed Aug 24 08:11:46 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Martin Wilck X-Patchwork-Id: 12953035 X-Patchwork-Delegate: christophe.varoqui@free.fr Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id C8A80C00140 for ; Wed, 24 Aug 2022 08:12:26 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1661328745; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:list-id:list-help: list-unsubscribe:list-subscribe:list-post; bh=KgCf74O+B1v7DJGNDzBXOnR0tBE/+CjyZL44W+8yxa4=; b=Sd1EQg8ouCpU5DCGwicQCLrSqDfccmX69MovsIRFfo960mCz+PfS2+6meKDvIuSSkNjRwR 7H95q7SqnsdpXgJ6p/r6m4GGbiYV8qOmpoxOXq1H9eamzyskCUNQJ3fvu2V1kPzRQf2sjX 92dIR+VG6jJ9kHrU94QuJIeM3gHEvKg= Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-368-sLcG_Y7gOHGDV3_Tun827A-1; Wed, 24 Aug 2022 04:12:22 -0400 X-MC-Unique: sLcG_Y7gOHGDV3_Tun827A-1 Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.rdu2.redhat.com [10.11.54.8]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 09692185A7B2; Wed, 24 Aug 2022 08:12:21 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (unknown [10.30.29.100]) by smtp.corp.redhat.com (Postfix) with ESMTP id EB4A9C15BCA; Wed, 24 Aug 2022 08:12:20 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (localhost [IPv6:::1]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id C4BEF1946A42; Wed, 24 Aug 2022 08:12:20 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.rdu2.redhat.com [10.11.54.7]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id A07C21946A40 for ; Wed, 24 Aug 2022 08:12:19 +0000 (UTC) Received: by smtp.corp.redhat.com (Postfix) id 95FFD1415137; Wed, 24 Aug 2022 08:12:19 +0000 (UTC) Received: from mimecast-mx02.redhat.com (mimecast03.extmail.prod.ext.rdu2.redhat.com [10.11.55.19]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 9270C1415133 for ; Wed, 24 Aug 2022 08:12:19 +0000 (UTC) Received: from us-smtp-1.mimecast.com (us-smtp-2.mimecast.com [207.211.31.81]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 77C75811130 for ; Wed, 24 Aug 2022 08:12:19 +0000 (UTC) Received: from smtp-out1.suse.de (smtp-out1.suse.de [195.135.220.28]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_128_GCM_SHA256) id us-mta-461-QfuvAy8NMZGhTIaonvW8VA-1; Wed, 24 Aug 2022 04:12:11 -0400 X-MC-Unique: QfuvAy8NMZGhTIaonvW8VA-1 Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by smtp-out1.suse.de (Postfix) with ESMTPS id 46E3633D36; Wed, 24 Aug 2022 08:12:10 +0000 (UTC) Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by imap2.suse-dmz.suse.de (Postfix) with ESMTPS id 05F6E13AC0; Wed, 24 Aug 2022 08:12:09 +0000 (UTC) Received: from dovecot-director2.suse.de ([192.168.254.65]) by imap2.suse-dmz.suse.de with ESMTPSA id eE9DO1ndBWNqXwAAMHmgww (envelope-from ); Wed, 24 Aug 2022 08:12:09 +0000 From: mwilck@suse.com To: Christophe Varoqui , Benjamin Marzinski Date: Wed, 24 Aug 2022 10:11:46 +0200 Message-Id: <20220824081147.29270-3-mwilck@suse.com> In-Reply-To: <20220824081147.29270-1-mwilck@suse.com> References: <20220824081147.29270-1-mwilck@suse.com> MIME-Version: 1.0 X-Mimecast-Impersonation-Protect: Policy=CLT - Impersonation Protection Definition; Similar Internal Domain=false; Similar Monitored External Domain=false; Custom External Domain=false; Mimecast External Domain=false; Newly Observed Domain=false; Internal User Name=false; Custom Display Name List=false; Reply-to Address Mismatch=false; Targeted Threat Dictionary=false; Mimecast Threat Dictionary=false; Custom Threat Dictionary=false X-Scanned-By: MIMEDefang 2.85 on 10.11.54.7 Subject: [dm-devel] [PATCH v2 2/3] libmultipath: check_alias_settings(): pre-sort mptable by alias X-BeenThere: dm-devel@redhat.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: device-mapper development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: dm-devel@redhat.com, Martin Wilck Errors-To: dm-devel-bounces@redhat.com Sender: "dm-devel" X-Scanned-By: MIMEDefang 2.85 on 10.11.54.8 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com From: Martin Wilck add_binding() contains an optimization; it assumes that the list of bindings is alphabetically sorted by alias, and tries to maintain this order. But conf->mptable is sorted by wwid. Therefore check_alias_settings() may take a long time if the mptable is large. Create a copy of the mptable, sorted by alias, and use it for add_bindings(). This speeds up check_alias_settings by roughly a factor of 10 (0.1s vs. 1s) for my test setup with 10000 entries in the mptable. Signed-off-by: Martin Wilck --- libmultipath/alias.c | 44 +++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 41 insertions(+), 3 deletions(-) diff --git a/libmultipath/alias.c b/libmultipath/alias.c index 548a118..284092b 100644 --- a/libmultipath/alias.c +++ b/libmultipath/alias.c @@ -672,6 +672,31 @@ static void cleanup_fclose(void *p) fclose(p); } +static int alias_compar(const void *p1, const void *p2) +{ + const char *alias1 = (*(struct mpentry * const *)p1)->alias; + const char *alias2 = (*(struct mpentry * const *)p2)->alias; + int cmp; + + if (alias1 && alias2) + cmp = strcmp(alias1, alias2); + else + /* Move NULL alias to the end */ + cmp = alias1 ? -1 : alias2 ? 1 : 0; + + if (cmp) + return cmp; + + /* Ensure stable sort, see wwid_compar() in config.c */ + return p1 < p2 ? -1 : p1 > p2 ? 1 : 0; +} + +static void cleanup_vector_free(void *arg) +{ + if (arg) + vector_free((vector)arg); +} + /* * check_alias_settings(): test for inconsistent alias configuration * @@ -693,12 +718,24 @@ int check_alias_settings(const struct config *conf) int can_write; int rc = 0, i, fd; Bindings bindings = {.allocated = 0, }; + vector mptable = NULL; struct mpentry *mpe; + mptable = vector_convert(NULL, conf->mptable, struct mpentry *, identity); + if (!mptable) + return -1; + pthread_cleanup_push_cast(free_bindings, &bindings); - vector_foreach_slot(conf->mptable, mpe, i) { - if (!mpe->wwid || !mpe->alias) - continue; + pthread_cleanup_push(cleanup_vector_free, mptable); + + vector_sort(mptable, alias_compar); + vector_foreach_slot(mptable, mpe, i) { + if (!mpe->alias) + /* + * alias_compar() sorts NULL alias at the end, + * so we can stop if we encounter this. + */ + break; if (add_binding(&bindings, mpe->alias, mpe->wwid) == BINDING_CONFLICT) { condlog(0, "ERROR: alias \"%s\" bound to multiple wwids in multipath.conf, " @@ -710,6 +747,7 @@ int check_alias_settings(const struct config *conf) } /* This clears the bindings */ pthread_cleanup_pop(1); + pthread_cleanup_pop(1); pthread_cleanup_push_cast(free_bindings, &bindings); fd = open_file(conf->bindings_file, &can_write, BINDINGS_FILE_HEADER); From patchwork Wed Aug 24 08:11:47 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Martin Wilck X-Patchwork-Id: 12953036 X-Patchwork-Delegate: christophe.varoqui@free.fr Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 6CEF7C00140 for ; Wed, 24 Aug 2022 08:13:04 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1661328783; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:list-id:list-help: list-unsubscribe:list-subscribe:list-post; bh=laV7MnrRrvp6BKiwNf6/q5ekpWJb5uUVoHlrNnxQv0Q=; b=bNUbYSmwfHBggRhNILqxYe8oDZfjJJ6X5wSS4ZHJhX4VY/i6mRfYbLZNfOe2EFbwPZ+ZyE XjYfbjaQSelNkMiau+WdVWXpSx5yEh6Gp7mihbrLN+Y4AStV+F2VNvD/+mf83ELz9jQ2aA V7hRGsMUEo/fha9GdB0Qs0s1AKwqanI= Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-589-iWjzyKiiO7ylMHLHzmv1rQ-1; Wed, 24 Aug 2022 04:12:18 -0400 X-MC-Unique: iWjzyKiiO7ylMHLHzmv1rQ-1 Received: from smtp.corp.redhat.com (int-mx10.intmail.prod.int.rdu2.redhat.com [10.11.54.10]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id E76828039B7; Wed, 24 Aug 2022 08:12:16 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (unknown [10.30.29.100]) by smtp.corp.redhat.com (Postfix) with ESMTP id D72BA492C3B; Wed, 24 Aug 2022 08:12:16 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (localhost [IPv6:::1]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id 990851946A42; Wed, 24 Aug 2022 08:12:16 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.rdu2.redhat.com [10.11.54.7]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id 2FC1E1946A40 for ; Wed, 24 Aug 2022 08:12:15 +0000 (UTC) Received: by smtp.corp.redhat.com (Postfix) id 203181415137; Wed, 24 Aug 2022 08:12:15 +0000 (UTC) Received: from mimecast-mx02.redhat.com (mimecast06.extmail.prod.ext.rdu2.redhat.com [10.11.55.22]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 1C3C01415133 for ; Wed, 24 Aug 2022 08:12:15 +0000 (UTC) Received: from us-smtp-1.mimecast.com (us-smtp-2.mimecast.com [207.211.31.81]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 046BB185A7B2 for ; Wed, 24 Aug 2022 08:12:15 +0000 (UTC) Received: from smtp-out1.suse.de (smtp-out1.suse.de [195.135.220.28]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_128_GCM_SHA256) id us-mta-453-2l2uFIglMhmGu2q8L1uJBA-1; Wed, 24 Aug 2022 04:12:11 -0400 X-MC-Unique: 2l2uFIglMhmGu2q8L1uJBA-1 Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by smtp-out1.suse.de (Postfix) with ESMTPS id 79C2B33D38; Wed, 24 Aug 2022 08:12:10 +0000 (UTC) Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by imap2.suse-dmz.suse.de (Postfix) with ESMTPS id 46E8513AE9; Wed, 24 Aug 2022 08:12:10 +0000 (UTC) Received: from dovecot-director2.suse.de ([192.168.254.65]) by imap2.suse-dmz.suse.de with ESMTPSA id aEp1D1rdBWNqXwAAMHmgww (envelope-from ); Wed, 24 Aug 2022 08:12:10 +0000 From: mwilck@suse.com To: Christophe Varoqui , Benjamin Marzinski Date: Wed, 24 Aug 2022 10:11:47 +0200 Message-Id: <20220824081147.29270-4-mwilck@suse.com> In-Reply-To: <20220824081147.29270-1-mwilck@suse.com> References: <20220824081147.29270-1-mwilck@suse.com> MIME-Version: 1.0 X-Mimecast-Impersonation-Protect: Policy=CLT - Impersonation Protection Definition; Similar Internal Domain=false; Similar Monitored External Domain=false; Custom External Domain=false; Mimecast External Domain=false; Newly Observed Domain=false; Internal User Name=false; Custom Display Name List=false; Reply-to Address Mismatch=false; Targeted Threat Dictionary=false; Mimecast Threat Dictionary=false; Custom Threat Dictionary=false X-Scanned-By: MIMEDefang 2.85 on 10.11.54.7 Subject: [dm-devel] [PATCH v2 3/3] multipath: optimize program startup for frequent invocations X-BeenThere: dm-devel@redhat.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: device-mapper development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: dm-devel@redhat.com, Martin Wilck Errors-To: dm-devel-bounces@redhat.com Sender: "dm-devel" X-Scanned-By: MIMEDefang 2.85 on 10.11.54.10 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com From: Martin Wilck Neither "multipath -u" nor "multipath -U" need initialization of the prioritizers, checkers, and foreign libraries. Also, these commands need not fail if the bindings file is inconsistent. Move these possibly slow initialization steps after these special command invocations. Signed-off-by: Martin Wilck Reviewed-by: Benjamin Marzinski --- multipath/main.c | 33 +++++++++++++++++---------------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/multipath/main.c b/multipath/main.c index 034dd2f..8e5154a 100644 --- a/multipath/main.c +++ b/multipath/main.c @@ -957,11 +957,6 @@ main (int argc, char *argv[]) exit(RTVL_FAIL); } - if (check_alias_settings(conf)) { - fprintf(stderr, "fatal configuration error, aborting"); - exit(RTVL_FAIL); - } - if (optind < argc) { dev = calloc(1, FILE_NAME_SIZE); @@ -988,20 +983,9 @@ main (int argc, char *argv[]) libmp_udev_set_sync_support(1); - if (init_checkers()) { - condlog(0, "failed to initialize checkers"); - goto out; - } - if (init_prio()) { - condlog(0, "failed to initialize prioritizers"); - goto out; - } - if ((cmd == CMD_LIST_SHORT || cmd == CMD_LIST_LONG) && enable_foreign) conf->enable_foreign = strdup(""); - /* Failing here is non-fatal */ - init_foreign(conf->enable_foreign); if (cmd == CMD_USABLE_PATHS) { r = check_usable_paths(conf, dev, dev_type) ? RTVL_FAIL : RTVL_OK; @@ -1036,6 +1020,23 @@ main (int argc, char *argv[]) break; } + if (check_alias_settings(conf)) { + fprintf(stderr, "fatal configuration error, aborting"); + exit(RTVL_FAIL); + } + + if (init_checkers()) { + condlog(0, "failed to initialize checkers"); + goto out; + } + if (init_prio()) { + condlog(0, "failed to initialize prioritizers"); + goto out; + } + + /* Failing here is non-fatal */ + init_foreign(conf->enable_foreign); + if (cmd == CMD_RESET_WWIDS) { struct multipath * mpp; int i;