From nobody Tue Feb 10 14:31:59 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1602908200; cv=none; d=zohomail.com; s=zohoarc; b=EmAZWDLYhIAGWusOG5x6A75dCdaEHqxVGvb1u06dvu1n2GyJZMvLCgOWGw2TggnR3C/Md6vPHwLlMN2BMsC9xaxcJzTEHDgfBaUMMJ5nxydQxoz6BFJVzaWYh/gTt+AZl+e4+FegmLW4JoYrcOzKeUbqANgd69/qGDI7yXDhqbI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1602908200; h=Content-Type:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=WgN8uU35gIT7QaZiiCSwUgvt5L8t86gIlg2NkmglzeU=; b=TizGBLybWRyi77NJjvkckst9dJXvAaO+3anCVpa4b2RoDNx/TKvS5ACbNs725QCr2npzOOhFA39cElvS130L+u1gGQ34YOvr9mQoclnjPgiQlaLD3DPQdt1cJnh7jzx+3Lj7rGao8nKQRcKgAICDlJJus9MwbErTbQKSWOZltS8= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1602908200279594.285406406511; Fri, 16 Oct 2020 21:16:40 -0700 (PDT) Received: from localhost ([::1]:46638 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kTde3-0005qZ-1j for importer@patchew.org; Sat, 17 Oct 2020 00:16:39 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39988) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kTdXk-000618-BT for qemu-devel@nongnu.org; Sat, 17 Oct 2020 00:10:08 -0400 Received: from szxga07-in.huawei.com ([45.249.212.35]:36936 helo=huawei.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kTdXg-0007I3-Q8 for qemu-devel@nongnu.org; Sat, 17 Oct 2020 00:10:08 -0400 Received: from DGGEMS414-HUB.china.huawei.com (unknown [172.30.72.60]) by Forcepoint Email with ESMTP id 8252E61335AD4405501E; Sat, 17 Oct 2020 12:10:01 +0800 (CST) Received: from huawei.com (10.175.101.6) by DGGEMS414-HUB.china.huawei.com (10.3.19.214) with Microsoft SMTP Server id 14.3.487.0; Sat, 17 Oct 2020 12:09:51 +0800 From: Chuan Zheng To: , Subject: [PATCH v3 17/18] migration/rdma: send data for both rdma-pin-all and NOT rdma-pin-all mode Date: Sat, 17 Oct 2020 12:25:47 +0800 Message-ID: <1602908748-43335-18-git-send-email-zhengchuan@huawei.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1602908748-43335-1-git-send-email-zhengchuan@huawei.com> References: <1602908748-43335-1-git-send-email-zhengchuan@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.175.101.6] X-CFilter-Loop: Reflected Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=45.249.212.35; envelope-from=zhengchuan@huawei.com; helo=huawei.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/10/17 00:10:01 X-ACL-Warn: Detected OS = Linux 3.11 and newer [fuzzy] X-Spam_score_int: -41 X-Spam_score: -4.2 X-Spam_bar: ---- X-Spam_report: (-4.2 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_MED=-2.3, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: yubihong@huawei.com, zhang.zhanghailiang@huawei.com, fengzhimin1@huawei.com, qemu-devel@nongnu.org, xiexiangyou@huawei.com, alex.chen@huawei.com, wanghao232@huawei.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Signed-off-by: Zhimin Feng Signed-off-by: Chuan Zheng --- migration/rdma.c | 67 +++++++++++++++++++++++++++++++++++++++++++++++++++-= ---- 1 file changed, 62 insertions(+), 5 deletions(-) diff --git a/migration/rdma.c b/migration/rdma.c index 327f80f..519fa7a 100644 --- a/migration/rdma.c +++ b/migration/rdma.c @@ -2001,6 +2001,20 @@ static int qemu_rdma_write_one(QEMUFile *f, RDMACont= ext *rdma, .repeat =3D 1, }; =20 + /* use multifd to send data */ + if (migrate_use_multifd()) { + int channel =3D get_multifd_RDMA_channel(); + int ret =3D 0; + MultiFDSendParams *multifd_send_param =3D NULL; + ret =3D get_multifd_send_param(channel, &multifd_send_param); + if (ret) { + error_report("rdma: error getting multifd_send_param(%d)", cha= nnel); + return -EINVAL; + } + rdma =3D (RDMAContext *)multifd_send_param->rdma; + block =3D &(rdma->local_ram_blocks.block[current_index]); + } + retry: sge.addr =3D (uintptr_t)(block->local_host_addr + (current_addr - block->offset)); @@ -2196,6 +2210,27 @@ retry: return 0; } =20 +static int multifd_rdma_write_flush(void) +{ + /* The multifd RDMA threads send data */ + MultiFDSendParams *multifd_send_param =3D NULL; + RDMAContext *rdma =3D NULL; + MigrationState *s =3D migrate_get_current(); + int ret =3D 0; + + ret =3D get_multifd_send_param(s->rdma_channel, + &multifd_send_param); + if (ret) { + error_report("rdma: error getting multifd_send_param(%d)", + s->rdma_channel); + return ret; + } + rdma =3D (RDMAContext *)(multifd_send_param->rdma); + rdma->nb_sent++; + + return ret; +} + /* * Push out any unwritten RDMA operations. * @@ -2218,8 +2253,15 @@ static int qemu_rdma_write_flush(QEMUFile *f, RDMACo= ntext *rdma) } =20 if (ret =3D=3D 0) { - rdma->nb_sent++; - trace_qemu_rdma_write_flush(rdma->nb_sent); + if (migrate_use_multifd()) { + ret =3D multifd_rdma_write_flush(); + if (ret) { + return ret; + } + } else { + rdma->nb_sent++; + trace_qemu_rdma_write_flush(rdma->nb_sent); + } } =20 rdma->current_length =3D 0; @@ -4061,6 +4103,7 @@ wait_reg_complete: } =20 qemu_sem_post(&multifd_send_param->sem_sync); + qemu_sem_wait(&multifd_send_param->sem); } } =20 @@ -4443,6 +4486,7 @@ static void *multifd_rdma_send_thread(void *opaque) Error *local_err =3D NULL; int ret =3D 0; RDMAControlHeader head =3D { .len =3D 0, .repeat =3D 1 }; + RDMAContext *rdma =3D p->rdma; =20 trace_multifd_send_thread_start(p->id); if (multifd_send_initial_packet(p, &local_err) < 0) { @@ -4451,7 +4495,7 @@ static void *multifd_rdma_send_thread(void *opaque) =20 /* wait for semaphore notification to register memory */ qemu_sem_wait(&p->sem_sync); - if (qemu_rdma_registration(p->rdma) < 0) { + if (qemu_rdma_registration(rdma) < 0) { goto out; } /* @@ -4467,13 +4511,26 @@ static void *multifd_rdma_send_thread(void *opaque) break; } qemu_mutex_unlock(&p->mutex); - + /* To complete polling(CQE) */ + while (rdma->nb_sent) { + ret =3D qemu_rdma_block_for_wrid(rdma, RDMA_WRID_RDMA_WRITE, N= ULL); + if (ret < 0) { + error_report("multifd RDMA migration: " + "complete polling error!"); + return NULL; + } + } /* Send FINISHED to the destination */ head.type =3D RDMA_CONTROL_REGISTER_FINISHED; - ret =3D qemu_rdma_exchange_send(p->rdma, &head, NULL, NULL, NULL, = NULL); + ret =3D qemu_rdma_exchange_send(rdma, &head, NULL, NULL, NULL, NUL= L); if (ret < 0) { + error_report("multifd RDMA migration: " + "sending remote error!"); return NULL; } + + /* sync main thread */ + qemu_sem_post(&p->sem); } =20 out: --=20 1.8.3.1