From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from out3-smtp.messagingengine.com (out3-smtp.messagingengine.com [66.111.4.27]) by dpdk.org (Postfix) with ESMTP id 3BEF2292D for ; Sun, 22 Apr 2018 17:11:40 +0200 (CEST) Received: from compute1.internal (compute1.nyi.internal [10.202.2.41]) by mailout.nyi.internal (Postfix) with ESMTP id 708FA2127A; Sun, 22 Apr 2018 11:11:40 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute1.internal (MEProxy); Sun, 22 Apr 2018 11:11:40 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fridaylinux.org; h=cc:date:from:in-reply-to:message-id:references:subject:to :x-me-sender:x-me-sender:x-sasl-enc; s=fm2; bh=a0ikycZwBoDSeip12 E+WXBotKpytXYX17K0IBKb8LcE=; b=dE3MxjLXbr8n2x0OC9pDTxMktjyivfLyb kUZoX9QADa9ghErznqiH0ja5ru99fQNsLVQta5O94HEvljPNPcRS6GyTMQ4UBYtN ozi4N3jCCRAoiEJQ5MhY5xhkk8dYD+sqUIlCSE7OYYFHDctMkWlFdYVKbwKbkCIr zku6UKjSwG1z8LfHhHWeJ/BqZFDpC9/3oNsyV9Qf4Ib393LmZEn/JUf4II1jUuEf R7PatJ2CCNV9FnluKR2UaCu2qNE+yU4eMQRoNVruc61AMXYFVXJs9c9HKWke+uBe 31m0zgB5QoQGDRLqtf9qJ70pcFLhd6oZrcyO765QRn0T3REM5a2IQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:date:from:in-reply-to:message-id :references:subject:to:x-me-sender:x-me-sender:x-sasl-enc; s= fm2; bh=a0ikycZwBoDSeip12E+WXBotKpytXYX17K0IBKb8LcE=; b=IQSeVPY2 x+7+fz6DEQigU0hbpxaOqUs4ticf/5olv5spC0F3tKLjpAUvrMtUx1cxUpRg7ZBV xf2voTrEO2oLk4hpb4S4XhR0LPukvB5shn97x/egFNtC9txKnlvA3b6PqC8XPQO+ HALWsPg6JIkVnhcYnyYu2FN7ZuNG6wraxcqX/p2UMEGFvrUSgclB2RrfBv3vOBmh oSHGL3DEseG7sV2lu0DtREFgNOis/wcJKNirbkv76SaUnwC87FF7F21cFv6lKKgs ytBBzwAWCi+Kpl5wV6JxtSJZ2I55CnrcoJSdNTCmof/jKr2+jD937crLaKAk6N6T hGdQKBU3J35Now== X-ME-Sender: Received: from yuanhanliu-NB0.tencent.com (unknown [223.74.148.66]) by mail.messagingengine.com (Postfix) with ESMTPA id 9A21210260; Sun, 22 Apr 2018 11:11:38 -0400 (EDT) From: Yuanhan Liu To: Maxime Coquelin Cc: Jianfeng Tan , dpdk stable Date: Sun, 22 Apr 2018 23:09:26 +0800 Message-Id: <20180422150949.17523-36-yliu@fridaylinux.org> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20180422150949.17523-1-yliu@fridaylinux.org> References: <20180422150949.17523-1-yliu@fridaylinux.org> Subject: [dpdk-stable] patch 'vhost: avoid concurrency when logging dirty pages' has been queued to LTS release 17.11.2 X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches for DPDK stable branches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 22 Apr 2018 15:11:41 -0000 Hi, FYI, your patch has been queued to LTS release 17.11.2 Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet. It will be pushed if I get no objections before 04/29/18. So please shout if anyone has objections. Thanks. --yliu --- >>From acdf634b3533a5ccb1528ee546ac9dcfb57b8a36 Mon Sep 17 00:00:00 2001 From: Maxime Coquelin Date: Wed, 21 Mar 2018 16:44:13 +0100 Subject: [PATCH] vhost: avoid concurrency when logging dirty pages [ upstream commit 394313fff39d0f994325c47f7eab39daf5dc9e11 ] This patch aims at fixing a migration performance regression faced since atomic operation is used to log pages as dirty when doing live migration. Instead of setting a single bit by doing an atomic read-modify-write operation to log a page as dirty, this patch write 0xFF to the corresponding byte, and so logs 8 page as dirty. The advantage is that it avoids concurrent atomic operations by multiple PMD threads, the drawback is that some clean pages are marked as dirty and so are transferred twice. Fixes: 897f13a1f726 ("vhost: make page logging atomic") Signed-off-by: Maxime Coquelin Reviewed-by: Jianfeng Tan --- lib/librte_vhost/vhost.h | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/lib/librte_vhost/vhost.h b/lib/librte_vhost/vhost.h index c8f2a8176..5c488fa57 100644 --- a/lib/librte_vhost/vhost.h +++ b/lib/librte_vhost/vhost.h @@ -261,18 +261,14 @@ struct virtio_net { #define VHOST_LOG_PAGE 4096 /* - * Atomically set a bit in memory. + * Mark all pages belonging to the same dirty log bitmap byte + * as dirty. The goal is to avoid concurrency between different + * threads doing atomic read-modify-writes on the same byte. */ static __rte_always_inline void -vhost_set_bit(unsigned int nr, volatile uint8_t *addr) -{ - __sync_fetch_and_or_8(addr, (1U << nr)); -} - -static __rte_always_inline void vhost_log_page(uint8_t *log_base, uint64_t page) { - vhost_set_bit(page % 8, &log_base[page / 8]); + log_base[page / 8] = 0xff; } static __rte_always_inline void -- 2.11.0