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 Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 4C51AC433F5 for ; Tue, 8 Feb 2022 09:16:32 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234747AbiBHJQb (ORCPT ); Tue, 8 Feb 2022 04:16:31 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58350 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1353379AbiBHJQb (ORCPT ); Tue, 8 Feb 2022 04:16:31 -0500 Received: from mail-io1-xd2d.google.com (mail-io1-xd2d.google.com [IPv6:2607:f8b0:4864:20::d2d]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6E23DC03FEC1 for ; Tue, 8 Feb 2022 01:16:29 -0800 (PST) Received: by mail-io1-xd2d.google.com with SMTP id h7so20299508iof.3 for ; Tue, 08 Feb 2022 01:16:29 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:content-transfer-encoding:in-reply-to; bh=O/lx//nLUVMx2EI4vj5HKtagrUsb3ZYCM82TQ4lEins=; b=GNZIO6/kuk+ic9l6Cd+p/G1mclOH/q3G/vT9SOJqWStL42meaNn/c/wFxfOu3vH9z1 uOLAzQrhJq95IkE+TOApdAN1ebRCQvgTw7uDwp8aJjVbau9Q2hRunsd/UW0wOVvjYwd1 LcpnpZOyuC0DTMEJBpVE1aNfStAYiHEPBjeyFGgD6lSx1oXM4Le3EOGAoBFH3e2WoeDV uIQBx1oy/xTb+3xXbPXk86a1+F/MI5UOjandFhzeQffQ3GTJisprjuAegNuPLc1FAiS7 JphN+alAke3aQBct32r7k9yuTI6pGb/AYKbCAvQdosBGvl25eO7UHSAH5rqstI1IASX8 bjWA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:content-transfer-encoding :in-reply-to; bh=O/lx//nLUVMx2EI4vj5HKtagrUsb3ZYCM82TQ4lEins=; b=0ojKj6FlB4DcQUG2OtO9CsODfcNQVK4F1xRpSZu1QtcKJR8QVcElrXQiwGNy0WOkQ2 RXpkHZIQkrAP3fXWtC8/svFFMjMJIeX1R+sMIGNRBlfPbkYY54HRrylTTYk5iHy36cOl EM7cW1PVNfnZl2QSss+arMY1vYZsRe1KR7vz+1eqbQpa6PXuzLb7lb4SGehA1SMSCOac uowG+L4XOOHyykmnPwxlWKm471ILHzx+kucosapU4DHzTp76tYZwR3k9+EZC1nEciS1X bEXcMelNJbLU/ovsUaYKMlsPcQImRayDxMnjfjqy3fL+YND2amhbM+N4JvBFEw8LAioj uUfQ== X-Gm-Message-State: AOAM533/dB3pLEtreM2vCsYckuxVhZXUUbnegaHfbcJNUPW4dmsHycqI x3vDUzQ4pj90BwnKpX7l8G3r9A== X-Google-Smtp-Source: ABdhPJw5yaI9Ui9SJAQTv5l/nY/N9q1YxRO/3oThR7TlMGDQjGNGWfY/7ovjRm8eOUtzjrPfeX8IwA== X-Received: by 2002:a05:6638:1028:: with SMTP id n8mr1757754jan.318.1644311788671; Tue, 08 Feb 2022 01:16:28 -0800 (PST) Received: from google.com ([2620:15c:183:200:5f31:19c3:21f5:7300]) by smtp.gmail.com with ESMTPSA id k11sm7556042iob.23.2022.02.08.01.16.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 08 Feb 2022 01:16:27 -0800 (PST) Date: Tue, 8 Feb 2022 02:16:24 -0700 From: Yu Zhao To: Barry Song <21cnbao@gmail.com> Cc: Andrew Morton , Linus Torvalds , Andi Kleen , Catalin Marinas , Dave Hansen , Hillf Danton , Jens Axboe , Jesse Barnes , Johannes Weiner , Jonathan Corbet , Matthew Wilcox , Mel Gorman , Michael Larabel , Michal Hocko , Rik van Riel , Vlastimil Babka , Will Deacon , Ying Huang , LAK , Linux Doc Mailing List , LKML , Linux-MM , page-reclaim@google.com, x86 Subject: Re: [PATCH v6 0/9] Multigenerational LRU Framework Message-ID: References: <20220104202227.2903605-1-yuzhao@google.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: Precedence: bulk List-ID: X-Mailing-List: linux-doc@vger.kernel.org On Fri, Jan 28, 2022 at 09:54:09PM +1300, Barry Song wrote: > On Tue, Jan 25, 2022 at 7:48 PM Yu Zhao wrote: > > > > On Sun, Jan 23, 2022 at 06:43:06PM +1300, Barry Song wrote: > > > On Wed, Jan 5, 2022 at 7:17 PM Yu Zhao wrote: > > > > > > > > > > Large-scale deployments > > > > ----------------------- > > > > We've rolled out MGLRU to tens of millions of Chrome OS users and > > > > about a million Android users. Google's fleetwide profiling [13] shows > > > > an overall 40% decrease in kswapd CPU usage, in addition to > > > > > > Hi Yu, > > > > > > Was the overall 40% decrease of kswap CPU usgae seen on x86 or arm64? > > > And I am curious how much we are taking advantage of NONLEAF_PMD_YOUNG. > > > Does it help a lot in decreasing the cpu usage? > > > > Hi Barry, > > > > The fleet-wide profiling data I shared was from x86. For arm64, I only > > have data from synthetic benchmarks at the moment, and it also shows > > similar improvements. > > > > For Chrome OS (individual users), walk_pte_range(), the function that > > would benefit from ARCH_HAS_NONLEAF_PMD_YOUNG, only uses a small > > portion (<4%) of kswapd CPU time. So ARCH_HAS_NONLEAF_PMD_YOUNG isn't > > that helpful. > > Hi Yu, > Thanks! > > In the current kernel, depending on reverse mapping, while memory is > under pressure, > the cpu usage of kswapd can be very very high especially while a lot of pages > have large mapcount, thus a huge reverse mapping cost. Agreed. I've posted v7 which includes kswapd profiles collected from an arm64 v8.2 laptop under memory pressure. > Regarding <4%, I guess the figure came from machines with NONLEAF_PMD_YOUNG? No, it's from Snapdragon 7c. Please see the kswapd profiles in v7. > In this case, we can skip many PTE scans while PMD has no accessed bit > set. But for > a machine without NONLEAF, will the figure of cpu usage be much larger? So NONLEAF_PMD_YOUNG at most can save 4% CPU usage from kswapd. But this definitely can vary, depending on the workloads. > > > If so, this might be > > > a good proof that arm64 also needs this hardware feature? > > > In short, I am curious how much the improvement in this patchset depends > > > on the hardware ability of NONLEAF_PMD_YOUNG. > > > > For data centers, I do think ARCH_HAS_NONLEAF_PMD_YOUNG has some value. > > In addition to cold/hot memory scanning, there are other use cases like > > dirty tracking, which can benefit from the accessed bit on non-leaf > > entries. I know some proprietary software uses this capability on x86 > > for different purposes than this patchset does. And AFAIK, x86 is the > > only arch that supports this capability, e.g., risc-v and ppc can only > > set the accessed bit in PTEs. > > Yep. NONLEAF is a nice feature. > > btw, page table should have a separate DIRTY bit, right? Yes. > wouldn't dirty page > tracking depend on the DIRTY bit rather than the accessed bit? It depends on the goal. > so x86 also has > NONLEAF dirty bit? No. > Or they are scanning accessed bit of PMD before > scanning DIRTY bits of PTEs? A mandatory sync to disk must use the dirty bit to ensure data integrity. But for a voluntary sync to disk, it can use the accessed bit to narrow the search of dirty pages. A mandatory sync is used to free specific dirty pages. A voluntary sync is used to keep the number of dirty pages low in general and it doesn't target any specific dirty pages. > > In fact, I've discussed this with one of the arm maintainers Will. So > > please check with him too if you are interested in moving forward with > > the idea. I might be able to provide with additional data if you need > > it to make a decision. > > I am interested in running it and have some data without NONLEAF > especially while free memory is very limited and the system has memory > thrashing. The v7 has a switch to disable this feature on x86. If you can run your workloads on x86, then it might be able to help you measure the difference. 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 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 2EC1CC433EF for ; Tue, 8 Feb 2022 09:17:48 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:References: Message-ID:Subject:Cc:To:From:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=wrI5DBgmxed7sqpbHVxTPN91qdExAiJKGhFAv1hOdkM=; b=CmYIeuSEzBCyf0 PaNeeWa4CLo+bD5T+36rAvsVILcNIdwu84sJB6Tp7fc8zU78bUcGkLu5aTnq+0pDHLfEf8zwHcbK2 ujlhtKHAItzagZrTa6IQPaskEWavBqfA617TaAJjFkDZF4eOYbfYTKJyQhvsZHQHEzFr5peLfdxKm 3NEEiQDWDVA2Ss85BBhmxVQQ/XmFACbIZ0akZV9ZmWukD19ooKK+bzTf0Haif7/xxANgI9koHajr9 qHGxxoOKDgqKIpxa+KbdNabtxd0PiUDEqDyS5EsvP/HJkgtXnXl4vQIEmC/o/6RQsXEtqummmNg0D o8hzaDV+VJC3zIGpzsnQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1nHMbx-00DCLr-NT; Tue, 08 Feb 2022 09:16:34 +0000 Received: from mail-io1-xd34.google.com ([2607:f8b0:4864:20::d34]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1nHMbt-00DCJy-HL for linux-arm-kernel@lists.infradead.org; Tue, 08 Feb 2022 09:16:31 +0000 Received: by mail-io1-xd34.google.com with SMTP id 9so20343597iou.2 for ; Tue, 08 Feb 2022 01:16:29 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:content-transfer-encoding:in-reply-to; bh=O/lx//nLUVMx2EI4vj5HKtagrUsb3ZYCM82TQ4lEins=; b=GNZIO6/kuk+ic9l6Cd+p/G1mclOH/q3G/vT9SOJqWStL42meaNn/c/wFxfOu3vH9z1 uOLAzQrhJq95IkE+TOApdAN1ebRCQvgTw7uDwp8aJjVbau9Q2hRunsd/UW0wOVvjYwd1 LcpnpZOyuC0DTMEJBpVE1aNfStAYiHEPBjeyFGgD6lSx1oXM4Le3EOGAoBFH3e2WoeDV uIQBx1oy/xTb+3xXbPXk86a1+F/MI5UOjandFhzeQffQ3GTJisprjuAegNuPLc1FAiS7 JphN+alAke3aQBct32r7k9yuTI6pGb/AYKbCAvQdosBGvl25eO7UHSAH5rqstI1IASX8 bjWA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:content-transfer-encoding :in-reply-to; bh=O/lx//nLUVMx2EI4vj5HKtagrUsb3ZYCM82TQ4lEins=; b=rm7ARbJR9ainXmduUzXH69t9jaxvuNq2GJ8iozIA4QsRlFa/1qynsYuLXJ2vq9nMEC y8KguPLLP0vXJnBritNJppC9aPNqjksmhTCGr88Xzqc8vBXYsW9IIaIBEP5BKgeK7TzH p58MP88Koxo2W1/hImqCxbcp1cbADro2FJK09b70uKDPGL9vkkcCBWIWBFLl4aUbG4kz tJ0pdHbUf4/tplnxy6J2U3Z1T6BBPCyI8EbNjLhjvPle5RAZlGZAZOZLfhxqizuqrteK MvnMVMoOXmYKY7YpGb4Pcuq7kCCGthlpRM5uUhx9zCgzngxLBpMALNLrNwT2TpqLNUAu pk1A== X-Gm-Message-State: AOAM532UrYFulIMYWRrfsXXxJurtH1EN7b0h3dgskeci1l+ZlrAA0azK Rdv8h3Qr702lTI9m1Mg6KmJa/w== X-Google-Smtp-Source: ABdhPJw5yaI9Ui9SJAQTv5l/nY/N9q1YxRO/3oThR7TlMGDQjGNGWfY/7ovjRm8eOUtzjrPfeX8IwA== X-Received: by 2002:a05:6638:1028:: with SMTP id n8mr1757754jan.318.1644311788671; Tue, 08 Feb 2022 01:16:28 -0800 (PST) Received: from google.com ([2620:15c:183:200:5f31:19c3:21f5:7300]) by smtp.gmail.com with ESMTPSA id k11sm7556042iob.23.2022.02.08.01.16.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 08 Feb 2022 01:16:27 -0800 (PST) Date: Tue, 8 Feb 2022 02:16:24 -0700 From: Yu Zhao To: Barry Song <21cnbao@gmail.com> Cc: Andrew Morton , Linus Torvalds , Andi Kleen , Catalin Marinas , Dave Hansen , Hillf Danton , Jens Axboe , Jesse Barnes , Johannes Weiner , Jonathan Corbet , Matthew Wilcox , Mel Gorman , Michael Larabel , Michal Hocko , Rik van Riel , Vlastimil Babka , Will Deacon , Ying Huang , LAK , Linux Doc Mailing List , LKML , Linux-MM , page-reclaim@google.com, x86 Subject: Re: [PATCH v6 0/9] Multigenerational LRU Framework Message-ID: References: <20220104202227.2903605-1-yuzhao@google.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220208_011629_603366_2F573430 X-CRM114-Status: GOOD ( 39.98 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org T24gRnJpLCBKYW4gMjgsIDIwMjIgYXQgMDk6NTQ6MDlQTSArMTMwMCwgQmFycnkgU29uZyB3cm90 ZToKPiBPbiBUdWUsIEphbiAyNSwgMjAyMiBhdCA3OjQ4IFBNIFl1IFpoYW8gPHl1emhhb0Bnb29n bGUuY29tPiB3cm90ZToKPiA+Cj4gPiBPbiBTdW4sIEphbiAyMywgMjAyMiBhdCAwNjo0MzowNlBN ICsxMzAwLCBCYXJyeSBTb25nIHdyb3RlOgo+ID4gPiBPbiBXZWQsIEphbiA1LCAyMDIyIGF0IDc6 MTcgUE0gWXUgWmhhbyA8eXV6aGFvQGdvb2dsZS5jb20+IHdyb3RlOgo+ID4KPiA+IDxzbmlwcGVk Pgo+ID4KPiA+ID4gPiBMYXJnZS1zY2FsZSBkZXBsb3ltZW50cwo+ID4gPiA+IC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCj4gPiA+ID4gV2UndmUgcm9sbGVkIG91dCBNR0xSVSB0byB0ZW5zIG9mIG1p bGxpb25zIG9mIENocm9tZSBPUyB1c2VycyBhbmQKPiA+ID4gPiBhYm91dCBhIG1pbGxpb24gQW5k cm9pZCB1c2Vycy4gR29vZ2xlJ3MgZmxlZXR3aWRlIHByb2ZpbGluZyBbMTNdIHNob3dzCj4gPiA+ ID4gYW4gb3ZlcmFsbCA0MCUgZGVjcmVhc2UgaW4ga3N3YXBkIENQVSB1c2FnZSwgaW4gYWRkaXRp b24gdG8KPiA+ID4KPiA+ID4gSGkgWXUsCj4gPiA+Cj4gPiA+IFdhcyB0aGUgb3ZlcmFsbCA0MCUg ZGVjcmVhc2Ugb2Yga3N3YXAgQ1BVIHVzZ2FlIHNlZW4gb24geDg2IG9yIGFybTY0Pwo+ID4gPiBB bmQgSSBhbSBjdXJpb3VzIGhvdyBtdWNoIHdlIGFyZSB0YWtpbmcgYWR2YW50YWdlIG9mIE5PTkxF QUZfUE1EX1lPVU5HLgo+ID4gPiBEb2VzIGl0IGhlbHAgYSBsb3QgaW4gZGVjcmVhc2luZyB0aGUg Y3B1IHVzYWdlPwo+ID4KPiA+IEhpIEJhcnJ5LAo+ID4KPiA+IFRoZSBmbGVldC13aWRlIHByb2Zp bGluZyBkYXRhIEkgc2hhcmVkIHdhcyBmcm9tIHg4Ni4gRm9yIGFybTY0LCBJIG9ubHkKPiA+IGhh dmUgZGF0YSBmcm9tIHN5bnRoZXRpYyBiZW5jaG1hcmtzIGF0IHRoZSBtb21lbnQsIGFuZCBpdCBh bHNvIHNob3dzCj4gPiBzaW1pbGFyIGltcHJvdmVtZW50cy4KPiA+Cj4gPiBGb3IgQ2hyb21lIE9T IChpbmRpdmlkdWFsIHVzZXJzKSwgd2Fsa19wdGVfcmFuZ2UoKSwgdGhlIGZ1bmN0aW9uIHRoYXQK PiA+IHdvdWxkIGJlbmVmaXQgZnJvbSBBUkNIX0hBU19OT05MRUFGX1BNRF9ZT1VORywgb25seSB1 c2VzIGEgc21hbGwKPiA+IHBvcnRpb24gKDw0JSkgb2Yga3N3YXBkIENQVSB0aW1lLiBTbyBBUkNI X0hBU19OT05MRUFGX1BNRF9ZT1VORyBpc24ndAo+ID4gdGhhdCBoZWxwZnVsLgo+IAo+IEhpIFl1 LAo+IFRoYW5rcyEKPiAKPiBJbiB0aGUgY3VycmVudCBrZXJuZWwsIGRlcGVuZGluZyBvbiByZXZl cnNlIG1hcHBpbmcsIHdoaWxlIG1lbW9yeSBpcwo+IHVuZGVyIHByZXNzdXJlLAo+IHRoZSBjcHUg dXNhZ2Ugb2Yga3N3YXBkIGNhbiBiZSB2ZXJ5IHZlcnkgaGlnaCBlc3BlY2lhbGx5IHdoaWxlIGEg bG90IG9mIHBhZ2VzCj4gaGF2ZSBsYXJnZSBtYXBjb3VudCwgdGh1cyBhIGh1Z2UgcmV2ZXJzZSBt YXBwaW5nIGNvc3QuCgpBZ3JlZWQuIEkndmUgcG9zdGVkIHY3IHdoaWNoIGluY2x1ZGVzIGtzd2Fw ZCBwcm9maWxlcyBjb2xsZWN0ZWQgZnJvbSBhbgphcm02NCB2OC4yIGxhcHRvcCB1bmRlciBtZW1v cnkgcHJlc3N1cmUuCgo+IFJlZ2FyZGluZyAgPDQlLCBJIGd1ZXNzIHRoZSBmaWd1cmUgY2FtZSBm cm9tIG1hY2hpbmVzIHdpdGggTk9OTEVBRl9QTURfWU9VTkfvvJ8KCk5vLCBpdCdzIGZyb20gU25h cGRyYWdvbiA3Yy4gUGxlYXNlIHNlZSB0aGUga3N3YXBkIHByb2ZpbGVzIGluIHY3LgoKPiBJbiB0 aGlzIGNhc2UsIHdlIGNhbiBza2lwIG1hbnkgUFRFIHNjYW5zIHdoaWxlIFBNRCBoYXMgbm8gYWNj ZXNzZWQgYml0Cj4gc2V0LiBCdXQgZm9yCj4gYSBtYWNoaW5lIHdpdGhvdXQgTk9OTEVBRiwgd2ls bCB0aGUgZmlndXJlIG9mIGNwdSB1c2FnZSBiZSBtdWNoIGxhcmdlcj8KClNvIE5PTkxFQUZfUE1E X1lPVU5HIGF0IG1vc3QgY2FuIHNhdmUgNCUgQ1BVIHVzYWdlIGZyb20ga3N3YXBkLiBCdXQKdGhp cyBkZWZpbml0ZWx5IGNhbiB2YXJ5LCBkZXBlbmRpbmcgb24gdGhlIHdvcmtsb2Fkcy4KCj4gPiA+ IElmIHNvLCB0aGlzIG1pZ2h0IGJlCj4gPiA+IGEgZ29vZCBwcm9vZiB0aGF0IGFybTY0IGFsc28g bmVlZHMgdGhpcyBoYXJkd2FyZSBmZWF0dXJlPwo+ID4gPiBJbiBzaG9ydCwgSSBhbSBjdXJpb3Vz IGhvdyBtdWNoIHRoZSBpbXByb3ZlbWVudCBpbiB0aGlzIHBhdGNoc2V0IGRlcGVuZHMKPiA+ID4g b24gdGhlIGhhcmR3YXJlIGFiaWxpdHkgb2YgTk9OTEVBRl9QTURfWU9VTkcuCj4gPgo+ID4gRm9y IGRhdGEgY2VudGVycywgSSBkbyB0aGluayBBUkNIX0hBU19OT05MRUFGX1BNRF9ZT1VORyBoYXMg c29tZSB2YWx1ZS4KPiA+IEluIGFkZGl0aW9uIHRvIGNvbGQvaG90IG1lbW9yeSBzY2FubmluZywg dGhlcmUgYXJlIG90aGVyIHVzZSBjYXNlcyBsaWtlCj4gPiBkaXJ0eSB0cmFja2luZywgd2hpY2gg Y2FuIGJlbmVmaXQgZnJvbSB0aGUgYWNjZXNzZWQgYml0IG9uIG5vbi1sZWFmCj4gPiBlbnRyaWVz LiBJIGtub3cgc29tZSBwcm9wcmlldGFyeSBzb2Z0d2FyZSB1c2VzIHRoaXMgY2FwYWJpbGl0eSBv biB4ODYKPiA+IGZvciBkaWZmZXJlbnQgcHVycG9zZXMgdGhhbiB0aGlzIHBhdGNoc2V0IGRvZXMu IEFuZCBBRkFJSywgeDg2IGlzIHRoZQo+ID4gb25seSBhcmNoIHRoYXQgc3VwcG9ydHMgdGhpcyBj YXBhYmlsaXR5LCBlLmcuLCByaXNjLXYgYW5kIHBwYyBjYW4gb25seQo+ID4gc2V0IHRoZSBhY2Nl c3NlZCBiaXQgaW4gUFRFcy4KPiAKPiBZZXAuIE5PTkxFQUYgaXMgYSBuaWNlIGZlYXR1cmUuCj4g Cj4gYnR3LCBwYWdlIHRhYmxlIHNob3VsZCBoYXZlIGEgc2VwYXJhdGUgRElSVFkgYml0LCByaWdo dD8KClllcy4KCj4gd291bGRuJ3QgZGlydHkgcGFnZQo+IHRyYWNraW5nIGRlcGVuZCBvbiB0aGUg RElSVFkgYml0IHJhdGhlciB0aGFuIHRoZSBhY2Nlc3NlZCBiaXQ/CgpJdCBkZXBlbmRzIG9uIHRo ZSBnb2FsLgoKPiBzbyB4ODYgYWxzbyBoYXMKPiBOT05MRUFGIGRpcnR5IGJpdD8KCk5vLgoKPiBP ciB0aGV5IGFyZSBzY2FubmluZyBhY2Nlc3NlZCBiaXQgb2YgUE1EIGJlZm9yZQo+IHNjYW5uaW5n IERJUlRZIGJpdHMgb2YgUFRFcz8KCkEgbWFuZGF0b3J5IHN5bmMgdG8gZGlzayBtdXN0IHVzZSB0 aGUgZGlydHkgYml0IHRvIGVuc3VyZSBkYXRhCmludGVncml0eS4gQnV0IGZvciBhIHZvbHVudGFy eSBzeW5jIHRvIGRpc2ssIGl0IGNhbiB1c2UgdGhlIGFjY2Vzc2VkCmJpdCB0byBuYXJyb3cgdGhl IHNlYXJjaCBvZiBkaXJ0eSBwYWdlcy4KCkEgbWFuZGF0b3J5IHN5bmMgaXMgdXNlZCB0byBmcmVl IHNwZWNpZmljIGRpcnR5IHBhZ2VzLiBBIHZvbHVudGFyeSBzeW5jCmlzIHVzZWQgdG8ga2VlcCB0 aGUgbnVtYmVyIG9mIGRpcnR5IHBhZ2VzIGxvdyBpbiBnZW5lcmFsIGFuZCBpdCBkb2Vzbid0CnRh cmdldCBhbnkgc3BlY2lmaWMgZGlydHkgcGFnZXMuCgo+ID4gSW4gZmFjdCwgSSd2ZSBkaXNjdXNz ZWQgdGhpcyB3aXRoIG9uZSBvZiB0aGUgYXJtIG1haW50YWluZXJzIFdpbGwuIFNvCj4gPiBwbGVh c2UgY2hlY2sgd2l0aCBoaW0gdG9vIGlmIHlvdSBhcmUgaW50ZXJlc3RlZCBpbiBtb3ZpbmcgZm9y d2FyZCB3aXRoCj4gPiB0aGUgaWRlYS4gSSBtaWdodCBiZSBhYmxlIHRvIHByb3ZpZGUgd2l0aCBh ZGRpdGlvbmFsIGRhdGEgaWYgeW91IG5lZWQKPiA+IGl0IHRvIG1ha2UgYSBkZWNpc2lvbi4KPiAK PiBJIGFtIGludGVyZXN0ZWQgaW4gcnVubmluZyBpdCBhbmQgaGF2ZSBzb21lIGRhdGEgd2l0aG91 dCBOT05MRUFGCj4gZXNwZWNpYWxseSB3aGlsZSBmcmVlIG1lbW9yeSBpcyB2ZXJ5IGxpbWl0ZWQg YW5kIHRoZSBzeXN0ZW0gaGFzIG1lbW9yeQo+IHRocmFzaGluZy4KClRoZSB2NyBoYXMgYSBzd2l0 Y2ggdG8gZGlzYWJsZSB0aGlzIGZlYXR1cmUgb24geDg2LiBJZiB5b3UgY2FuIHJ1biB5b3VyCndv cmtsb2FkcyBvbiB4ODYsIHRoZW4gaXQgbWlnaHQgYmUgYWJsZSB0byBoZWxwIHlvdSBtZWFzdXJl IHRoZSBkaWZmZXJlbmNlLgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX18KbGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBs aXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlz dGluZm8vbGludXgtYXJtLWtlcm5lbAo=