Received: by 2002:a25:8b91:0:0:0:0:0 with SMTP id j17csp5106877ybl; Tue, 10 Dec 2019 00:08:30 -0800 (PST) X-Google-Smtp-Source: APXvYqz6u24GN3b4kXX9QdUlV5eFu79dGt+58WP5MBAUvDWGsyqkG9mkobGYb5bkYSUQdW/I2uT7 X-Received: by 2002:a05:6808:35a:: with SMTP id j26mr2953676oie.163.1575965310313; Tue, 10 Dec 2019 00:08:30 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1575965310; cv=none; d=google.com; s=arc-20160816; b=ZzrBHQJcx1/x+2cyjX+NJlzU7AHL9VIXiNh5vbFwisWgh+y4ppUyIY8Oro1KGt6+fp 3OeTGvSWhnpuMKirPjnu9i+ccrR+6GuYG8cZoIl7s189StapL5gLOL3RX9xMqN/PlK7s GMiDxZdXAog72ck6sRvF0ZBz7EoNgCqVDK88ZlE/kneKqFFLyyJf4LOsKq8OzwRrJJ1F 602j3ptR1c+fsM9WvUhOHz4zAxvYrFJVdzaJVkk6T+INPQBxMJKrthsaLQYTJvnxN+RO MOEL2RTOUSLl0Knes2hZxIbyu8jc3Gdfo0UC1ohUEjokf6BfyN93CnKdh2n61TCpsvDr ZxHg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:dkim-signature; bh=QwGsEms4piE9a2DBjMxlpqS/fTzaKgAUBvTe2FzVG7A=; b=MJ1BQ0eoxDklUCvkL89GQGXqYeq26Oe//gIybqzZ+uLtkR8Ta0GrsV8/Ir4Zt/2Gbh cq1Y8x9P9iehywm+HTL8981P6C3mWIsSeW3spqZPDZyuaGQUA644Bq+K5xInW8nYTFPb /5npElCblWIXJ1dMRTPJfxaPxyJwxyH6sjX+ayrvTkuUSBt1aetZ4NU5jkxei9ZBPYAO xPZ3zxkccMKCHaR8GnwLXZp7U968HuWRrJKCBWvpPKG9b8YRpK1VTLzs1Bv6GAHBMWTm rZnFPTrp8WA5zhpJbmkmh+TIDI4CtRjnqCNuXmmNYo153jg4DjeMOC13sPI5PllrpztZ fNNQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=lPza1JEH; 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=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id r22si1344169otn.192.2019.12.10.00.08.16; Tue, 10 Dec 2019 00:08:30 -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=@gmail.com header.s=20161025 header.b=lPza1JEH; 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=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726888AbfLJIGs (ORCPT + 99 others); Tue, 10 Dec 2019 03:06:48 -0500 Received: from mail-wr1-f67.google.com ([209.85.221.67]:38215 "EHLO mail-wr1-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726974AbfLJIGp (ORCPT ); Tue, 10 Dec 2019 03:06:45 -0500 Received: by mail-wr1-f67.google.com with SMTP id y17so18893374wrh.5; Tue, 10 Dec 2019 00:06:44 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=QwGsEms4piE9a2DBjMxlpqS/fTzaKgAUBvTe2FzVG7A=; b=lPza1JEHlTNKLzFDCDRnVo7HF92gkuhkIa1h7FjUOXfSbg8cJNbwj22lMhzGmLWQM9 EuWz/6RijlKpCghZcVe3rWIOXVZ+A9aqVJpF6BsEL2ih8fTyYXlYEfgwFVcxcG+UZh0b In2tw6g7OqQrdDqrIU2uDeX8GfA7NdmDamY7upGqhCceTUDRnF0kmdlKLR3NJx75Co12 CMcB9hXFxUxJer4fTd1qBw5yf9v4G/6MTQPWhgB+sRzuVRo/hUuVXnquQbiWhxJixdCw 1ambSMWkD03j7VE0keCQ0T8J0Bl0P7Q38teIHMQNLfq/p+ufiRsQ8xEwzGBeKIMMBmRP bhMg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=QwGsEms4piE9a2DBjMxlpqS/fTzaKgAUBvTe2FzVG7A=; b=WJou7sMHGbjW+91tCbnsA7ddzFBa/0TmMhEvNFeHkkSLZV0delqg5eNJ3lq8IyPF1l WfAG7i9XfD8p/yazG38UHWmjGhNP+pBxb4ppqWnOHly5uhNbny28BcQS/2YofXDKgD3B vETP4BFp3g08XQtsTQ1dG9GnY3UC27Qcrg9b/NfWz4a09UOAzRsQ78i+8rgTDpeV/Opo 5RA+pwXY8gYrWazwC92W5H4r1eSPTvL7pjNNGw/gjPAEnHUwTr1zbgjOSJKhbnAQBgGO 2k1XvSA3gD1K4K/xXvDhq2TeRpvCzVCPVqp7ye1TVoA6NCFizGPYCnn4f4si6WmlSv4X /RVw== X-Gm-Message-State: APjAAAVLVuZjdb/JzJ7Fuwa7dPdpKCds8pWTwBeQzM+2jF09MO+h1wbV mp2/3j4MosZANOqkWKy7mA0= X-Received: by 2002:adf:e812:: with SMTP id o18mr1543550wrm.127.1575965204034; Tue, 10 Dec 2019 00:06:44 -0800 (PST) Received: from localhost.localdomain (x2f7fae7.dyn.telefonica.de. [2.247.250.231]) by smtp.gmail.com with ESMTPSA id a16sm2342587wrt.37.2019.12.10.00.06.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 10 Dec 2019 00:06:43 -0800 (PST) From: SeongJae Park X-Google-Original-From: SeongJae Park To: sjpark@amazon.com Cc: axboe@kernel.dk, konrad.wilk@oracle.com, linux-block@vger.kernel.org, linux-kernel@vger.kernel.org, pdurrant@amazon.com, roger.pau@citrix.com, sj38.park@gmail.com, xen-devel@lists.xenproject.org, SeongJae Park Subject: [PATCH v5 1/2] xenbus/backend: Add memory pressure handler callback Date: Tue, 10 Dec 2019 08:06:27 +0000 Message-Id: <20191210080628.5264-2-sjpark@amazon.de> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20191210080628.5264-1-sjpark@amazon.de> References: <20191210080628.5264-1-sjpark@amazon.de> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Granting pages consumes backend system memory. In systems configured with insufficient spare memory for those pages, it can cause a memory pressure situation. However, finding the optimal amount of the spare memory is challenging for large systems having dynamic resource utilization patterns. Also, such a static configuration might lack a flexibility. To mitigate such problems, this commit adds a memory reclaim callback to 'xenbus_driver'. Using this facility, 'xenbus' would be able to monitor a memory pressure and request specific devices of specific backend drivers which causing the given pressure to voluntarily release its memory. That said, this commit simply requests every callback registered driver to release its memory for every domain, rather than issueing the requests to the drivers and the domain in charge. Such things will be done in a futur. Also, this commit focuses on memory only. However, it would be ablt to be extended for general resources. Signed-off-by: SeongJae Park --- drivers/xen/xenbus/xenbus_probe_backend.c | 31 +++++++++++++++++++++++ include/xen/xenbus.h | 1 + 2 files changed, 32 insertions(+) diff --git a/drivers/xen/xenbus/xenbus_probe_backend.c b/drivers/xen/xenbus/xenbus_probe_backend.c index b0bed4faf44c..5a5ba29e39df 100644 --- a/drivers/xen/xenbus/xenbus_probe_backend.c +++ b/drivers/xen/xenbus/xenbus_probe_backend.c @@ -248,6 +248,34 @@ static int backend_probe_and_watch(struct notifier_block *notifier, return NOTIFY_DONE; } +static int xenbus_backend_reclaim(struct device *dev, void *data) +{ + struct xenbus_driver *drv; + if (!dev->driver) + return -ENOENT; + drv = to_xenbus_driver(dev->driver); + if (drv && drv->reclaim) + drv->reclaim(to_xenbus_device(dev)); + return 0; +} + +/* + * Returns 0 always because we are using shrinker to only detect memory + * pressure. + */ +static unsigned long xenbus_backend_shrink_count(struct shrinker *shrinker, + struct shrink_control *sc) +{ + bus_for_each_dev(&xenbus_backend.bus, NULL, NULL, + xenbus_backend_reclaim); + return 0; +} + +static struct shrinker xenbus_backend_shrinker = { + .count_objects = xenbus_backend_shrink_count, + .seeks = DEFAULT_SEEKS, +}; + static int __init xenbus_probe_backend_init(void) { static struct notifier_block xenstore_notifier = { @@ -264,6 +292,9 @@ static int __init xenbus_probe_backend_init(void) register_xenstore_notifier(&xenstore_notifier); + if (register_shrinker(&xenbus_backend_shrinker)) + pr_warn("shrinker registration failed\n"); + return 0; } subsys_initcall(xenbus_probe_backend_init); diff --git a/include/xen/xenbus.h b/include/xen/xenbus.h index 869c816d5f8c..cdb075e4182f 100644 --- a/include/xen/xenbus.h +++ b/include/xen/xenbus.h @@ -104,6 +104,7 @@ struct xenbus_driver { struct device_driver driver; int (*read_otherend_details)(struct xenbus_device *dev); int (*is_ready)(struct xenbus_device *dev); + unsigned (*reclaim)(struct xenbus_device *dev); }; static inline struct xenbus_driver *to_xenbus_driver(struct device_driver *drv) -- 2.17.1