Received: by 2002:ac0:a5a7:0:0:0:0:0 with SMTP id m36-v6csp1946136imm; Thu, 19 Jul 2018 10:22:54 -0700 (PDT) X-Google-Smtp-Source: AAOMgpdqPHh1S9lXp2ggqncOlSoPx4XtdMxaTEl/xCzMDa66v6cOwuQw6+PG0F9ua0GZsd/AKzbp X-Received: by 2002:a65:62cd:: with SMTP id m13-v6mr10725845pgv.280.1532020974849; Thu, 19 Jul 2018 10:22:54 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1532020974; cv=none; d=google.com; s=arc-20160816; b=X7EZFSG3WcRh776hsTFlE7OsUySeavXxNZ/TYAh65FGwKOerA6VTVKTRW5NCdOT5MW AnS3SOCLLprVTvP9qEfGXEAHtOJH1a/OPHOHlU4a40dZl8/hWOwJ3jNiX5hLQrLf79lV sgtIzG1Wwc9At0qz5u7dXDBunMAueoRP9nPTGPH+f0/Zfv4f+7Rjwzzw8AqTjRxG8Ilt AZeGn9qfOz8WYEcsEb4BDV4nWsVpD6zBJHb8uqpF4VTGVfebtaMYbDugr4QvvCEFwTbp QclFL5P8KIUGvMqqAfZX7CMz+ld9tyuWIkpCh/cGkakcmeS30RhP+LEo6i6BGBliscmQ EwqA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:in-reply-to:content-transfer-encoding :content-disposition:mime-version:references:message-id:subject:cc :to:from:date:arc-authentication-results; bh=KR87oR1USC/eaHG63wjpKVqeXfhymW5lrG7l2T+UerA=; b=p0h8PsGhAVzCtD8LI5UAOVNyXUGyNppCDkjOT7GTvvxhNj67RsjAFiaufReFFNyXLz ZDEgTPJvkMmbrGvpWH/e14iQhlHOduRmTrpa9XKBfbckGKXSVTBEWtr3qje8I+HlxmCi nFHDq6QL6Lry8RY1uRFJMoSN8CSGfCnM3M+CdkIgqvSyL17qPZP7fARpuOmXgAlwoOgP EBkRB1FQ+ec5H3MB8zsbpiX7Ogxv1SR6urEMOoS4P3hZeo4/uOFNxpphuWuMmQOcnqEF l98rfg2c6MLsvCO4uTRYUiefptgEnUVaAeoDewKPfOYYpo+NKXznpXeZ4letW5OsazAU rZvQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=redhat.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id d7-v6si6269912pgc.445.2018.07.19.10.22.39; Thu, 19 Jul 2018 10:22:54 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1732071AbeGSSGN (ORCPT + 99 others); Thu, 19 Jul 2018 14:06:13 -0400 Received: from mx3-rdu2.redhat.com ([66.187.233.73]:51922 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1731442AbeGSSGN (ORCPT ); Thu, 19 Jul 2018 14:06:13 -0400 Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.rdu2.redhat.com [10.11.54.3]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 7AD7ECE1CD; Thu, 19 Jul 2018 17:22:05 +0000 (UTC) Received: from flask (unknown [10.43.2.80]) by smtp.corp.redhat.com (Postfix) with SMTP id 8DBE6111AF0C; Thu, 19 Jul 2018 17:22:03 +0000 (UTC) Received: by flask (sSMTP sendmail emulation); Thu, 19 Jul 2018 19:22:02 +0200 Date: Thu, 19 Jul 2018 19:22:02 +0200 From: Radim =?utf-8?B?S3LEjW3DocWZ?= To: Paolo Bonzini Cc: Wanpeng Li , linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov Subject: Re: [PATCH v3 2/6] KVM: X86: Implement PV IPIs in linux guest Message-ID: <20180719172202.GD11749@flask> References: <1530598891-21370-1-git-send-email-wanpengli@tencent.com> <1530598891-21370-3-git-send-email-wanpengli@tencent.com> <20180719162826.GB11749@flask> <1357a0b5-0cd8-8cb5-6c61-c9662219bed0@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <1357a0b5-0cd8-8cb5-6c61-c9662219bed0@redhat.com> X-Scanned-By: MIMEDefang 2.78 on 10.11.54.3 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.2]); Thu, 19 Jul 2018 17:22:05 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.2]); Thu, 19 Jul 2018 17:22:05 +0000 (UTC) for IP:'10.11.54.3' DOMAIN:'int-mx03.intmail.prod.int.rdu2.redhat.com' HELO:'smtp.corp.redhat.com' FROM:'rkrcmar@redhat.com' RCPT:'' Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 2018-07-19 18:47+0200, Paolo Bonzini: > On 19/07/2018 18:28, Radim Krčmář wrote: > >> + > >> + kvm_hypercall3(KVM_HC_SEND_IPI, ipi_bitmap_low, ipi_bitmap_high, vector); > > and > > > > kvm_hypercall3(KVM_HC_SEND_IPI, ipi_bitmap[0], ipi_bitmap[1], vector); > > > > Still, the main problem is that we can only address 128 APICs. > > > > A simple improvement would reuse the vector field (as we need only 8 > > bits) and put a 'offset' in the rest. The offset would say which > > cluster of 128 are we addressing. 24 bits of offset results in 2^31 > > total addressable CPUs (we probably should even use that many bits). > > The downside of this is that we can only address 128 at a time. > > > > It's basically the same as x2apic cluster mode, only with 128 cluster > > size instead of 16, so the code should be a straightforward port. > > And because x2apic code doesn't seem to use any division by the cluster > > size, we could even try to use kvm_hypercall4, add ipi_bitmap[2], and > > make the cluster size 192. :) > > I did suggest an offset earlier in the discussion. > > The main problem is that consecutive CPU ids do not map to consecutive > APIC ids. But still, we could do an hypercall whenever the total range > exceeds 64. Something like Right, the cluster x2apic implementation came with a second mapping to make this in linear time and send as little IPIs as possible: · /* Collapse cpus in a cluster so a single IPI per cluster is sent */ · for_each_cpu(cpu, tmpmsk) { · · struct cluster_mask *cmsk = per_cpu(cluster_masks, cpu); · · dest = 0; · · for_each_cpu_and(clustercpu, tmpmsk, &cmsk->mask) · · · dest |= per_cpu(x86_cpu_to_logical_apicid, clustercpu); · · if (!dest) · · · continue; · · __x2apic_send_IPI_dest(dest, vector, apic->dest_logical); · · /* Remove cluster CPUs from tmpmask */ · · cpumask_andnot(tmpmsk, tmpmsk, &cmsk->mask); · } I think that the extra memory consumption would be excusable.