Received: by 2002:a25:7ec1:0:0:0:0:0 with SMTP id z184csp3431605ybc; Mon, 18 Nov 2019 15:25:20 -0800 (PST) X-Google-Smtp-Source: APXvYqyJ/Hkq+qleFUtFieN3UusUOUBjkX/53Ax4O5MZhx1LzMf81MH+E+kQHAa8iB8vkHOCnkzN X-Received: by 2002:a17:906:69cb:: with SMTP id g11mr29829309ejs.328.1574119520610; Mon, 18 Nov 2019 15:25:20 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1574119520; cv=none; d=google.com; s=arc-20160816; b=O2L314kPxbQ5HhRv+A6h1C0OgQ0DK3ni0pFX16ZcOHvZLNzXC9OThtBk2z+xeIDN0e nWgj/DuyUF2MjYLgfhxvaunx4wS3O8yZQs/plOKDz+gOYp4YnQzx1kStOvDYm/ZnhLF3 X4G7W0yjS69AZ07+oGwZJBF8ia1hvFFE4BrBZue+OX5jQLFrzFfcGx7pKEJAC8u8wi/o jnssHcl0SMdYOXdjRB0DGsDVGm0Qmqoy+efE3tm9zxrshXVpET8TbVkdgQ6z8TcFM0i9 ChvjmSPjeiXE/B1112rYLybM2iPIwI36XIEgCoH2lbMFpCsQwIfiqMPRf8uWxBxAHN9S 5ABg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:dkim-signature; bh=+ru3oiVJGOSzmQ20Y9hwMIebz7Ls1+6HbeqrX7l1IXA=; b=HA4ucxlPxYv4l+203bUYeB6vTOQRcTz2x/5PbSjm9btYbxHL8WYXBX9AJ9AXB/9XK5 fd4EGv4M5ohsmlhGuMVEXBgLwnfqhs4pk9dKyKQrzSWTkMc4bRdVrFfDipgDzXr23BD/ gRbFwhm3chD30fP4cnR1mWXfa897PmfKW7ZjXhGJXL0g5yKljKhfneWYqY7zQVuBpemD cFQiW57+Qda/0t+G8LjSPuZTutLdvB7QhxpKcoMvmCsf0f5uwQTpG7ZOCU4SMEGXNMXF xTiWVScGNBxJLDpeODWHr5BqKsPF0Z0YI7VBT8n+kQsC9ZKGpqhlMMHyz7d+Kol8h7jj xDgQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b="v/yB0WZe"; 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=REJECT sp=REJECT dis=NONE) header.from=google.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id v1si13799138edm.285.2019.11.18.15.24.53; Mon, 18 Nov 2019 15:25: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=@google.com header.s=20161025 header.b="v/yB0WZe"; 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=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726922AbfKRXVD (ORCPT + 99 others); Mon, 18 Nov 2019 18:21:03 -0500 Received: from mail-qt1-f195.google.com ([209.85.160.195]:41932 "EHLO mail-qt1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726787AbfKRXVC (ORCPT ); Mon, 18 Nov 2019 18:21:02 -0500 Received: by mail-qt1-f195.google.com with SMTP id o3so22347369qtj.8 for ; Mon, 18 Nov 2019 15:21:00 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=+ru3oiVJGOSzmQ20Y9hwMIebz7Ls1+6HbeqrX7l1IXA=; b=v/yB0WZePg99Q8K7vu4VHprsavdZH0VLG33n0tVY4Hqsw4EBksOMV7ZdTgzFHpV7Fd CrPtoPTgpH7s6TUA/arcQnL7QCZTGngH8dy2G1S8dvpe1pS8M1t0aBGvqxEucfh2tWW9 VDxEn3wc4QMP2vlqJuFihsNb4kosrA9eoIk5k0Oe+XKdzL+LyikCzI6qwukHOFdCcCyi fEBtmQZa+xanaAam7oxpRVD+Q48g2qry4mea8sLIJa4Yhsc7UjnlY03O4zJ/adH+XGpt UB8WmyvryxoQjIxI0bipODT6MpViMrAZAFB6N/bnuLU2BstDhlYqWZA9hybVOZrzjPFQ LQiQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=+ru3oiVJGOSzmQ20Y9hwMIebz7Ls1+6HbeqrX7l1IXA=; b=SOQ1o3dmzHE+Un3OYneUQlbTG8FJ9nZE6bXj6wdi5oNCBxBWwfbCtI0U5zS/cJ/5m8 ZINEwlCfixWpAayASQLLpeQgf7CAJrtbNeQ19sV5mRJmo6hnCVbFKUGoKeW0daXHE2Dp 5nPrlfHvFjq3qXJja1pwZqmJnF6VwFUmwF/ad1cmtFA2S1MDL2Mwy/7k81f6uL47lrAq 0id5KMqLayJwosV1+ncrPqXPHaQ8vwURms0QP9m3kyhxUsE+3249nA2dFVY0tnEfzMe7 zami35jazhCW6XLC4ZKR6rrWz+5IhAn2FLix91pwVrsq5V5zJ9HDpcVI3y6xGsIziCk4 cK0A== X-Gm-Message-State: APjAAAV04JrcQABwRD9FgwToryWOU8fo6CP5PSV9VMIRlcO7tkgXsHrD a0ELroioMhKAqlUe6BSppUJzioHgPwkjqUxf+6ITWQ== X-Received: by 2002:aed:3e41:: with SMTP id m1mr29516913qtf.142.1574119259125; Mon, 18 Nov 2019 15:20:59 -0800 (PST) MIME-Version: 1.0 References: <20191118213811.22017-1-khazhy@google.com> <20191118175648-mutt-send-email-mst@kernel.org> In-Reply-To: <20191118175648-mutt-send-email-mst@kernel.org> From: Khazhismel Kumykov Date: Mon, 18 Nov 2019 15:20:47 -0800 Message-ID: Subject: Re: [PATCH 1/2] virtio_balloon: fix pages_to_free calculation To: "Michael S. Tsirkin" Cc: jasowang@redhat.com, wei.w.wang@intel.com, Linux Kernel Mailing List , virtualization@lists.linux-foundation.org Content-Type: multipart/signed; protocol="application/pkcs7-signature"; micalg=sha-256; boundary="0000000000005382570597a733d4" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org --0000000000005382570597a733d4 Content-Type: text/plain; charset="UTF-8" On Mon, Nov 18, 2019 at 3:09 PM Michael S. Tsirkin wrote: > > > So I really think we should do something like the below instead. > Limit playing with balloon pages so we can gradually limit it to legacy. > Testing, review would be appreciated. > > Signed-off-by: Michael S. Tsirkin > > > diff --git a/drivers/virtio/virtio_balloon.c b/drivers/virtio/virtio_balloon.c > index 226fbb995fb0..7cee05cdf3fb 100644 > --- a/drivers/virtio/virtio_balloon.c > +++ b/drivers/virtio/virtio_balloon.c > @@ -772,6 +772,13 @@ static unsigned long shrink_free_pages(struct virtio_balloon *vb, > return blocks_freed << VIRTIO_BALLOON_FREE_PAGE_ORDER; > } > > +static unsigned long leak_balloon_pages(struct virtio_balloon *vb, > + unsigned long pages_to_free) > +{ > + return leak_balloon(vb, pages_to_free * VIRTIO_BALLOON_PAGES_PER_PAGE) / > + VIRTIO_BALLOON_PAGES_PER_PAGE; > +} > + > static unsigned long shrink_balloon_pages(struct virtio_balloon *vb, > unsigned long pages_to_free) > { > @@ -782,11 +789,9 @@ static unsigned long shrink_balloon_pages(struct virtio_balloon *vb, > * VIRTIO_BALLOON_ARRAY_PFNS_MAX balloon pages, so we call it > * multiple times to deflate pages till reaching pages_to_free. > */ > - while (vb->num_pages && pages_to_free) { > - pages_freed += leak_balloon(vb, pages_to_free) / > - VIRTIO_BALLOON_PAGES_PER_PAGE; > - pages_to_free -= pages_freed; > - } > + while (vb->num_pages && pages_freed < pages_to_free) > + pages_freed += leak_balloon_pages(vb, pages_to_free); > + > update_balloon_size(vb); > > return pages_freed; > @@ -799,7 +804,7 @@ static unsigned long virtio_balloon_shrinker_scan(struct shrinker *shrinker, > struct virtio_balloon *vb = container_of(shrinker, > struct virtio_balloon, shrinker); > > - pages_to_free = sc->nr_to_scan * VIRTIO_BALLOON_PAGES_PER_PAGE; > + pages_to_free = sc->nr_to_scan; > > if (virtio_has_feature(vb->vdev, VIRTIO_BALLOON_F_FREE_PAGE_HINT)) > pages_freed = shrink_free_pages(vb, pages_to_free); > I got confused about shrink_free_pages, since, looking at the operations the function *should* return the same units it takes in. However, it does look like it should be operating on system pages (VIRTIO_BALLOON_FREE_PAGE_ORDER is the order of our real page allocations), so the multiplication on nr_to_scan is where we messed up. OK. Sorry for the mixup :) Your patch looks correct to me. --0000000000005382570597a733d4 Content-Type: application/pkcs7-signature; name="smime.p7s" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="smime.p7s" Content-Description: S/MIME Cryptographic Signature MIIS5wYJKoZIhvcNAQcCoIIS2DCCEtQCAQExDzANBglghkgBZQMEAgEFADALBgkqhkiG9w0BBwGg ghBNMIIEXDCCA0SgAwIBAgIOSBtqDm4P/739RPqw/wcwDQYJKoZIhvcNAQELBQAwZDELMAkGA1UE BhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExOjA4BgNVBAMTMUdsb2JhbFNpZ24gUGVy c29uYWxTaWduIFBhcnRuZXJzIENBIC0gU0hBMjU2IC0gRzIwHhcNMTYwNjE1MDAwMDAwWhcNMjEw NjE1MDAwMDAwWjBMMQswCQYDVQQGEwJCRTEZMBcGA1UEChMQR2xvYmFsU2lnbiBudi1zYTEiMCAG A1UEAxMZR2xvYmFsU2lnbiBIViBTL01JTUUgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC AQoCggEBALR23lKtjlZW/17kthzYcMHHKFgywfc4vLIjfq42NmMWbXkNUabIgS8KX4PnIFsTlD6F GO2fqnsTygvYPFBSMX4OCFtJXoikP2CQlEvO7WooyE94tqmqD+w0YtyP2IB5j4KvOIeNv1Gbnnes BIUWLFxs1ERvYDhmk+OrvW7Vd8ZfpRJj71Rb+QQsUpkyTySaqALXnyztTDp1L5d1bABJN/bJbEU3 Hf5FLrANmognIu+Npty6GrA6p3yKELzTsilOFmYNWg7L838NS2JbFOndl+ce89gM36CW7vyhszi6 6LqqzJL8MsmkP53GGhf11YMP9EkmawYouMDP/PwQYhIiUO0CAwEAAaOCASIwggEeMA4GA1UdDwEB /wQEAwIBBjAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwQwEgYDVR0TAQH/BAgwBgEB/wIB ADAdBgNVHQ4EFgQUyzgSsMeZwHiSjLMhleb0JmLA4D8wHwYDVR0jBBgwFoAUJiSSix/TRK+xsBtt r+500ox4AAMwSwYDVR0fBEQwQjBAoD6gPIY6aHR0cDovL2NybC5nbG9iYWxzaWduLmNvbS9ncy9n c3BlcnNvbmFsc2lnbnB0bnJzc2hhMmcyLmNybDBMBgNVHSAERTBDMEEGCSsGAQQBoDIBKDA0MDIG CCsGAQUFBwIBFiZodHRwczovL3d3dy5nbG9iYWxzaWduLmNvbS9yZXBvc2l0b3J5LzANBgkqhkiG 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 BQUHMAKGNGh0dHA6Ly9zZWN1cmUuZ2xvYmFsc2lnbi5jb20vY2FjZXJ0L2dzaHZzbWltZWNhMS5j cnQwHQYDVR0OBBYEFJ2Vb0jiXUWlD5ibz23a558NzWOgMB8GA1UdIwQYMBaAFMs4ErDHmcB4koyz IZXm9CZiwOA/MEwGA1UdIARFMEMwQQYJKwYBBAGgMgEoMDQwMgYIKwYBBQUHAgEWJmh0dHBzOi8v d3d3Lmdsb2JhbHNpZ24uY29tL3JlcG9zaXRvcnkvMDsGA1UdHwQ0MDIwMKAuoCyGKmh0dHA6Ly9j cmwuZ2xvYmFsc2lnbi5jb20vZ3NodnNtaW1lY2ExLmNybDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0l BBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMEMA0GCSqGSIb3DQEBCwUAA4IBAQCk2Fht/QkHdD9YQlQ/ /BoVlZzl+wg2oB8mPQEGNN49NfSL/ERAGoituF3/Zv+xv6owWk2Xp+sTA69OuAt2wZ4O0pXm2NNb yE0QS1h/jH61IgJY4dU65qPcUYmkEdBDRX3XzR1wmnDc3yelHxlYerMuJFmSM5g4dIjbdpOlHTGh jnWrjPPoGaT9nEbPfTxkahJTybnCIMuQbt8nl2QdV64GhBMCQWbIW1xY6Uv0FZcadQhF1vzhd/OH qGkK98y1Dz/54GBO4A8jOSeDFuh+l2iygTcH16xKfB0XvhoUGdrru24FTEY7p4VTKkw+eJbUvdod PlESVftk7+JISQWxBEYKMYICXjCCAloCAQEwXDBMMQswCQYDVQQGEwJCRTEZMBcGA1UEChMQR2xv YmFsU2lnbiBudi1zYTEiMCAGA1UEAxMZR2xvYmFsU2lnbiBIViBTL01JTUUgQ0EgMQIMROfpbOE2 LmBNcT9PMA0GCWCGSAFlAwQCAQUAoIHUMC8GCSqGSIb3DQEJBDEiBCAfFpLUsSOUMcbI7t7z3aPa paJr9BqnNmCDvgjPp/ZleDAYBgkqhkiG9w0BCQMxCwYJKoZIhvcNAQcBMBwGCSqGSIb3DQEJBTEP Fw0xOTExMTgyMzIwNTlaMGkGCSqGSIb3DQEJDzFcMFowCwYJYIZIAWUDBAEqMAsGCWCGSAFlAwQB FjALBglghkgBZQMEAQIwCgYIKoZIhvcNAwcwCwYJKoZIhvcNAQEKMAsGCSqGSIb3DQEBBzALBglg hkgBZQMEAgEwDQYJKoZIhvcNAQEBBQAEggEAuUdaLvlNOEnBJM/T3JzOLA11L2bf/jlvkJk4A5if Tl182nTOMcSjQ1T1VIha3Vr2zx1lne7dpcKJiy5nv7F5pK+epRReUJX7oY6X18a/1ydwOKM3pGCT GPgyfuMnPE2fEijSphkW8D9fyk8reNWk/oMF2sd4NHP0oKUXHl5JEM2nfClmBmsYIxjzSGJMOmrU MtUjAqZf7hMVpphCdxUnUqrsRnE00vZ9SVKtzMOG4JoC/DtC696PzfLWTayKlsj3o7uFsAs8QTWR a7pOTUJEvFWC/sdQbvlXoXrf/R59Wsl9mSs2MHTUzbW8KmLdObxx1I11zuT4+nTU+9+9lLX98Q== --0000000000005382570597a733d4--