From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.4 required=3.0 tests=DKIM_ADSP_ALL,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, MENTIONS_GIT_HOSTING,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 6EB4CC433E2 for ; Tue, 7 Jul 2020 09:39:06 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id 26B90206DF for ; Tue, 7 Jul 2020 09:39:05 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=amazon.com header.i=@amazon.com header.b="id7IJ0wG" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 26B90206DF Authentication-Results: mail.kernel.org; dmarc=fail (p=quarantine dis=none) header.from=amazon.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=owner-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix) id 7E3066B005C; Tue, 7 Jul 2020 05:39:05 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 796AA6B0062; Tue, 7 Jul 2020 05:39:05 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 680806B006C; Tue, 7 Jul 2020 05:39:05 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0065.hostedemail.com [216.40.44.65]) by kanga.kvack.org (Postfix) with ESMTP id 532016B005C for ; Tue, 7 Jul 2020 05:39:05 -0400 (EDT) Received: from smtpin10.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay03.hostedemail.com (Postfix) with ESMTP id CDB988248047 for ; Tue, 7 Jul 2020 09:39:04 +0000 (UTC) X-FDA: 77010781008.10.fact07_4200fcc26eb3 Received: from filter.hostedemail.com (10.5.16.251.rfc1918.com [10.5.16.251]) by smtpin10.hostedemail.com (Postfix) with ESMTP id A3BCB16A046 for ; Tue, 7 Jul 2020 09:39:04 +0000 (UTC) X-HE-Tag: fact07_4200fcc26eb3 X-Filterd-Recvd-Size: 10973 Received: from smtp-fw-9102.amazon.com (smtp-fw-9102.amazon.com [207.171.184.29]) by imf11.hostedemail.com (Postfix) with ESMTP for ; Tue, 7 Jul 2020 09:39:03 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amazon.com; i=@amazon.com; q=dns/txt; s=amazon201209; t=1594114744; x=1625650744; h=from:to:cc:subject:date:message-id:mime-version: content-transfer-encoding; bh=7QoswoiahhrG5EUF3hQrEfiZSC2O10x9Pf/apPsyVeg=; b=id7IJ0wGfEdCPEIE/ZfdWcg9pfltxlH36mlQcjeWUVm0FBVNO8sAnzE1 abGnESOPu2mOFIcCyhWRYg1KUBwUdCyebhetiRWYak6fGwXnzBBi4ISmf Oh5KI+1zMQcjPaSfgSCgPOCCkSP+Iy89uTbUGM8I2+1X99ZYdrtaohHH5 s=; IronPort-SDR: bOwZKzLi7B1NEq6k2ZvFULN0IhlnVpjZDjWC8tV+eJLExrwJMRFlGB1HxE++0/mtaetKNcYQvp WzrQTSHWeqwQ== X-IronPort-AV: E=Sophos;i="5.75,323,1589241600"; d="scan'208";a="57903384" Received: from sea32-co-svc-lb4-vlan3.sea.corp.amazon.com (HELO email-inbound-relay-1a-16acd5e0.us-east-1.amazon.com) ([10.47.23.38]) by smtp-border-fw-out-9102.sea19.amazon.com with ESMTP; 07 Jul 2020 09:38:55 +0000 Received: from EX13MTAUEA002.ant.amazon.com (iad55-ws-svc-p15-lb9-vlan2.iad.amazon.com [10.40.159.162]) by email-inbound-relay-1a-16acd5e0.us-east-1.amazon.com (Postfix) with ESMTPS id 5C143A1F80; Tue, 7 Jul 2020 09:38:43 +0000 (UTC) Received: from EX13D31EUA004.ant.amazon.com (10.43.165.161) by EX13MTAUEA002.ant.amazon.com (10.43.61.77) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Tue, 7 Jul 2020 09:38:42 +0000 Received: from u886c93fd17d25d.ant.amazon.com (10.43.161.203) by EX13D31EUA004.ant.amazon.com (10.43.165.161) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Tue, 7 Jul 2020 09:38:25 +0000 From: SeongJae Park To: CC: SeongJae Park , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , Subject: [RFC v13 0/8] Implement Data Access Monitoring-based Memory Operation Schemes Date: Tue, 7 Jul 2020 11:37:57 +0200 Message-ID: <20200707093805.4775-1-sjpark@amazon.com> X-Mailer: git-send-email 2.17.1 MIME-Version: 1.0 Content-Type: text/plain; charset="UTF-8" X-Originating-IP: [10.43.161.203] X-ClientProxiedBy: EX13D36UWA002.ant.amazon.com (10.43.160.24) To EX13D31EUA004.ant.amazon.com (10.43.165.161) X-Rspamd-Queue-Id: A3BCB16A046 X-Spamd-Result: default: False [0.00 / 100.00] X-Rspamd-Server: rspam03 Content-Transfer-Encoding: quoted-printable X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: From: SeongJae Park Changes from Previous Version =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D - Wordsmith the document, comment, commit messages - Support a scheme of max access count 0 - Use 'unsigned long' for (min|max)_sz_region Introduction =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D DAMON[1] can be used as a primitive for data access awared memory managem= ent optimizations. For that, users who want such optimizations should run DA= MON, read the monitoring results, analyze it, plan a new memory management sch= eme, and apply the new scheme by themselves. Such efforts will be inevitable = for some complicated optimizations. However, in many other cases, the users would simply want the system to a= pply a memory management action to a memory region of a specific size having a specific access frequency for a specific time. For example, "page out a = memory region larger than 100 MiB keeping only rare accesses more than 2 minutes= ", or "Do not use THP for a memory region larger than 2 MiB rarely accessed for= more than 1 seconds". This RFC patchset makes DAMON to handle such data access monitoring-based operation schemes. With this change, users can do the data access aware optimizations by simply specifying their schemes to DAMON. [1] https://lore.kernel.org/linux-mm/20200706115322.29598-1-sjpark@amazon= .com/ Evaluations =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D We evaluated DAMON's overhead, monitoring quality and usefulness using 25 realistic workloads on my QEMU/KVM based virtual machine running a kernel= that v12 of this patchset is applied. An experimental DAMON-based operation scheme for THP, =E2=80=98ethp=E2=80= =99, removes 31.29% of THP memory overheads while preserving 60.64% of THP speedup. Another experimental DAMON-based =E2=80=98proactive reclamation=E2=80=99 implemen= tation, =E2=80=98prcl=E2=80=99, reduces 87.95% of residential sets and 29.52% of system memory footprint = while incurring only 2.15% runtime overhead in the best case (parsec3/freqmine)= . NOTE that the experimentail THP optimization and proactive reclamation ar= e not for production, just only for proof of concepts. Please refer to the official document[1] or "Documentation/admin-guide/mm= : Add a document for DAMON" patch in the latest DAMON patchset for detailed evaluation setup and results. [1] https://damonitor.github.io/doc/html/latest-damos More Information =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D We prepared a showcase web site[1] that you can get more information. Th= ere are - the official documentations[2], - the heatmap format dynamic access pattern of various realistic workload= s for heap area[3], mmap()-ed area[4], and stack[5] area, - the dynamic working set size distribution[6] and chronological working = set size changes[7], and - the latest performance test results[8]. [1] https://damonitor.github.io/_index [2] https://damonitor.github.io/doc/html/latest-damos [3] https://damonitor.github.io/test/result/visual/latest/rec.heatmap.0.h= tml [4] https://damonitor.github.io/test/result/visual/latest/rec.heatmap.1.h= tml [5] https://damonitor.github.io/test/result/visual/latest/rec.heatmap.2.h= tml [6] https://damonitor.github.io/test/result/visual/latest/rec.wss_sz.html [7] https://damonitor.github.io/test/result/visual/latest/rec.wss_time.ht= ml [8] https://damonitor.github.io/test/result/perf/latest/html/index.html Baseline and Complete Git Tree =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D The patches are based on the v5.7 plus v17 DAMON patchset[1] and Minchan'= s ``do_madvise()`` patch[2], which retrieved from the -next tree and slight= ly modified for backporting on v5.7. You can also clone the complete git tr= ee: $ git clone git://github.com/sjp38/linux -b damos/rfc/v13 The web is also available: https://github.com/sjp38/linux/releases/tag/damos/rfc/v13 There are a couple of trees for entire DAMON patchset series that future features are included. The first one[3] contains the changes for latest release, while the other one[4] contains the changes for next release. [1] https://lore.kernel.org/linux-mm/20200706115322.29598-1-sjpark@amazon= .com/ [2] https://lore.kernel.org/linux-mm/20200302193630.68771-2-minchan@kerne= l.org/ [3] https://github.com/sjp38/linux/tree/damon/master [4] https://github.com/sjp38/linux/tree/damon/next Sequence Of Patches =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D The 1st patch allows DAMON to reuse ``madvise()`` code for the actions. = The 2nd patch accounts age of each region. The 3rd patch implements the hand= ling of the schemes in DAMON and exports a kernel space programming interface = for it. The 4th patch implements a debugfs interface for the privileged peop= le and user programs. The 5th patch implements schemes statistics feature for e= asier tuning of the schemes and runtime access pattern analysis. The 6th patch= e adds selftests for these changes, and the 7th patch adds human friendly scheme= s support to the user space tool for DAMON. Finally, the 8th patch documen= ts this new feature in the document. Patch History =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D Changes from RFC v12 (https://lore.kernel.org/linux-mm/20200616073828.16509-1-sjpark@amazon.co= m/) - Wordsmith the document, comment, commit messages - Support a scheme of max access count 0 - Use 'unsigned long' for (min|max)_sz_region Changes from RFC v11 (https://lore.kernel.org/linux-mm/20200609065320.12941-1-sjpark@amazon.co= m/) - Refine the commit messages (David Hildenbrand) - Clean up debugfs code Changes from RFC v10 (https://lore.kernel.org/linux-mm/20200603071138.8152-1-sjpark@amazon.com= /) - Fix the wrong error handling for schemes debugfs file - Handle the schemes stats from the user space tool - Remove the schemes implementation plan from the document Changes from RFC v9 (https://lore.kernel.org/linux-mm/20200526075702.27339-1-sjpark@amazon.co= m/) - Rebase on v5.7 - Fix wrong comments and documents for schemes apply conditions Changes from RFC v8 (https://lore.kernel.org/linux-mm/20200512115343.27699-1-sjpark@amazon.co= m/) - Rewrite the document (Stefan Nuernberger) - Make 'damon_for_each_*' argument order consistent (Leonard Foerster) - Implement statistics for schemes - Avoid races between debugfs readers and writers - Reset age for only significant access frequency changes - Add kernel-doc comments in damon.h Please refer to RFC v8 for previous history SeongJae Park (8): mm/madvise: Export do_madvise() to external GPL modules mm/damon: Account age of target regions mm/damon: Implement data access monitoring-based operation schemes mm/damon/schemes: Implement a debugfs interface mm/damon/schemes: Implement statistics feature mm/damon/selftests: Add 'schemes' debugfs tests damon/tools: Support more human friendly 'schemes' control Documentation/admin-guide/mm: Document DAMON-based operation schemes Documentation/admin-guide/mm/damon/guide.rst | 41 ++- Documentation/admin-guide/mm/damon/plans.rst | 24 +- Documentation/admin-guide/mm/damon/start.rst | 11 + Documentation/admin-guide/mm/damon/usage.rst | 124 ++++++- include/linux/damon.h | 66 ++++ mm/damon.c | 344 +++++++++++++++++- mm/madvise.c | 1 + tools/damon/_convert_damos.py | 141 +++++++ tools/damon/_damon.py | 27 +- tools/damon/damo | 7 + tools/damon/schemes.py | 110 ++++++ .../testing/selftests/damon/debugfs_attrs.sh | 29 ++ 12 files changed, 880 insertions(+), 45 deletions(-) create mode 100755 tools/damon/_convert_damos.py create mode 100644 tools/damon/schemes.py --=20 2.17.1