Received: by 2002:a25:1506:0:0:0:0:0 with SMTP id 6csp4801509ybv; Tue, 11 Feb 2020 03:47:20 -0800 (PST) X-Google-Smtp-Source: APXvYqzZSq23Ox+A7FSM9lYMbn/D63UhxzA6+CsAZ9gHxWCHB7oilgMpDlNrYoFd/WuggUTQn9U/ X-Received: by 2002:a05:6830:154a:: with SMTP id l10mr4944392otp.44.1581421640760; Tue, 11 Feb 2020 03:47:20 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1581421640; cv=none; d=google.com; s=arc-20160816; b=hO01JhxYHCNC4B7hLQeoju1mZDsT1f7niEc/DjLlX8tDTnviQ1nGz0BBGqIBdQwO6J ERvw7N+p6k1bDKjMMjZKnzfLBxXgon5dtgnmwwtxnHviW/b5XqwvD+7+SBT8XJMz0gJY WINgpif1o5/MAC2t10EG2z4y0RzBqqw7wIH6Ict3lXrlmUUFW6VsTpQLEjPEGp9n+tns 5pqPhcY/mUwF3ChbZNFdAyN9v0QYHheWaoXXan7mE42RTnU9AHAvrWS3OdzjNlr7Oj+8 hvokEBl96+TrM2Bn01dyGVSh7r4CafrRNXGYMdTW7QEtFuOK5QAKmf+IPjcsAu9g20wj CRTw== 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:organization:autocrypt:from:references:cc:to:subject :dkim-signature; bh=aa12nrPdXRCXi0DpMjeRsGmvvZHuC0T/W7CViGSTKaU=; b=iRXj7U51rP/mymWKEgZvrs7tTYundL/DAU2n5WgtDhIr0tK8f3WFgULIgM1CliEiGl NWEqCMz3o5f/kc4iTZyKPpxIheosD53eS1tcK5X4+FWNrosfNvfmBXN3ls3fr8CQqHwq 4jxCQ9hwmtnfRCF+LtJv+ghg7lqIbReNL07bLdLtazAEf2BOgYXc08r2sBkcN3y6+6s0 T1sKJBCHcjbUx1Tq2jwBuo/r8J7VLuGxMiJW/ycO0dNHNo3w5zfjngbn8KPrlgJTu47r WndB2hckrZC1pVpvPHt6BmS1aj8SW13J/B8kTlM+8RtwgbeTmRTLM9KigM4h4awMqd9J puQA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=gib1liS2; 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=pass (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 h18si1783456otk.227.2020.02.11.03.47.09; Tue, 11 Feb 2020 03:47:20 -0800 (PST) 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; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=gib1liS2; 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=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728499AbgBKLEW (ORCPT + 99 others); Tue, 11 Feb 2020 06:04:22 -0500 Received: from us-smtp-2.mimecast.com ([207.211.31.81]:52788 "EHLO us-smtp-delivery-1.mimecast.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1727561AbgBKLEV (ORCPT ); Tue, 11 Feb 2020 06:04:21 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1581419060; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:autocrypt:autocrypt; bh=aa12nrPdXRCXi0DpMjeRsGmvvZHuC0T/W7CViGSTKaU=; b=gib1liS2B8ol+9KNPBmjFDuLS1ZaNOdb7IzMnlrFuKBuoNdQ2mnP6j6XgBYYVFuvD5QIYA LoFNn48hJJ3KAVyJLYJ8qOX+Mlz3yWSriU58LSqS2ovnb+JdPVxkBtcL250NTm5ZuhIihV ldgKUKqXIna5iut3gsdVvHvNbwrs7bQ= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-351-eGNPQViHN5WXs1PcGFLEFQ-1; Tue, 11 Feb 2020 06:04:15 -0500 X-MC-Unique: eGNPQViHN5WXs1PcGFLEFQ-1 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 1CF43107ACC9; Tue, 11 Feb 2020 11:04:13 +0000 (UTC) Received: from [10.36.117.14] (ovpn-117-14.ams2.redhat.com [10.36.117.14]) by smtp.corp.redhat.com (Postfix) with ESMTP id E6A815C1B2; Tue, 11 Feb 2020 11:03:57 +0000 (UTC) Subject: Re: [PATCH v16.1 6/9] virtio-balloon: Add support for providing free page reports to host To: Alexander Duyck , kvm@vger.kernel.org, mst@redhat.com, linux-kernel@vger.kernel.org, willy@infradead.org, mhocko@kernel.org, linux-mm@kvack.org, akpm@linux-foundation.org, mgorman@techsingularity.net, vbabka@suse.cz Cc: yang.zhang.wz@gmail.com, nitesh@redhat.com, konrad.wilk@oracle.com, pagupta@redhat.com, riel@surriel.com, lcapitulino@redhat.com, dave.hansen@intel.com, wei.w.wang@intel.com, aarcange@redhat.com, pbonzini@redhat.com, dan.j.williams@intel.com, alexander.h.duyck@linux.intel.com, osalvador@suse.de References: <20200122173040.6142.39116.stgit@localhost.localdomain> <20200122174347.6142.92803.stgit@localhost.localdomain> From: David Hildenbrand Autocrypt: addr=david@redhat.com; prefer-encrypt=mutual; keydata= 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 Organization: Red Hat GmbH Message-ID: Date: Tue, 11 Feb 2020 12:03:57 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.4.1 MIME-Version: 1.0 In-Reply-To: <20200122174347.6142.92803.stgit@localhost.localdomain> Content-Type: text/plain; charset=utf-8 Content-Language: en-US X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 Content-Transfer-Encoding: quoted-printable Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 22.01.20 18:43, Alexander Duyck wrote: > From: Alexander Duyck >=20 > Add support for the page reporting feature provided by virtio-balloon. > Reporting differs from the regular balloon functionality in that is is > much less durable than a standard memory balloon. Instead of creating a > list of pages that cannot be accessed the pages are only inaccessible > while they are being indicated to the virtio interface. Once the > interface has acknowledged them they are placed back into their respect= ive > free lists and are once again accessible by the guest system. >=20 > Unlike a standard balloon we don't inflate and deflate the pages. Inste= ad > we perform the reporting, and once the reporting is completed it is > assumed that the page has been dropped from the guest and will be fault= ed > back in the next time the page is accessed. >=20 > Acked-by: Michael S. Tsirkin > Reviewed-by: David Hildenbrand > Signed-off-by: Alexander Duyck > --- > drivers/virtio/Kconfig | 1 + > drivers/virtio/virtio_balloon.c | 64 +++++++++++++++++++++++++++= ++++++++ > include/uapi/linux/virtio_balloon.h | 1 + > 3 files changed, 66 insertions(+) >=20 > diff --git a/drivers/virtio/Kconfig b/drivers/virtio/Kconfig > index 078615cf2afc..4b2dd8259ff5 100644 > --- a/drivers/virtio/Kconfig > +++ b/drivers/virtio/Kconfig > @@ -58,6 +58,7 @@ config VIRTIO_BALLOON > tristate "Virtio balloon driver" > depends on VIRTIO > select MEMORY_BALLOON > + select PAGE_REPORTING > ---help--- > This driver supports increasing and decreasing the amount > of memory within a KVM guest. > diff --git a/drivers/virtio/virtio_balloon.c b/drivers/virtio/virtio_ba= lloon.c > index 40bb7693e3de..a07b9e18a292 100644 > --- a/drivers/virtio/virtio_balloon.c > +++ b/drivers/virtio/virtio_balloon.c > @@ -19,6 +19,7 @@ > #include > #include > #include > +#include > =20 > /* > * Balloon device works in 4K page units. So each page is pointed to = by > @@ -47,6 +48,7 @@ enum virtio_balloon_vq { > VIRTIO_BALLOON_VQ_DEFLATE, > VIRTIO_BALLOON_VQ_STATS, > VIRTIO_BALLOON_VQ_FREE_PAGE, > + VIRTIO_BALLOON_VQ_REPORTING, > VIRTIO_BALLOON_VQ_MAX > }; > =20 > @@ -114,6 +116,10 @@ struct virtio_balloon { > =20 > /* To register a shrinker to shrink memory upon memory pressure */ > struct shrinker shrinker; > + > + /* Free page reporting device */ > + struct virtqueue *reporting_vq; > + struct page_reporting_dev_info pr_dev_info; > }; > =20 > static struct virtio_device_id id_table[] =3D { > @@ -153,6 +159,33 @@ static void tell_host(struct virtio_balloon *vb, s= truct virtqueue *vq) > =20 > } > =20 > +int virtballoon_free_page_report(struct page_reporting_dev_info *pr_de= v_info, > + struct scatterlist *sg, unsigned int nents) > +{ > + struct virtio_balloon *vb =3D > + container_of(pr_dev_info, struct virtio_balloon, pr_dev_info); > + struct virtqueue *vq =3D vb->reporting_vq; > + unsigned int unused, err; > + > + /* We should always be able to add these buffers to an empty queue. *= / > + err =3D virtqueue_add_inbuf(vq, sg, nents, vb, GFP_NOWAIT | __GFP_NOW= ARN); > + > + /* > + * In the extremely unlikely case that something has occurred and we > + * are able to trigger an error we will simply display a warning > + * and exit without actually processing the pages. > + */ > + if (WARN_ON_ONCE(err)) > + return err; > + > + virtqueue_kick(vq); > + > + /* When host has read buffer, this completes via balloon_ack */ > + wait_event(vb->acked, virtqueue_get_buf(vq, &unused)); > + > + return 0; > +} Did you see the discussion regarding unifying handling of inflate/deflate/free_page_hinting_free_page_reporting, requested by Michael? I think free page reporting is special and shall be left alone. VIRTIO_BALLOON_F_REPORTING is nothing but a more advanced inflate, right (sg, inflate based on size - not "virtio pages")? And you rely on deflates not being required before reusing an inflated page. I suggest the following: /* New interface (+ 2 virtqueues) to inflate/deflate using a SG */ VIRTIO_BALLOON_F_SG /* * No need to deflate when reusing pages (once the inflate request was * processed). Applies to all inflate queues. */ VIRTIO_BALLOON_F_OPTIONAL_DEFLATE And two new virtqueues VIRTIO_BALLOON_VQ_INFLATE_SG VIRTIO_BALLOON_VQ_DEFLATE_SG Your feature would depend on VIRTIO_BALLOON_F_SG && VIRTIO_BALLOON_F_OPTIONAL_DEFLATE. VIRTIO_BALLOON_F_OPTIONAL_DEFLATE could be reused to avoid deflating on certain events (e.g., from OOM/shrinker). Thoughts? --=20 Thanks, David / dhildenb