Received: by 2002:ac0:a5a7:0:0:0:0:0 with SMTP id m36-v6csp1911351imm; Thu, 19 Jul 2018 09:49:22 -0700 (PDT) X-Google-Smtp-Source: AAOMgpeeACFxqQz0aS2JpC4j89TYvCgkAWjPoEIkohigabl24DKgdj0ds8WrIwFTv319vLG20TJO X-Received: by 2002:a62:3545:: with SMTP id c66-v6mr10241063pfa.63.1532018962494; Thu, 19 Jul 2018 09:49:22 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1532018962; cv=none; d=google.com; s=arc-20160816; b=p+2AIhje+csiQkcnD9WE/tW29yRCiHE6NvyMyLhIaF9dEGGhhvGnQH92X0ajDFQe/W X28iami3hanOgTCYbxCHimcLYLpS+uHs+GKdjj6dWXW4BfXfLBgJMyfotOH0d0vicfQH Idc22A4W0wPzBglu9WsItSx/LteHg8nqYEUhYiXN4XvNJ1KEZKwLIZiyPplhY+UJ7OJT RYDE8N6cKpOMKnxTGxHTaKsJpPSh5z6vEpRylUB5x79aSIfC7CKXqJGCiP61f/93COyD N7vAs3GFMECaN8VmOWZKSOyLU1BTTg4ANT5JO/12B/8+7CtADYC543hYjDsD4RBW9CC7 8xTQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding :content-language:in-reply-to:mime-version:user-agent:date :message-id:autocrypt:openpgp:from:references:cc:to:subject :arc-authentication-results; bh=MVdyQ5AbalcHtKWeit2hEiI7rxigMP1BIqjo8f4zih0=; b=U4GUH5R2c22f54n2UJqHdewIB3xsRE/77MCzWo1ABb4/G2CBSrLWFCyiNaRm7AeR2L g+I2kLkIBeutn44jjlwSYWLMXPDM+Z2mIwWyoHPnHez+5+SwTw4IT6o6vrREifFzh+Oo RsBXQVnR32+cC90LTwlVT+dnNbKcDj1QAT3mwmTCaEJNbtp/GOafghWFz2plbaJ8b2ro up4tb+hgb9LXD+eNjMoTlHQ+Aj/5YjZWNzki2BRqDWYkwWVjCbQYlyAAtaqr0Nq7ChEP yI3F5OvYABf1aHCv9GrJlYk64ck4BbcuyOJd/2OuU7tZQboZMQH4ZZWG4tjZEaddtLDZ 3JeQ== 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 w6-v6si6518673pgb.61.2018.07.19.09.49.07; Thu, 19 Jul 2018 09:49:22 -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 S1732096AbeGSRbw (ORCPT + 99 others); Thu, 19 Jul 2018 13:31:52 -0400 Received: from mx3-rdu2.redhat.com ([66.187.233.73]:35960 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1731732AbeGSRbw (ORCPT ); Thu, 19 Jul 2018 13:31:52 -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 ADD994070496; Thu, 19 Jul 2018 16:47:50 +0000 (UTC) Received: from [10.36.117.183] (ovpn-117-183.ams2.redhat.com [10.36.117.183]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 8972B111DCE5; Thu, 19 Jul 2018 16:47:49 +0000 (UTC) Subject: Re: [PATCH v3 2/6] KVM: X86: Implement PV IPIs in linux guest To: =?UTF-8?B?UmFkaW0gS3LEjW3DocWZ?= , Wanpeng Li Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Vitaly Kuznetsov References: <1530598891-21370-1-git-send-email-wanpengli@tencent.com> <1530598891-21370-3-git-send-email-wanpengli@tencent.com> <20180719162826.GB11749@flask> From: Paolo Bonzini Openpgp: preference=signencrypt Autocrypt: addr=pbonzini@redhat.com; prefer-encrypt=mutual; keydata= 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 Message-ID: <1357a0b5-0cd8-8cb5-6c61-c9662219bed0@redhat.com> Date: Thu, 19 Jul 2018 18:47:48 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.8.0 MIME-Version: 1.0 In-Reply-To: <20180719162826.GB11749@flask> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 8bit 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.7]); Thu, 19 Jul 2018 16:47:50 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.7]); Thu, 19 Jul 2018 16:47:50 +0000 (UTC) for IP:'10.11.54.3' DOMAIN:'int-mx03.intmail.prod.int.rdu2.redhat.com' HELO:'smtp.corp.redhat.com' FROM:'pbonzini@redhat.com' RCPT:'' Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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 u64 ipi_bitmap = 0; for_each_cpu(cpu, mask) if (!ipi_bitmap) { min = max = cpu; } else if (cpu < min && max - cpu < 64) { ipi_bitmap <<= min - cpu; min = cpu; } else if (id < min + 64) { max = cpu < max ? max : cpu; } else { /* ... send hypercall... */ min = max = cpu; ipi_bitmap = 0; } __set_bit(ipi_bitmap, cpu - min); } if (ipi_bitmap) { /* ... send hypercall... */ } We could keep the cluster size of 128, but it would be more complicated to do the left shift in the first "else if". If the limit is 64, you can keep the two arguments in the hypercall, and just pass 0 as the "high" bitmap on 64-bit kernels. Paolo > But because it is very similar to x2apic, I'd really need some real > performance data to see if this benefits a real workload. > Hardware could further optimize LAPIC (apicv, vapic) in the future, > which we'd lose by using paravirt. > > e.g. AMD's acceleration should be superior to this when using < 8 VCPUs > as they can use logical xAPIC and send without VM exits (when all VCPUs > are running). >