From patchwork Wed May 30 09:43:34 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: 858585 jemmy X-Patchwork-Id: 10438103 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 2B4B5602BD for ; Wed, 30 May 2018 09:54:05 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 1A3E92888C for ; Wed, 30 May 2018 09:54:05 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 0F1C2288EF; Wed, 30 May 2018 09:54:05 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.8 required=2.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED, FREEMAIL_FROM, MAILING_LIST_MULTI, RCVD_IN_DNSWL_HI, T_DKIM_INVALID autolearn=ham version=3.3.1 Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 7F90B288E8 for ; Wed, 30 May 2018 09:54:04 +0000 (UTC) Received: from localhost ([::1]:37282 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fNxnv-0007LP-R9 for patchwork-qemu-devel@patchwork.kernel.org; Wed, 30 May 2018 05:54:03 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:40466) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fNxeX-0000cD-36 for qemu-devel@nongnu.org; Wed, 30 May 2018 05:44:23 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fNxeS-0006uP-Fh for qemu-devel@nongnu.org; Wed, 30 May 2018 05:44:21 -0400 Received: from mail-pf0-x243.google.com ([2607:f8b0:400e:c00::243]:41051) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fNxeS-0006uD-A4 for qemu-devel@nongnu.org; Wed, 30 May 2018 05:44:16 -0400 Received: by mail-pf0-x243.google.com with SMTP id v63-v6so8745120pfk.8 for ; Wed, 30 May 2018 02:44:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=tutEnQN1b8+0xuMhMGhMt4Xc3KmSHGHA0nVCLjitWMI=; b=l3Y8IDMQjQ3mef0NX3Q5X1WRf2KKIj32RUxW7wvnvnLkuls3N/5Od7D74j5rmvL6b4 c8lXv0YpyD7Bvigw+uRUpg+NpAVe7g741/VhBLutNtGIAkoF1Tyy/QpfRpFr2/W/bC7Q +WDYv4nLGEDOnOxP5R80Ym23j9PoZiA0w3DdTUlmPkrPY3txhdWxw2zMo36pZ/rrm5gN QHfzLSNzyJ08eoTDC/TmQuZZhqurEk8C6u/oGk8ntbXOIkDfXm8naZXuNIhj2ifcrE9+ ULP0152R3vsANy0TnLbpB20ldcJSZqmCKl+QEKLusNGmmqOWtUiQuqriwwkGep05yOUD dxGw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=tutEnQN1b8+0xuMhMGhMt4Xc3KmSHGHA0nVCLjitWMI=; b=hMcfsVPd5Iz1lWVNFcHpQPRz4Gn3EXRARXAvy5kLMWwOk4xo9WcrASypm5tVBP6BFi 1xHeS055fQqQ/oS4PLpOy7tiv5HQvk8CXKgH71Z5rzbehDKOjtnW9FQCnyAWcGB4J9qw 5Jwli1jxec8OoZWz9OK51lI5NwgKGFzOTXjhfr2Q0Co29w3xR3kAxGsfNArCrdr5vcox J1esD9FIBtCdunu4Ago7Wc2lvBjC/UL14HnI0iOlTupegePg/8whN0dydbsbIufxEmqe 9LN7vI1fTMBOMfUmnQvk6Pd6qhMikS7H3FMkpy6vb9zFTVuyzPX+kc0rU5pCBWzYNqOn zprw== X-Gm-Message-State: ALKqPwepP5BhJDVziSUwURn3hKRGE+FPKjOfoaDFenb+0byZFBWDrpp6 V5G7/0hF8wuZXJCBX7F/LTo= X-Google-Smtp-Source: ADUXVKJjheOnV0nnz1XH3x2RAO63Qnw3lfgQGKHGg1XwEypuvVO8VNoS5oXwl+cbmBFts2YL0LVWfg== X-Received: by 2002:a62:2394:: with SMTP id q20-v6mr2083601pfj.1.1527673455477; Wed, 30 May 2018 02:44:15 -0700 (PDT) Received: from VM_93_245_centos.localdomain ([150.109.57.149]) by smtp.gmail.com with ESMTPSA id 29-v6sm60565257pfj.14.2018.05.30.02.44.13 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 30 May 2018 02:44:15 -0700 (PDT) From: Lidong Chen X-Google-Original-From: Lidong Chen To: zhang.zhanghailiang@huawei.com, quintela@redhat.com, dgilbert@redhat.com, berrange@redhat.com, aviadye@mellanox.com, pbonzini@redhat.com Date: Wed, 30 May 2018 17:43:34 +0800 Message-Id: <1527673416-31268-11-git-send-email-lidongchen@tencent.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1527673416-31268-1-git-send-email-lidongchen@tencent.com> References: <1527673416-31268-1-git-send-email-lidongchen@tencent.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400e:c00::243 Subject: [Qemu-devel] [PATCH v4 10/12] migration: create a dedicated thread to release rdma resource X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: adido@mellanox.com, qemu-devel@nongnu.org, Lidong Chen Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" X-Virus-Scanned: ClamAV using ClamSMTP ibv_dereg_mr wait for a long time for big memory size virtual server. The test result is: 10GB 326ms 20GB 699ms 30GB 1021ms 40GB 1387ms 50GB 1712ms 60GB 2034ms 70GB 2457ms 80GB 2807ms 90GB 3107ms 100GB 3474ms 110GB 3735ms 120GB 4064ms 130GB 4567ms 140GB 4886ms this will cause the guest os hang for a while when migration finished. So create a dedicated thread to release rdma resource. Signed-off-by: Lidong Chen --- migration/rdma.c | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/migration/rdma.c b/migration/rdma.c index dfa4f77..1b9e261 100644 --- a/migration/rdma.c +++ b/migration/rdma.c @@ -2979,12 +2979,12 @@ static void qio_channel_rdma_set_aio_fd_handler(QIOChannel *ioc, } } -static int qio_channel_rdma_close(QIOChannel *ioc, - Error **errp) +static void *qio_channel_rdma_close_thread(void *arg) { - QIOChannelRDMA *rioc = QIO_CHANNEL_RDMA(ioc); + QIOChannelRDMA *rioc = arg; RDMAContext *rdmain, *rdmaout; - trace_qemu_rdma_close(); + + rcu_register_thread(); rdmain = rioc->rdmain; if (rdmain) { @@ -3009,6 +3009,19 @@ static int qio_channel_rdma_close(QIOChannel *ioc, g_free(rdmain); g_free(rdmaout); + rcu_unregister_thread(); + return NULL; +} + +static int qio_channel_rdma_close(QIOChannel *ioc, + Error **errp) +{ + QemuThread t; + QIOChannelRDMA *rioc = QIO_CHANNEL_RDMA(ioc); + trace_qemu_rdma_close(); + + qemu_thread_create(&t, "rdma cleanup", qio_channel_rdma_close_thread, + rioc, QEMU_THREAD_DETACHED); return 0; }