Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1tQ0fG-00H0uV-7M for pgsql-hackers@arkaria.postgresql.org; Tue, 24 Dec 2024 08:53:18 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1tQ0fD-003QBJ-5k for pgsql-hackers@arkaria.postgresql.org; Tue, 24 Dec 2024 08:53:14 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1tQ0fC-003QB9-KI for pgsql-hackers@lists.postgresql.org; Tue, 24 Dec 2024 08:53:14 +0000 Received: from oss.nttdata.com ([49.212.34.109]) by makus.postgresql.org with esmtps (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1tQ0f8-000Jj5-26 for pgsql-hackers@postgresql.org; Tue, 24 Dec 2024 08:53:12 +0000 Received: from oss.nttdata.com (localhost [127.0.0.1]) by oss.nttdata.com (Postfix) with ESMTPA id 7011C60299 for ; Tue, 24 Dec 2024 17:53:06 +0900 (JST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at oss.nttdata.com MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=_5c3c35fa581945f743c3ae54a1ca83f5" Content-Transfer-Encoding: 7bit Date: Tue, 24 Dec 2024 17:53:06 +0900 From: torikoshia To: Pgsql Hackers Subject: RFC: Allow EXPLAIN to Output Page Fault Information User-Agent: Roundcube Webmail/1.4.11 Message-ID: X-Sender: torikoshia@oss.nttdata.com List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --=_5c3c35fa581945f743c3ae54a1ca83f5 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII; format=flowed Hi, When reading the output of EXPLAIN (ANALYZE) to diagnose slow queries for our customers, I often want to know how many page faults occurred, especially major page faults, which involve disk access. Currently, the BUFFERS option in EXPLAIN provides information on whether a page was found in the shared buffers, but it doesn't provide insight into whether the page was found in the OS cache or not and disk I/O occurred. Since page faults especially major one impact performance compared to shared buffer and OS cache hits, it would be helpful to track these events. I have attached a PoC patch that modifies EXPLAIN to include page fault information during both the planning and execution phases of a query. The output would look like this: =# EXPLAIN (ANALYZE, PAGEFAULTS) SELECT * FROM pgbench_branches b JOIN pgbench_accounts a ON b.bid = a.bid ORDER BY a.aid; QUERY PLAN --------------------------------------------------------------------------------------------------------------------------------------------------------------------- Nested Loop (cost=0.58..335386.98 rows=4999917 width=197) (actual time=3.785..5590.294 rows=5000000 loops=1) ... (omitted) Planning: Buffers: shared hit=50 read=48 dirtied=4 written=2 Page Faults: minor=30 major=19 <-ADDED Planning Time: 22.080 ms Execution: Page Faults: minor=49 major=5 <-ADDED Execution Time: 5794.356 ms The patch has not yet added this functionality to auto_explain, but I believe this feature would be more useful in auto_explain than in the EXPLAIN command itself. I plan to add it to auto_explain if there's interest in including page fault information in EXPLAIN. While GUCs like log_statement_stats allow logging of getrusage(2) information, including page faults, always enabling this can lead to excessive log output. It would be better to log this data only when queries are slow. Therefore, adding this feature to auto_explain seems like a good solution. The patch introduces a new option, PAGEFAULTS, but it may be more appropriate to include the page fault information in another option, such as SUMMARY, especially if there are other useful resources that can be obtained from getrusage(2). The patch cannot be applied to Windows because getrusage() in PostgreSQL ported for Windows currently only tracks CPU times. I'm not sure if information on major and minor page faults is accessible on Windows, but it might be acceptable to treat it similarly to log_statement_stats and exclude it from Windows support. I also tried to add page faults information for each plan node, similar to the BUFFERS option, but I decided against this approach due to the performance impact. The frequent calls to getrusage(2), i.e. each time getting one row, created significant overhead. Any feedback would be greatly appreciated. -- Regards, -- Atsushi Torikoshi Seconded from NTT DATA GROUP CORPORATION to SRA OSS K.K. --=_5c3c35fa581945f743c3ae54a1ca83f5 Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=v1-0001-PoC-Allow-EXPLAIN-to-output-page-fault-info.patch Content-Disposition: attachment; filename=v1-0001-PoC-Allow-EXPLAIN-to-output-page-fault-info.patch; size=10842 RnJvbSA4YzI4ZWMyODhhOTkyMzM1ODBiMTVhZTY4OWU4MTYxMGIyYTgzNDhjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBdHN1c2hpIFRvcmlrb3NoaSA8dG9yaWtvc2hpYUBvc3MubnR0 ZGF0YS5jb20+CkRhdGU6IFR1ZSwgMjQgRGVjIDIwMjQgMTc6MjY6MTggKzA5MDAKU3ViamVjdDog W1BBVENIIHYxXSBQb0M6IEFsbG93IEVYUExBSU4gdG8gb3V0cHV0IHBhZ2UgZmF1bHQgaW5mb3Jt YXRpb24KClRoaXMgcGF0Y2ggYWRkcyBQQUdFRkFVTFRTIG9wdGlvbiB0byBFWFBMQUlOIGFuZCBp dCB0cmFja3MgYm90aAptaW5vciBhbmQgbWFqb3IgZmF1bHRzIGR1cmluZyBwbGFubmluZyBhbmQg ZXhlY3V0aW9uIHBoYXNlcy4KClRoaXMgaXMgYSBQb0MgcGF0Y2ggYW5kIG9ubHkgc2hvd3MgcGFn ZSBmYXVsdHMgd2hlbiB0aGUgRk9STUFUIGlzIFRFWFQuCgotLS0KIHNyYy9iYWNrZW5kL2NvbW1h bmRzL2V4cGxhaW4uYyB8IDEwMyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0KIHNy Yy9iYWNrZW5kL2NvbW1hbmRzL3ByZXBhcmUuYyB8ICAyMyArKysrKysrKwogc3JjL2luY2x1ZGUv Y29tbWFuZHMvZXhwbGFpbi5oIHwgIDExICsrKysKIDMgZmlsZXMgY2hhbmdlZCwgMTMzIGluc2Vy dGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFu ZHMvZXhwbGFpbi5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jCmluZGV4IGEyMDFl ZDMwODIuLmI4OTQzYzdlZjkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxh aW4uYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMKQEAgLTEzLDYgKzEzLDgg QEAKICAqLwogI2luY2x1ZGUgInBvc3RncmVzLmgiCiAKKyNpbmNsdWRlIDxzeXMvcmVzb3VyY2Uu aD4KKwogI2luY2x1ZGUgImFjY2Vzcy94YWN0LmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ190eXBl LmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvY3JlYXRlYXMuaCIKQEAgLTE0NSw2ICsxNDcsOCBAQCBz dGF0aWMgdm9pZCBzaG93X2ZvcmVpZ25zY2FuX2luZm8oRm9yZWlnblNjYW5TdGF0ZSAqZnNzdGF0 ZSwgRXhwbGFpblN0YXRlICplcyk7CiBzdGF0aWMgY29uc3QgY2hhciAqZXhwbGFpbl9nZXRfaW5k ZXhfbmFtZShPaWQgaW5kZXhJZCk7CiBzdGF0aWMgYm9vbCBwZWVrX2J1ZmZlcl91c2FnZShFeHBs YWluU3RhdGUgKmVzLCBjb25zdCBCdWZmZXJVc2FnZSAqdXNhZ2UpOwogc3RhdGljIHZvaWQgc2hv d19idWZmZXJfdXNhZ2UoRXhwbGFpblN0YXRlICplcywgY29uc3QgQnVmZmVyVXNhZ2UgKnVzYWdl KTsKK3N0YXRpYyBib29sIHBlZWtfcGFnZWZhdWx0KEV4cGxhaW5TdGF0ZSAqZXMsIGNvbnN0IFBh Z2VGYXVsdHMgKiB1c2FnZSk7CitzdGF0aWMgdm9pZCBzaG93X3BhZ2VmYXVsdChFeHBsYWluU3Rh dGUgKmVzLCBjb25zdCBQYWdlRmF1bHRzICogdXNhZ2UpOwogc3RhdGljIHZvaWQgc2hvd193YWxf dXNhZ2UoRXhwbGFpblN0YXRlICplcywgY29uc3QgV2FsVXNhZ2UgKnVzYWdlKTsKIHN0YXRpYyB2 b2lkIHNob3dfbWVtb3J5X2NvdW50ZXJzKEV4cGxhaW5TdGF0ZSAqZXMsCiAJCQkJCQkJCSBjb25z dCBNZW1vcnlDb250ZXh0Q291bnRlcnMgKm1lbV9jb3VudGVycyk7CkBAIC0yMTcsNiArMjIxLDgg QEAgRXhwbGFpblF1ZXJ5KFBhcnNlU3RhdGUgKnBzdGF0ZSwgRXhwbGFpblN0bXQgKnN0bXQsCiAJ CQlidWZmZXJzX3NldCA9IHRydWU7CiAJCQllcy0+YnVmZmVycyA9IGRlZkdldEJvb2xlYW4ob3B0 KTsKIAkJfQorCQllbHNlIGlmIChzdHJjbXAob3B0LT5kZWZuYW1lLCAicGFnZWZhdWx0cyIpID09 IDApCisJCQllcy0+cGFnZWZhdWx0cyA9IGRlZkdldEJvb2xlYW4ob3B0KTsKIAkJZWxzZSBpZiAo c3RyY21wKG9wdC0+ZGVmbmFtZSwgIndhbCIpID09IDApCiAJCQllcy0+d2FsID0gZGVmR2V0Qm9v bGVhbihvcHQpOwogCQllbHNlIGlmIChzdHJjbXAob3B0LT5kZWZuYW1lLCAic2V0dGluZ3MiKSA9 PSAwKQpAQCAtNDc1LDYgKzQ4MSw4IEBAIHN0YW5kYXJkX0V4cGxhaW5PbmVRdWVyeShRdWVyeSAq cXVlcnksIGludCBjdXJzb3JPcHRpb25zLAogCQkJCXBsYW5kdXJhdGlvbjsKIAlCdWZmZXJVc2Fn ZSBidWZ1c2FnZV9zdGFydCwKIAkJCQlidWZ1c2FnZTsKKwlQYWdlRmF1bHRzCXBhZ2VmYXVsdHMg PSB7MH07CisJUGFnZUZhdWx0cwlwYWdlZmF1bHRzX3N0YXJ0ID0gezB9OwogCU1lbW9yeUNvbnRl eHRDb3VudGVycyBtZW1fY291bnRlcnM7CiAJTWVtb3J5Q29udGV4dCBwbGFubmVyX2N0eCA9IE5V TEw7CiAJTWVtb3J5Q29udGV4dCBzYXZlZF9jdHggPSBOVUxMOwpAQCAtNDk5LDYgKzUwNywxNSBA QCBzdGFuZGFyZF9FeHBsYWluT25lUXVlcnkoUXVlcnkgKnF1ZXJ5LCBpbnQgY3Vyc29yT3B0aW9u cywKIAkJYnVmdXNhZ2Vfc3RhcnQgPSBwZ0J1ZmZlclVzYWdlOwogCUlOU1RSX1RJTUVfU0VUX0NV UlJFTlQocGxhbnN0YXJ0KTsKIAorCWlmIChlcy0+cGFnZWZhdWx0cykKKwl7CisJCXN0cnVjdCBy dXNhZ2UgcnVzYWdlOworCisJCWdldHJ1c2FnZShSVVNBR0VfU0VMRiwgJnJ1c2FnZSk7CisJCXBh Z2VmYXVsdHNfc3RhcnQubWluZmx0ID0gcnVzYWdlLnJ1X21pbmZsdDsKKwkJcGFnZWZhdWx0c19z dGFydC5tYWpmbHQgPSBydXNhZ2UucnVfbWFqZmx0OworCX0KKwogCS8qIHBsYW4gdGhlIHF1ZXJ5 ICovCiAJcGxhbiA9IHBnX3BsYW5fcXVlcnkocXVlcnksIHF1ZXJ5U3RyaW5nLCBjdXJzb3JPcHRp b25zLCBwYXJhbXMpOwogCkBAIC01MTgsOSArNTM1LDE5IEBAIHN0YW5kYXJkX0V4cGxhaW5PbmVR dWVyeShRdWVyeSAqcXVlcnksIGludCBjdXJzb3JPcHRpb25zLAogCQlCdWZmZXJVc2FnZUFjY3Vt RGlmZigmYnVmdXNhZ2UsICZwZ0J1ZmZlclVzYWdlLCAmYnVmdXNhZ2Vfc3RhcnQpOwogCX0KIAor CWlmIChlcy0+cGFnZWZhdWx0cykKKwl7CisJCXN0cnVjdCBydXNhZ2UgcnVzYWdlOworCisJCWdl dHJ1c2FnZShSVVNBR0VfU0VMRiwgJnJ1c2FnZSk7CisJCXBhZ2VmYXVsdHMubWluZmx0ID0gcnVz YWdlLnJ1X21pbmZsdCAtIHBhZ2VmYXVsdHNfc3RhcnQubWluZmx0OworCQlwYWdlZmF1bHRzLm1h amZsdCA9IHJ1c2FnZS5ydV9tYWpmbHQgLSBwYWdlZmF1bHRzX3N0YXJ0Lm1hamZsdDsKKwl9CisK IAkvKiBydW4gaXQgKGlmIG5lZWRlZCkgYW5kIHByb2R1Y2Ugb3V0cHV0ICovCiAJRXhwbGFpbk9u ZVBsYW4ocGxhbiwgaW50bywgZXMsIHF1ZXJ5U3RyaW5nLCBwYXJhbXMsIHF1ZXJ5RW52LAogCQkJ CSAgICZwbGFuZHVyYXRpb24sIChlcy0+YnVmZmVycyA/ICZidWZ1c2FnZSA6IE5VTEwpLAorCQkJ CSAgIChlcy0+cGFnZWZhdWx0cyA/ICZwYWdlZmF1bHRzIDogTlVMTCksCiAJCQkJICAgZXMtPm1l bW9yeSA/ICZtZW1fY291bnRlcnMgOiBOVUxMKTsKIH0KIApAQCAtNjQ0LDcgKzY3MSw3IEBAIHZv aWQKIEV4cGxhaW5PbmVQbGFuKFBsYW5uZWRTdG10ICpwbGFubmVkc3RtdCwgSW50b0NsYXVzZSAq aW50bywgRXhwbGFpblN0YXRlICplcywKIAkJCSAgIGNvbnN0IGNoYXIgKnF1ZXJ5U3RyaW5nLCBQ YXJhbUxpc3RJbmZvIHBhcmFtcywKIAkJCSAgIFF1ZXJ5RW52aXJvbm1lbnQgKnF1ZXJ5RW52LCBj b25zdCBpbnN0cl90aW1lICpwbGFuZHVyYXRpb24sCi0JCQkgICBjb25zdCBCdWZmZXJVc2FnZSAq YnVmdXNhZ2UsCisJCQkgICBjb25zdCBCdWZmZXJVc2FnZSAqYnVmdXNhZ2UsIGNvbnN0IFBhZ2VG YXVsdHMgKiBwbGFucGFnZWZhdWx0cywKIAkJCSAgIGNvbnN0IE1lbW9yeUNvbnRleHRDb3VudGVy cyAqbWVtX2NvdW50ZXJzKQogewogCURlc3RSZWNlaXZlciAqZGVzdDsKQEAgLTY1NCw2ICs2ODEs OSBAQCBFeHBsYWluT25lUGxhbihQbGFubmVkU3RtdCAqcGxhbm5lZHN0bXQsIEludG9DbGF1c2Ug KmludG8sIEV4cGxhaW5TdGF0ZSAqZXMsCiAJaW50CQkJZWZsYWdzOwogCWludAkJCWluc3RydW1l bnRfb3B0aW9uID0gMDsKIAlTZXJpYWxpemVNZXRyaWNzIHNlcmlhbGl6ZU1ldHJpY3MgPSB7MH07 CisJUGFnZUZhdWx0cwlwYWdlZmF1bHRzID0gezB9OworCVBhZ2VGYXVsdHMJcGFnZWZhdWx0c19z dGFydCA9IHswfTsKKwlzdHJ1Y3QgcnVzYWdlIHJ1c2FnZTsKIAogCUFzc2VydChwbGFubmVkc3Rt dC0+Y29tbWFuZFR5cGUgIT0gQ01EX1VUSUxJVFkpOwogCkBAIC02NzQsNiArNzA0LDE0IEBAIEV4 cGxhaW5PbmVQbGFuKFBsYW5uZWRTdG10ICpwbGFubmVkc3RtdCwgSW50b0NsYXVzZSAqaW50bywg RXhwbGFpblN0YXRlICplcywKIAkgKi8KIAlJTlNUUl9USU1FX1NFVF9DVVJSRU5UKHN0YXJ0dGlt ZSk7CiAKKwlpZiAoZXMtPnBhZ2VmYXVsdHMpCisJeworCQlnZXRydXNhZ2UoUlVTQUdFX1NFTEYs ICZydXNhZ2UpOworCisJCXBhZ2VmYXVsdHNfc3RhcnQubWluZmx0ID0gcnVzYWdlLnJ1X21pbmZs dDsKKwkJcGFnZWZhdWx0c19zdGFydC5tYWpmbHQgPSBydXNhZ2UucnVfbWFqZmx0OworCX0KKwog CS8qCiAJICogVXNlIGEgc25hcHNob3Qgd2l0aCBhbiB1cGRhdGVkIGNvbW1hbmQgSUQgdG8gZW5z dXJlIHRoaXMgcXVlcnkgc2VlcwogCSAqIHJlc3VsdHMgb2YgYW55IHByZXZpb3VzbHkgZXhlY3V0 ZWQgcXVlcmllcy4KQEAgLTc0OCw3ICs3ODYsOCBAQCBFeHBsYWluT25lUGxhbihQbGFubmVkU3Rt dCAqcGxhbm5lZHN0bXQsIEludG9DbGF1c2UgKmludG8sIEV4cGxhaW5TdGF0ZSAqZXMsCiAJRXhw bGFpblByaW50UGxhbihlcywgcXVlcnlEZXNjKTsKIAogCS8qIFNob3cgYnVmZmVyIGFuZC9vciBt ZW1vcnkgdXNhZ2UgaW4gcGxhbm5pbmcgKi8KLQlpZiAocGVla19idWZmZXJfdXNhZ2UoZXMsIGJ1 ZnVzYWdlKSB8fCBtZW1fY291bnRlcnMpCisJaWYgKHBlZWtfYnVmZmVyX3VzYWdlKGVzLCBidWZ1 c2FnZSkgfHwgcGVla19wYWdlZmF1bHQoZXMsIHBsYW5wYWdlZmF1bHRzKSB8fAorCQltZW1fY291 bnRlcnMpCiAJewogCQlFeHBsYWluT3Blbkdyb3VwKCJQbGFubmluZyIsICJQbGFubmluZyIsIHRy dWUsIGVzKTsKIApAQCAtNzU4LDEwICs3OTcsMTIgQEAgRXhwbGFpbk9uZVBsYW4oUGxhbm5lZFN0 bXQgKnBsYW5uZWRzdG10LCBJbnRvQ2xhdXNlICppbnRvLCBFeHBsYWluU3RhdGUgKmVzLAogCQkJ YXBwZW5kU3RyaW5nSW5mb1N0cmluZyhlcy0+c3RyLCAiUGxhbm5pbmc6XG4iKTsKIAkJCWVzLT5p bmRlbnQrKzsKIAkJfQotCiAJCWlmIChidWZ1c2FnZSkKIAkJCXNob3dfYnVmZmVyX3VzYWdlKGVz LCBidWZ1c2FnZSk7CiAKKwkJaWYgKGVzLT5wYWdlZmF1bHRzKQorCQkJc2hvd19wYWdlZmF1bHQo ZXMsIHBsYW5wYWdlZmF1bHRzKTsKKwogCQlpZiAobWVtX2NvdW50ZXJzKQogCQkJc2hvd19tZW1v cnlfY291bnRlcnMoZXMsIG1lbV9jb3VudGVycyk7CiAKQEAgLTgxMyw2ICs4NTQsMjYgQEAgRXhw bGFpbk9uZVBsYW4oUGxhbm5lZFN0bXQgKnBsYW5uZWRzdG10LCBJbnRvQ2xhdXNlICppbnRvLCBF eHBsYWluU3RhdGUgKmVzLAogCiAJdG90YWx0aW1lICs9IGVsYXBzZWRfdGltZSgmc3RhcnR0aW1l KTsKIAorCWlmIChlcy0+cGFnZWZhdWx0cykKKwl7CisJCWdldHJ1c2FnZShSVVNBR0VfU0VMRiwg JnJ1c2FnZSk7CisKKwkJcGFnZWZhdWx0cy5taW5mbHQgPSBydXNhZ2UucnVfbWluZmx0IC0gcGFn ZWZhdWx0c19zdGFydC5taW5mbHQ7CisJCXBhZ2VmYXVsdHMubWFqZmx0ID0gcnVzYWdlLnJ1X21h amZsdCAtIHBhZ2VmYXVsdHNfc3RhcnQubWFqZmx0OworCisJCWlmIChlcy0+Zm9ybWF0ID09IEVY UExBSU5fRk9STUFUX1RFWFQpCisJCXsKKwkJCUV4cGxhaW5JbmRlbnRUZXh0KGVzKTsKKwkJCWFw cGVuZFN0cmluZ0luZm9TdHJpbmcoZXMtPnN0ciwgIkV4ZWN1dGlvbjpcbiIpOworCQkJZXMtPmlu ZGVudCsrOworCQl9CisJCXNob3dfcGFnZWZhdWx0KGVzLCAmcGFnZWZhdWx0cyk7CisKKwkJaWYg KGVzLT5mb3JtYXQgPT0gRVhQTEFJTl9GT1JNQVRfVEVYVCkKKwkJCWVzLT5pbmRlbnQtLTsKKwkJ RXhwbGFpbkNsb3NlR3JvdXAoIkV4ZWN1dGlvbiIsICJFeGVjdXRpb24iLCB0cnVlLCBlcyk7CisJ fQorCiAJLyoKIAkgKiBXZSBvbmx5IHJlcG9ydCBleGVjdXRpb24gdGltZSBpZiB3ZSBhY3R1YWxs eSByYW4gdGhlIHF1ZXJ5ICh0aGF0IGlzLAogCSAqIHRoZSB1c2VyIHNwZWNpZmllZCBBTkFMWVpF KSwgYW5kIGlmIHN1bW1hcnkgcmVwb3J0aW5nIGlzIGVuYWJsZWQgKHRoZQpAQCAtODIyLDcgKzg4 Myw2IEBAIEV4cGxhaW5PbmVQbGFuKFBsYW5uZWRTdG10ICpwbGFubmVkc3RtdCwgSW50b0NsYXVz ZSAqaW50bywgRXhwbGFpblN0YXRlICplcywKIAlpZiAoZXMtPnN1bW1hcnkgJiYgZXMtPmFuYWx5 emUpCiAJCUV4cGxhaW5Qcm9wZXJ0eUZsb2F0KCJFeGVjdXRpb24gVGltZSIsICJtcyIsIDEwMDAu MCAqIHRvdGFsdGltZSwgMywKIAkJCQkJCQkgZXMpOwotCiAJRXhwbGFpbkNsb3NlR3JvdXAoIlF1 ZXJ5IiwgTlVMTCwgdHJ1ZSwgZXMpOwogfQogCkBAIC00MjMyLDYgKzQyOTIsNDEgQEAgc2hvd19i dWZmZXJfdXNhZ2UoRXhwbGFpblN0YXRlICplcywgY29uc3QgQnVmZmVyVXNhZ2UgKnVzYWdlKQog CX0KIH0KIAorc3RhdGljIGJvb2wKK3BlZWtfcGFnZWZhdWx0KEV4cGxhaW5TdGF0ZSAqZXMsIGNv bnN0IFBhZ2VGYXVsdHMgKiB1c2FnZSkKK3sKKwlpZiAodXNhZ2UgPT0gTlVMTCkKKwkJcmV0dXJu IGZhbHNlOworCisJaWYgKHVzYWdlLT5taW5mbHQgPD0gMCAmJiB1c2FnZS0+bWFqZmx0IDw9IDAp CisJCXJldHVybiBmYWxzZTsKKworCWVsc2UKKwkJcmV0dXJuIHRydWU7Cit9CisKKy8qCisgKiBT aG93IG1hamFyL21pbm9yIHBhZ2UgZmF1bHRzLgorICovCitzdGF0aWMgdm9pZAorc2hvd19wYWdl ZmF1bHQoRXhwbGFpblN0YXRlICplcywgY29uc3QgUGFnZUZhdWx0cyAqIHVzYWdlKQoreworCS8q IFNob3cgb25seSBwb3NpdGl2ZSBjb3VudGVyIHZhbHVlcy4gKi8KKwlpZiAodXNhZ2UtPm1pbmZs dCA8PSAwICYmIHVzYWdlLT5tYWpmbHQgPD0gMCkKKwkJcmV0dXJuOworCisJaWYgKGVzLT5mb3Jt YXQgPT0gRVhQTEFJTl9GT1JNQVRfVEVYVCkKKwl7CisKKwkJRXhwbGFpbkluZGVudFRleHQoZXMp OworCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGVzLT5zdHIsICJQYWdlIEZhdWx0czoiKTsKKwkJ YXBwZW5kU3RyaW5nSW5mbyhlcy0+c3RyLCAiIG1pbm9yPSVsZCIsIChsb25nKSB1c2FnZS0+bWlu Zmx0KTsKKwkJYXBwZW5kU3RyaW5nSW5mbyhlcy0+c3RyLCAiIG1ham9yPSVsZCIsIChsb25nKSB1 c2FnZS0+bWFqZmx0KTsKKworCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihlcy0+c3RyLCAnXG4nKTsK Kwl9Cit9CisKIC8qCiAgKiBTaG93IFdBTCB1c2FnZSBkZXRhaWxzLgogICovCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9jb21tYW5kcy9wcmVwYXJlLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9w cmVwYXJlLmMKaW5kZXggMzlhNzFjMWRlMi4uNGQ5NDRhYWViNCAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvY29tbWFuZHMvcHJlcGFyZS5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3ByZXBh cmUuYwpAQCAtMTcsNiArMTcsNyBAQAogI2luY2x1ZGUgInBvc3RncmVzLmgiCiAKICNpbmNsdWRl IDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxzeXMvcmVzb3VyY2UuaD4KIAogI2luY2x1ZGUgImFjY2Vz cy94YWN0LmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ190eXBlLmgiCkBAIC01NzksNiArNTgwLDgg QEAgRXhwbGFpbkV4ZWN1dGVRdWVyeShFeGVjdXRlU3RtdCAqZXhlY3N0bXQsIEludG9DbGF1c2Ug KmludG8sIEV4cGxhaW5TdGF0ZSAqZXMsCiAJaW5zdHJfdGltZQlwbGFuZHVyYXRpb247CiAJQnVm ZmVyVXNhZ2UgYnVmdXNhZ2Vfc3RhcnQsCiAJCQkJYnVmdXNhZ2U7CisJUGFnZUZhdWx0cwlwYWdl ZmF1bHRzX3N0YXJ0LAorCQkJCXBhZ2VmYXVsdHM7CiAJTWVtb3J5Q29udGV4dENvdW50ZXJzIG1l bV9jb3VudGVyczsKIAlNZW1vcnlDb250ZXh0IHBsYW5uZXJfY3R4ID0gTlVMTDsKIAlNZW1vcnlD b250ZXh0IHNhdmVkX2N0eCA9IE5VTEw7CkBAIC01OTUsNiArNTk4LDE2IEBAIEV4cGxhaW5FeGVj dXRlUXVlcnkoRXhlY3V0ZVN0bXQgKmV4ZWNzdG10LCBJbnRvQ2xhdXNlICppbnRvLCBFeHBsYWlu U3RhdGUgKmVzLAogCiAJaWYgKGVzLT5idWZmZXJzKQogCQlidWZ1c2FnZV9zdGFydCA9IHBnQnVm ZmVyVXNhZ2U7CisKKwlpZiAoZXMtPnBhZ2VmYXVsdHMpCisJeworCQlzdHJ1Y3QgcnVzYWdlIHJ1 c2FnZTsKKworCQlnZXRydXNhZ2UoUlVTQUdFX1NFTEYsICZydXNhZ2UpOworCQlwYWdlZmF1bHRz X3N0YXJ0Lm1pbmZsdCA9IHJ1c2FnZS5ydV9taW5mbHQ7CisJCXBhZ2VmYXVsdHNfc3RhcnQubWFq Zmx0ID0gcnVzYWdlLnJ1X21hamZsdDsKKwl9CisKIAlJTlNUUl9USU1FX1NFVF9DVVJSRU5UKHBs YW5zdGFydCk7CiAKIAkvKiBMb29rIGl0IHVwIGluIHRoZSBoYXNoIHRhYmxlICovCkBAIC02NDYs NiArNjU5LDE1IEBAIEV4cGxhaW5FeGVjdXRlUXVlcnkoRXhlY3V0ZVN0bXQgKmV4ZWNzdG10LCBJ bnRvQ2xhdXNlICppbnRvLCBFeHBsYWluU3RhdGUgKmVzLAogCQlCdWZmZXJVc2FnZUFjY3VtRGlm ZigmYnVmdXNhZ2UsICZwZ0J1ZmZlclVzYWdlLCAmYnVmdXNhZ2Vfc3RhcnQpOwogCX0KIAorCWlm IChlcy0+cGFnZWZhdWx0cykKKwl7CisJCXN0cnVjdCBydXNhZ2UgcnVzYWdlOworCisJCWdldHJ1 c2FnZShSVVNBR0VfU0VMRiwgJnJ1c2FnZSk7CisJCXBhZ2VmYXVsdHMubWluZmx0ID0gcnVzYWdl LnJ1X21pbmZsdCAtIHBhZ2VmYXVsdHNfc3RhcnQubWluZmx0OworCQlwYWdlZmF1bHRzLm1hamZs dCA9IHJ1c2FnZS5ydV9tYWpmbHQgLSBwYWdlZmF1bHRzX3N0YXJ0Lm1hamZsdDsKKwl9CisKIAlw bGFuX2xpc3QgPSBjcGxhbi0+c3RtdF9saXN0OwogCiAJLyogRXhwbGFpbiBlYWNoIHF1ZXJ5ICov CkBAIC02NTYsNiArNjc4LDcgQEAgRXhwbGFpbkV4ZWN1dGVRdWVyeShFeGVjdXRlU3RtdCAqZXhl Y3N0bXQsIEludG9DbGF1c2UgKmludG8sIEV4cGxhaW5TdGF0ZSAqZXMsCiAJCWlmIChwc3RtdC0+ Y29tbWFuZFR5cGUgIT0gQ01EX1VUSUxJVFkpCiAJCQlFeHBsYWluT25lUGxhbihwc3RtdCwgaW50 bywgZXMsIHF1ZXJ5X3N0cmluZywgcGFyYW1MSSwgcHN0YXRlLT5wX3F1ZXJ5RW52LAogCQkJCQkJ ICAgJnBsYW5kdXJhdGlvbiwgKGVzLT5idWZmZXJzID8gJmJ1ZnVzYWdlIDogTlVMTCksCisJCQkJ CQkgICAoZXMtPnBhZ2VmYXVsdHMgPyAmcGFnZWZhdWx0cyA6IE5VTEwpLAogCQkJCQkJICAgZXMt Pm1lbW9yeSA/ICZtZW1fY291bnRlcnMgOiBOVUxMKTsKIAkJZWxzZQogCQkJRXhwbGFpbk9uZVV0 aWxpdHkocHN0bXQtPnV0aWxpdHlTdG10LCBpbnRvLCBlcywgcHN0YXRlLCBwYXJhbUxJKTsKZGlm ZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V4cGxhaW4uaCBiL3NyYy9pbmNsdWRlL2Nv bW1hbmRzL2V4cGxhaW4uaAppbmRleCBhYTU4NzJiYzE1Li5kZDk1ZTA0NDdjIDEwMDY0NAotLS0g YS9zcmMvaW5jbHVkZS9jb21tYW5kcy9leHBsYWluLmgKKysrIGIvc3JjL2luY2x1ZGUvY29tbWFu ZHMvZXhwbGFpbi5oCkBAIC00OSw2ICs0OSw3IEBAIHR5cGVkZWYgc3RydWN0IEV4cGxhaW5TdGF0 ZQogCWJvb2wJCWFuYWx5emU7CQkvKiBwcmludCBhY3R1YWwgdGltZXMgKi8KIAlib29sCQljb3N0 czsJCQkvKiBwcmludCBlc3RpbWF0ZWQgY29zdHMgKi8KIAlib29sCQlidWZmZXJzOwkJLyogcHJp bnQgYnVmZmVyIHVzYWdlICovCisJYm9vbAkJcGFnZWZhdWx0czsJCS8qIHByaW50IHBhZ2VmYXVs dHMgKi8KIAlib29sCQl3YWw7CQkJLyogcHJpbnQgV0FMIHVzYWdlICovCiAJYm9vbAkJdGltaW5n OwkJCS8qIHByaW50IGRldGFpbGVkIG5vZGUgdGltaW5nICovCiAJYm9vbAkJc3VtbWFyeTsJCS8q IHByaW50IHRvdGFsIHBsYW5uaW5nIGFuZCBleGVjdXRpb24gdGltaW5nICovCkBAIC03Myw2ICs3 NCwxNSBAQCB0eXBlZGVmIHN0cnVjdCBFeHBsYWluU3RhdGUKIAlFeHBsYWluV29ya2Vyc1N0YXRl ICp3b3JrZXJzX3N0YXRlOyAvKiBuZWVkZWQgaWYgcGFyYWxsZWwgcGxhbiAqLwogfSBFeHBsYWlu U3RhdGU7CiAKK3R5cGVkZWYgc3RydWN0IFBhZ2VGYXVsdHMKK3sKKwlsb25nCQltaW5mbHQ7CQkJ LyogIyBvZiBwYWdlIGZhdWx0cyB3aGljaCB3ZXJlIHNlcnZpY2VkCisJCQkJCQkJCSAqIHdpdGhv dXQgcmVxdWlyaW5nIGFueSBJL08gKi8KKwlsb25nCQltYWpmbHQ7CQkJLyogIyBvZiBwYWdlIGZh dWx0cyB3aGljaCB3ZXJlIHNlcnZpY2VkIGJ5CisJCQkJCQkJCSAqIGRvaW5nIEkvTyAqLworfQkJ CVBhZ2VGYXVsdHM7CisKKwogLyogSG9vayBmb3IgcGx1Z2lucyB0byBnZXQgY29udHJvbCBpbiBF eHBsYWluT25lUXVlcnkoKSAqLwogdHlwZWRlZiB2b2lkICgqRXhwbGFpbk9uZVF1ZXJ5X2hvb2tf dHlwZSkgKFF1ZXJ5ICpxdWVyeSwKIAkJCQkJCQkJCQkgICBpbnQgY3Vyc29yT3B0aW9ucywKQEAg LTEwOCw2ICsxMTgsNyBAQCBleHRlcm4gdm9pZCBFeHBsYWluT25lUGxhbihQbGFubmVkU3RtdCAq cGxhbm5lZHN0bXQsIEludG9DbGF1c2UgKmludG8sCiAJCQkJCQkgICBQYXJhbUxpc3RJbmZvIHBh cmFtcywgUXVlcnlFbnZpcm9ubWVudCAqcXVlcnlFbnYsCiAJCQkJCQkgICBjb25zdCBpbnN0cl90 aW1lICpwbGFuZHVyYXRpb24sCiAJCQkJCQkgICBjb25zdCBCdWZmZXJVc2FnZSAqYnVmdXNhZ2Us CisJCQkJCQkgICBjb25zdCBQYWdlRmF1bHRzICogcGxhbnBhZ2VmYXVsdHMsCiAJCQkJCQkgICBj b25zdCBNZW1vcnlDb250ZXh0Q291bnRlcnMgKm1lbV9jb3VudGVycyk7CiAKIGV4dGVybiB2b2lk IEV4cGxhaW5QcmludFBsYW4oRXhwbGFpblN0YXRlICplcywgUXVlcnlEZXNjICpxdWVyeURlc2Mp OwoKYmFzZS1jb21taXQ6IDZmMzgyMGYzN2FiYTk0MjMyNDY4MzY1YmFlN2JhNWRlNjk3ZmU5OTMK LS0gCjIuMzkuMgoK --=_5c3c35fa581945f743c3ae54a1ca83f5--