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.96) (envelope-from ) id 1wBRwn-0014le-0S for pgsql-hackers@arkaria.postgresql.org; Sat, 11 Apr 2026 06:36:01 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wBRwl-00FtU1-1D for pgsql-hackers@arkaria.postgresql.org; Sat, 11 Apr 2026 06:36:00 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wBRwl-00FtTs-02 for pgsql-hackers@lists.postgresql.org; Sat, 11 Apr 2026 06:35:59 +0000 Received: from mail-dy1-x132d.google.com ([2607:f8b0:4864:20::132d]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wBRwj-00000000Tg5-39tQ for pgsql-hackers@lists.postgresql.org; Sat, 11 Apr 2026 06:35:59 +0000 Received: by mail-dy1-x132d.google.com with SMTP id 5a478bee46e88-2c7e5f38a69so176766eec.1 for ; Fri, 10 Apr 2026 23:35:57 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1775889356; cv=none; d=google.com; s=arc-20240605; b=j3JNUhOGAsu8/1hZ2w38RRU7EkLx7rSxH88vEiysdkHOHVzDYQzh2pZTGeSpGEKC7p zoHLRATHG6Ps+caaRgPLqvLYRnrjaS/kXodYOWumGaFKOi515eNRNlJXUKfadyvEKlvw JuKUaJ02nAj2Msc3m1zgbVj65bAYoyQKMlQ1O/4H25e7h5BRX2qapEXdwQefo742obbm UXm/26ARH3Ia09CQGhaGhVkEwiN4lFqcIEltE9dMWQgM3cRuT6lv9ssCFHuUhDyM+nRK ieU8MkFUctEINyUM6i0nu3c+AXBnbrNo5S4TduujmZ5WL0JFeYYjeKVbD0114iWMekl8 IheQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=RcAqIvEfP/9hjvW628wZAWzz0tROwGS0Mb+i0X+f7x4=; fh=vUyP1UVtPtub3uyVJ3+QqiQaz3kuzwQGWAIAjEQbabE=; b=dFBJqRgNWemj0ap2ZYW/70KziGopKtc1zXLg5QtInSxzL85ViFKKkEsTkeAvq4dmqZ gGE+v3E0SN4XBBAbSfhwleSDGzx7QHwtKvf57ym0ODj4UxzPDHqWxmOtIeF8RXRGBTvI gZo0LLcCY9Y+adMAs3DUUa1ILmv6v0HVaJ03eb1u+ixcrIwb81N32ynjEIAmHdCRw8s4 vBPj5ts8mtJ1bSoTzUwUnyaRMCivo6/UbT/G4rhOdkgiekr3DARcxTtrkshzOjcpowMH dZI4zxuWXgDanwobYXHOXW3WKQF1zsupYYxLBjwbIFk4amhB+H3NntvKvf3lklBhwo1Q ybPQ==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1775889356; x=1776494156; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=RcAqIvEfP/9hjvW628wZAWzz0tROwGS0Mb+i0X+f7x4=; b=po9ki2H94RHKzynMo8Q8rO4m+Sc1+SDOHMsvyXV05zI6JftU8A8TRv7+hD7XvjqZUa tw2yhhCEMlhWMxiv4WWpWzZBz5tIzRiUdskgf8t35M9WJ/oNnXsY6A37cEF7dyvTy9IS ppzO/yae12/7YrZPDuOiB/I0c7zJ1qGPxSQdWy5zPgg8z8xzNToihocCxROCS4XX9wt3 kTljPbyyLNoaDMrGtwpDAcEotBk5DI4JZWzkrlIJjF6lVdRbFwsAjUaLGV1lBl5Yh3qV joLO1o2KY9aESNj4LJX7Y3QCTLWbhXRZw6i+ea2c1mW4BQMknViU8MTr1Pazq64nrST3 5S3g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775889356; x=1776494156; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=RcAqIvEfP/9hjvW628wZAWzz0tROwGS0Mb+i0X+f7x4=; b=FjJXUCEBForOfRRu8eHHmYCL9zAyLVB4UMiZU4lMagjSLNTzKls7ntsEKNVGyF1VQY dEh4TXfvMiqv5xDmIdqTwRY+5BeWgvvsr0JmoCzE/2pwzj+7uOkT+9gCedTi3LZ8wOWI LYMzkPjoK3HLCFB9M9eg7i9E33jhT5SxDF5ywPiO+8GxBgDKjxdSBe1rcpq8OjRtQ+c3 mEK7W9l+VM0MwdQVvn5NUb0IsX4OF8RJC6hhq8CI8ITNBFgsa7+gVQH7BGCmcE3UZT7M Pw19XkCsUU6hqbFrqrsGNeIXbyJMdEN6wePDYvoxZpnYsfYXbP0OeZxr1xj2JJb8hxUY A9/A== X-Gm-Message-State: AOJu0YwBFGiVZMnqkEM58YS1xpH/8p8omO2tb/cgB9pa4W462Wl5jOUG zpeLsDh3C0/++s8PP6bvrF/UbiQeCmQDVMRFjKgxVVCMNR9setvaMBVxdMa7VFY861Bp/XAoi1y 0ySC5DOpU02kMfPZdYHX76wiEJVu6scE= X-Gm-Gg: AeBDietw9rS6NOBqfEoTZs98s9VT5nE370dHtZuys/Fx/PQa9qdiUEujcJkAUacCPJX aVHvpR5EAEdCYiNAtmJyB9s1eP0KN37f6CmYnARiq78M+GUxJRcgHcqFq7+L7G2Y3cazxwjvBO4 TGgIXIzMhR6edw9TUFQKTLcDPK9H9Zf2pipgYUQMj650OANyO+vOXZjQ6dknRQ425KSYXvqkR/H +JcWlkxZGDxFbpEVneCVj5U1hWDm7jHtuNOFH3HJrDVKhjO/rRwQEl+eon5zM8rzN3CFgi8fJFA DsJIrPvVWcTjyLR6d6gQoCQEHGBir7JPP/JTLov7WETImK4+GXFzpcsNNwvwELC+ X-Received: by 2002:a05:7301:4089:b0:2bd:db75:c28b with SMTP id 5a478bee46e88-2d58a39c93cmr1263088eec.7.1775889355839; Fri, 10 Apr 2026 23:35:55 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Thomas Munro Date: Sat, 11 Apr 2026 18:35:18 +1200 X-Gm-Features: AQROBzCUsfU7YfUrCentxFbFd0QfoPJXWfY65Ra3EpIXG-y3QAF3g1SH7JAPCxY Message-ID: Subject: Re: Automatically sizing the IO worker pool To: Dmitry Dolgov <9erthalion6@gmail.com> Cc: PostgreSQL Hackers Content-Type: multipart/mixed; boundary="00000000000037898c064f297637" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000037898c064f297637 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Wed, Jul 30, 2025 at 10:15=E2=80=AFPM Dmitry Dolgov <9erthalion6@gmail.c= om> wrote: > As a side note, I was trying to experiment with this patch using > dm-mapper's delay feature to introduce an arbitrary large io latency and > see how the io queue is growing. FWIW, here's what I came up with while experimenting with that sort of thin= g: shared_preload_libraries=3Dio_limit io_limit.ios_per_second=3D6000 That differs from eg dm-mapper delays by making everything seem like slow direct I/O, which seemed more interesting for this project. For example if you run some continuous workload while you SET io_limit.ios_per_second to various numbers, with io_workers_idle_timeout set fairly low, you can monitor the pool adjustments. --00000000000037898c064f297637 Content-Type: text/x-patch; charset="US-ASCII"; name="0001-contrib-io_limit-Simulation-of-slow-storage.patch" Content-Disposition: attachment; filename="0001-contrib-io_limit-Simulation-of-slow-storage.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mntymjl40 RnJvbSA2ZWNmZTIyMjZjOTA2OGE4MmI3YzU0MDk0ZGI1NTM1NDk2MGE3MGJiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUaG9tYXMgTXVucm8gPHRob21hcy5tdW5yb0BnbWFpbC5jb20+ CkRhdGU6IFNhdCwgMTEgQXByIDIwMjYgMTc6MzE6MTMgKzEyMDAKU3ViamVjdDogW1BBVENIXSBj b250cmliL2lvX2xpbWl0OiBTaW11bGF0aW9uIG9mIHNsb3cgc3RvcmFnZS4KCk9ubHkgYWZmZWN0 cyBJT3Mgc3VibWl0dGVkIHRvIGlvX21ldGhvZD13b3JrZXIuICBDb25maWd1cmVkIGFzOgoKICBz aGFyZWRfcHJlbG9hZF9saWJyYXJpZXM9aW9fbGltaXQKCiAgaW9fbGltaXQuaW9zX3Blcl9zZWNv bmQ9MTAwMAogIGlvX2xpbWl0LnJlYWRfcGVyX3NlY29uZD0yMDBNQgogIGlvX2xpbWl0X3dyaXRl X3Blcl9zZWNvbmQ9MTAwTUIKClplcm8gbWVhbnMgbm8gbGltaXQuCgpYWFggRXhwZXJpbWVudGFs IGhhY2sKLS0tCiBjb250cmliL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEg KwogY29udHJpYi9pb19saW1pdC9NYWtlZmlsZSAgICAgICAgICAgICAgIHwgIDIwICsrCiBjb250 cmliL2lvX2xpbWl0L2lvX2xpbWl0LmMgICAgICAgICAgICAgfCAyNzUgKysrKysrKysrKysrKysr KysrKysrKysrCiBjb250cmliL2lvX2xpbWl0L2lvX2xpbWl0LmNvbnRyb2wgICAgICAgfCAgIDUg KwogY29udHJpYi9pb19saW1pdC9tZXNvbi5idWlsZCAgICAgICAgICAgIHwgIDI4ICsrKwogY29u dHJpYi9tZXNvbi5idWlsZCAgICAgICAgICAgICAgICAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5k L3N0b3JhZ2UvYWlvL21ldGhvZF93b3JrZXIuYyB8ICAxMyArKwogc3JjL2luY2x1ZGUvc3RvcmFn ZS9pb193b3JrZXIuaCAgICAgICAgIHwgICA1ICsKIDggZmlsZXMgY2hhbmdlZCwgMzQ4IGluc2Vy dGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL2lvX2xpbWl0L01ha2VmaWxlCiBj cmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9pb19saW1pdC9pb19saW1pdC5jCiBjcmVhdGUgbW9k ZSAxMDA2NDQgY29udHJpYi9pb19saW1pdC9pb19saW1pdC5jb250cm9sCiBjcmVhdGUgbW9kZSAx MDA2NDQgY29udHJpYi9pb19saW1pdC9tZXNvbi5idWlsZAoKZGlmZiAtLWdpdCBhL2NvbnRyaWIv TWFrZWZpbGUgYi9jb250cmliL01ha2VmaWxlCmluZGV4IDdkOTFmZTc3ZGIzLi40OGU4MmM1MzMz MyAxMDA2NDQKLS0tIGEvY29udHJpYi9NYWtlZmlsZQorKysgYi9jb250cmliL01ha2VmaWxlCkBA IC0yNCw2ICsyNCw3IEBAIFNVQkRJUlMgPSBcCiAJCWhzdG9yZQkJXAogCQlpbnRhZ2cJCVwKIAkJ aW50YXJyYXkJXAorCQlpb19saW1pdAlcCiAJCWlzbgkJXAogCQlsbwkJXAogCQlsdHJlZQkJXApk aWZmIC0tZ2l0IGEvY29udHJpYi9pb19saW1pdC9NYWtlZmlsZSBiL2NvbnRyaWIvaW9fbGltaXQv TWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmRhMTc2Njk4 YTE3Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9pb19saW1pdC9NYWtlZmlsZQpAQCAtMCww ICsxLDIwIEBACisjIGNvbnRyaWIvaW9fbGltaXQvTWFrZWZpbGUKKworTU9EVUxFX2JpZyA9IGlv X2xpbWl0CitPQkpTID0gXAorCSQoV0lOMzJSRVMpIFwKKwlpb19saW1pdC5vCisKK0VYVEVOU0lP TiA9IGlvX2xpbWl0CitQR0ZJTEVERVNDID0gImlvX2xpbWl0IC0gaW9fbGltaXQgLSBhcnRpZmlj aWFsbHkgbGltaXQgYXN5bmNocm9ub3VzIEkvTyBmb3IgdGVzaW5nIgorCitpZmRlZiBVU0VfUEdY UworUEdfQ09ORklHID0gcGdfY29uZmlnCitQR1hTIDo9ICQoc2hlbGwgJChQR19DT05GSUcpIC0t cGd4cykKK2luY2x1ZGUgJChQR1hTKQorZWxzZQorc3ViZGlyID0gY29udHJpYi9wZ19wcmV3YXJt Cit0b3BfYnVpbGRkaXIgPSAuLi8uLgoraW5jbHVkZSAkKHRvcF9idWlsZGRpcikvc3JjL01ha2Vm aWxlLmdsb2JhbAoraW5jbHVkZSAkKHRvcF9zcmNkaXIpL2NvbnRyaWIvY29udHJpYi1nbG9iYWwu bWsKK2VuZGlmCmRpZmYgLS1naXQgYS9jb250cmliL2lvX2xpbWl0L2lvX2xpbWl0LmMgYi9jb250 cmliL2lvX2xpbWl0L2lvX2xpbWl0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAwMDAuLmZhMmVjNmYxZmYyCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9pb19saW1pdC9p b19saW1pdC5jCkBAIC0wLDAgKzEsMjc1IEBACisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2lu Y2x1ZGUgIm1pc2NhZG1pbi5oIgorI2luY2x1ZGUgInBvcnQvYXRvbWljcy5oIgorI2luY2x1ZGUg InBvcnRhYmlsaXR5L2luc3RyX3RpbWUuaCIKKyNpbmNsdWRlICJzdG9yYWdlL2Fpb19pbnRlcm5h bC5oIgorI2luY2x1ZGUgInN0b3JhZ2UvaW9fd29ya2VyLmgiCisjaW5jbHVkZSAic3RvcmFnZS9s d2xvY2suaCIKKyNpbmNsdWRlICJzdG9yYWdlL3NobWVtLmgiCisjaW5jbHVkZSAidXRpbHMvZ3Vj LmgiCisKKy8qIEdVQ3MuICovCitzdGF0aWMgaW50CWlvX2xpbWl0X2lvc19wZXJfc2Vjb25kID0g MDsKK3N0YXRpYyBpbnQJaW9fbGltaXRfcmVhZF9wZXJfc2Vjb25kID0gMDsKK3N0YXRpYyBpbnQJ aW9fbGltaXRfd3JpdGVfcGVyX3NlY29uZCA9IDA7CisKK3R5cGVkZWYgc3RydWN0IGlvX2xpbWl0 X2NvbnRyb2xfZGF0YQoreworCS8qIFdoZXRoZXIgYW55IEdVQyBpcyBzZXQgdG8gYSBub24temVy byB2YWx1ZS4gKi8KKwlib29sCQllbmFibGVkOworCisJLyogQWJzb2x1dGUgdGltZSB0byB3YWl0 IHVudGlsLiAqLworCXBnX2F0b21pY191aW50NjQgb3BfbmV4dF9uczsKKwlwZ19hdG9taWNfdWlu dDY0IHJlYWRfbmV4dF9uczsKKwlwZ19hdG9taWNfdWludDY0IHdyaXRlX25leHRfbnM7CisKKwkv KiBMaW1pdHMgZXhwcmVzc2VkIGFzIGRlbGF5IGludGVydmFscy4gKi8KKwlMV0xvY2sJCWxvY2s7 CisJaW50CQkJb3BfbnM7CisJaW50CQkJcmVhZF9ibG9ja19uczsKKwlpbnQJCQl3cml0ZV9ibG9j a19uczsKK30JCQlpb19saW1pdF9jb250cm9sX2RhdGE7CisKK3N0YXRpYyBpb19saW1pdF9jb250 cm9sX2RhdGEgKiBpb19saW1pdF9jb250cm9sOworCitzdGF0aWMgdm9pZCBpb19saW1pdF9zaG1l bV9yZXF1ZXN0KHZvaWQgKmFyZyk7CitzdGF0aWMgdm9pZCBpb19saW1pdF9zaG1lbV9pbml0KHZv aWQgKmFyZyk7CisKK3N0YXRpYyB2b2lkIGFzc2lnbl9pb19saW1pdF9pb3NfcGVyX3NlY29uZChp bnQgbmV3dmFsLCB2b2lkICpleHRyYSk7CitzdGF0aWMgdm9pZCBhc3NpZ25faW9fbGltaXRfcmVh ZF9wZXJfc2Vjb25kKGludCBuZXd2YWwsIHZvaWQgKmV4dHJhKTsKK3N0YXRpYyB2b2lkIGFzc2ln bl9pb19saW1pdF93cml0ZV9wZXJfc2Vjb25kKGludCBuZXd2YWwsIHZvaWQgKmV4dHJhKTsKK3N0 YXRpYyBjb25zdCBjaGFyICpzaG93X2lvX2xpbWl0X2lvc19wZXJfc2Vjb25kKHZvaWQpOworc3Rh dGljIGNvbnN0IGNoYXIgKnNob3dfaW9fbGltaXRfcmVhZF9wZXJfc2Vjb25kKHZvaWQpOworc3Rh dGljIGNvbnN0IGNoYXIgKnNob3dfaW9fbGltaXRfd3JpdGVfcGVyX3NlY29uZCh2b2lkKTsKKwor c3RhdGljIHZvaWQgaW9fbGltaXRfb25fcGVyZm9ybShQZ0Fpb0hhbmRsZSAqaW9oKTsKKworc3Rh dGljIGNvbnN0IFNobWVtQ2FsbGJhY2tzIGlvX2xpbWl0X3NobWVtX2NhbGxiYWNrcyA9IHsKKwku cmVxdWVzdF9mbiA9IGlvX2xpbWl0X3NobWVtX3JlcXVlc3QsCisJLmluaXRfZm4gPSBpb19saW1p dF9zaG1lbV9pbml0LAorfTsKKworUEdfTU9EVUxFX01BR0lDX0VYVCgKKwkJCQkJLm5hbWUgPSAi aW9fbGltaXQiLAorCQkJCQkudmVyc2lvbiA9IFBHX1ZFUlNJT04KKyk7CisKK3ZvaWQKK19QR19p bml0KHZvaWQpCit7CisJLyogQmFpbCBvdXQgaWYgbm90IGNvbmZpZ3VyZWQgaW4gc2hhcmVkX3By ZWxvYWRfbGlicmFyaWVzLiAqLworCWlmICghcHJvY2Vzc19zaGFyZWRfcHJlbG9hZF9saWJyYXJp ZXNfaW5fcHJvZ3Jlc3MpCisJCXJldHVybjsKKworCURlZmluZUN1c3RvbUludFZhcmlhYmxlKCJp b19saW1pdC5pb3NfcGVyX3NlY29uZCIsCisJCQkJCQkJIkxpbWl0cyBJT3MgcGVyIHNlY29uZC4i LAorCQkJCQkJCSJJZiBzZXQgdG8gemVybywgdGhlcmUgaXMgbm8gbGltaXQuIiwKKwkJCQkJCQkm aW9fbGltaXRfaW9zX3Blcl9zZWNvbmQsCisJCQkJCQkJMCwKKwkJCQkJCQkwLCBJTlRfTUFYLAor CQkJCQkJCVBHQ19VU0VSU0VULAorCQkJCQkJCTAsCisJCQkJCQkJTlVMTCwKKwkJCQkJCQlhc3Np Z25faW9fbGltaXRfaW9zX3Blcl9zZWNvbmQsCisJCQkJCQkJc2hvd19pb19saW1pdF9pb3NfcGVy X3NlY29uZCk7CisJRGVmaW5lQ3VzdG9tSW50VmFyaWFibGUoImlvX2xpbWl0LnJlYWRfcGVyX3Nl Y29uZCIsCisJCQkJCQkJIkxpbWl0cyByZWFkIGJhbmR3aWR0aC4iLAorCQkJCQkJCSJJZiBzZXQg dG8gemVybywgdGhlcmUgaXMgbm8gbGltaXQuIiwKKwkJCQkJCQkmaW9fbGltaXRfcmVhZF9wZXJf c2Vjb25kLAorCQkJCQkJCTAsCisJCQkJCQkJMCwgSU5UX01BWCwKKwkJCQkJCQlQR0NfVVNFUlNF VCwKKwkJCQkJCQlHVUNfVU5JVF9CTE9DS1MsCisJCQkJCQkJTlVMTCwKKwkJCQkJCQlhc3NpZ25f aW9fbGltaXRfcmVhZF9wZXJfc2Vjb25kLAorCQkJCQkJCXNob3dfaW9fbGltaXRfcmVhZF9wZXJf c2Vjb25kKTsKKwlEZWZpbmVDdXN0b21JbnRWYXJpYWJsZSgiaW9fbGltaXQud3JpdGVfcGVyX3Nl Y29uZCIsCisJCQkJCQkJIkxpbWl0cyB3cml0ZSBiYW5kd2lkdGguIiwKKwkJCQkJCQkiSWYgc2V0 IHRvIHplcm8sIHRoZXJlIGlzIG5vIGxpbWl0LiIsCisJCQkJCQkJJmlvX2xpbWl0X3dyaXRlX3Bl cl9zZWNvbmQsCisJCQkJCQkJMCwKKwkJCQkJCQkwLCBJTlRfTUFYLAorCQkJCQkJCVBHQ19VU0VS U0VULAorCQkJCQkJCUdVQ19VTklUX0JMT0NLUywKKwkJCQkJCQlOVUxMLAorCQkJCQkJCWFzc2ln bl9pb19saW1pdF93cml0ZV9wZXJfc2Vjb25kLAorCQkJCQkJCXNob3dfaW9fbGltaXRfd3JpdGVf cGVyX3NlY29uZCk7CisKKwlNYXJrR1VDUHJlZml4UmVzZXJ2ZWQoImlvX2xpbWl0Iik7CisJUmVn aXN0ZXJTaG1lbUNhbGxiYWNrcygmaW9fbGltaXRfc2htZW1fY2FsbGJhY2tzKTsKKwlwZ2Fpb193 b3JrZXJfc2V0X29uX3BlcmZvcm1faG9vayhpb19saW1pdF9vbl9wZXJmb3JtKTsKK30KKworc3Rh dGljIHZvaWQKK2lvX2xpbWl0X3NobWVtX3JlcXVlc3Qodm9pZCAqYXJnKQoreworCVNobWVtUmVx dWVzdFN0cnVjdCgubmFtZSA9ICJpb19saW1pdCIsCisJCQkJCSAgIC5zaXplID0gc2l6ZW9mKGlv X2xpbWl0X2NvbnRyb2xfZGF0YSksCisJCQkJCSAgIC5wdHIgPSAodm9pZCAqKikgJmlvX2xpbWl0 X2NvbnRyb2wpOworfQorCitzdGF0aWMgdm9pZAoraW9fbGltaXRfc2htZW1faW5pdCh2b2lkICph cmcpCit7CisJbWVtc2V0KGlvX2xpbWl0X2NvbnRyb2wsIDAsIHNpemVvZigqaW9fbGltaXRfY29u dHJvbCkpOworCXBnX2F0b21pY19pbml0X3U2NCgmaW9fbGltaXRfY29udHJvbC0+b3BfbmV4dF9u cywgMCk7CisJcGdfYXRvbWljX2luaXRfdTY0KCZpb19saW1pdF9jb250cm9sLT5yZWFkX25leHRf bnMsIDApOworCXBnX2F0b21pY19pbml0X3U2NCgmaW9fbGltaXRfY29udHJvbC0+d3JpdGVfbmV4 dF9ucywgMCk7CisJTFdMb2NrSW5pdGlhbGl6ZSgmaW9fbGltaXRfY29udHJvbC0+bG9jaywgTFdM b2NrTmV3VHJhbmNoZUlkKCJpb19saW1pdCIpKTsKKworCS8qIEFzc2lnbiBpbml0aWFsIHZhbHVl cy4gKi8KKwlhc3NpZ25faW9fbGltaXRfaW9zX3Blcl9zZWNvbmQoaW9fbGltaXRfaW9zX3Blcl9z ZWNvbmQsIE5VTEwpOworCWFzc2lnbl9pb19saW1pdF9yZWFkX3Blcl9zZWNvbmQoaW9fbGltaXRf cmVhZF9wZXJfc2Vjb25kLCBOVUxMKTsKKwlhc3NpZ25faW9fbGltaXRfd3JpdGVfcGVyX3NlY29u ZChpb19saW1pdF93cml0ZV9wZXJfc2Vjb25kLCBOVUxMKTsKK30KKworc3RhdGljIHZvaWQKK2Fz c2lnbl9pb19saW1pdChpbnQgKndhaXRfbnMsIGludCBwZXJfc2Vjb25kKQoreworCS8qIElnbm9y ZSBjYWxsIGZyb20gX1BHX2luaXQoKSBiZWZvcmUgcmVhZHkuICovCisJaWYgKCFpb19saW1pdF9j b250cm9sKQorCQlyZXR1cm47CisKKwlMV0xvY2tBY3F1aXJlKCZpb19saW1pdF9jb250cm9sLT5s b2NrLCBMV19FWENMVVNJVkUpOworCSp3YWl0X25zID0gcGVyX3NlY29uZCA9PSAwID8gMCA6IE5T X1BFUl9TIC8gcGVyX3NlY29uZDsKKwlpb19saW1pdF9jb250cm9sLT5lbmFibGVkID0KKwkJaW9f bGltaXRfY29udHJvbC0+b3BfbnMgPiAwIHx8CisJCWlvX2xpbWl0X2NvbnRyb2wtPnJlYWRfYmxv Y2tfbnMgPiAwIHx8CisJCWlvX2xpbWl0X2NvbnRyb2wtPndyaXRlX2Jsb2NrX25zID4gMDsKKwlM V0xvY2tSZWxlYXNlKCZpb19saW1pdF9jb250cm9sLT5sb2NrKTsKK30KKworc3RhdGljIHZvaWQK K2Fzc2lnbl9pb19saW1pdF9pb3NfcGVyX3NlY29uZChpbnQgbmV3dmFsLCB2b2lkICpleHRyYSkK K3sKKwlhc3NpZ25faW9fbGltaXQoJmlvX2xpbWl0X2NvbnRyb2wtPm9wX25zLCBuZXd2YWwpOwor fQorCitzdGF0aWMgdm9pZAorYXNzaWduX2lvX2xpbWl0X3JlYWRfcGVyX3NlY29uZChpbnQgbmV3 dmFsLCB2b2lkICpleHRyYSkKK3sKKwlhc3NpZ25faW9fbGltaXQoJmlvX2xpbWl0X2NvbnRyb2wt PnJlYWRfYmxvY2tfbnMsIG5ld3ZhbCk7Cit9CisKK3N0YXRpYyB2b2lkCithc3NpZ25faW9fbGlt aXRfd3JpdGVfcGVyX3NlY29uZChpbnQgbmV3dmFsLCB2b2lkICpleHRyYSkKK3sKKwlhc3NpZ25f aW9fbGltaXQoJmlvX2xpbWl0X2NvbnRyb2wtPndyaXRlX2Jsb2NrX25zLCBuZXd2YWwpOworfQor CitzdGF0aWMgY29uc3QgY2hhciAqCitzaG93X2lvX2xpbWl0KGNvbnN0IGludCAqd2FpdF9ucykK K3sKKwlpbnQJCQlwZXJfc2Vjb25kOworCisJTFdMb2NrQWNxdWlyZSgmaW9fbGltaXRfY29udHJv bC0+bG9jaywgTFdfU0hBUkVEKTsKKwlwZXJfc2Vjb25kID0gKndhaXRfbnMgPT0gMCA/IDAgOiBO U19QRVJfUyAvICp3YWl0X25zOworCUxXTG9ja1JlbGVhc2UoJmlvX2xpbWl0X2NvbnRyb2wtPmxv Y2spOworCisJcmV0dXJuIHBzcHJpbnRmKCIlZCIsIHBlcl9zZWNvbmQpOworfQorCitzdGF0aWMg Y29uc3QgY2hhciAqCitzaG93X2lvX2xpbWl0X2lvc19wZXJfc2Vjb25kKHZvaWQpCit7CisJcmV0 dXJuIHNob3dfaW9fbGltaXQoJmlvX2xpbWl0X2NvbnRyb2wtPm9wX25zKTsKK30KKworc3RhdGlj IGNvbnN0IGNoYXIgKgorc2hvd19pb19saW1pdF9yZWFkX3Blcl9zZWNvbmQodm9pZCkKK3sKKwly ZXR1cm4gc2hvd19pb19saW1pdCgmaW9fbGltaXRfY29udHJvbC0+cmVhZF9ibG9ja19ucyk7Cit9 CisKK3N0YXRpYyBjb25zdCBjaGFyICoKK3Nob3dfaW9fbGltaXRfd3JpdGVfcGVyX3NlY29uZCh2 b2lkKQoreworCXJldHVybiBzaG93X2lvX2xpbWl0KCZpb19saW1pdF9jb250cm9sLT53cml0ZV9i bG9ja19ucyk7Cit9CisKK3N0YXRpYyBCbG9ja051bWJlcgoraW9fbGltaXRfZ2V0X2Jsb2NrX2Nv dW50KFBnQWlvSGFuZGxlICppb2gpCit7CisJaWYgKGlvaC0+b3AgPT0gUEdBSU9fT1BfUkVBRFYg fHwKKwkJaW9oLT5vcCA9PSBQR0FJT19PUF9XUklURVYpCisJeworCQlzdHJ1Y3QgaW92ZWMgKmlv djsKKwkJc2l6ZV90CQlzaXplOworCQlpbnQJCQlpb3ZjbnQ7CisKKwkJc2l6ZSA9IDA7CisJCWlv dmNudCA9IHBnYWlvX2lvX2dldF9pb3ZlY19sZW5ndGgoaW9oLCAmaW92KTsKKwkJZm9yIChpbnQg aSA9IDA7IGkgPCBpb3ZjbnQ7ICsraSkKKwkJCXNpemUgKz0gaW92W2ldLmlvdl9sZW47CisKKwkJ cmV0dXJuIHNpemUgLyBCTENLU1o7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBXYWl0 IHVudGlsICpuZXh0X25zX3AgYW5kIGFkdmFuY2UgKm5leHRfbnNfcCBieSBkZWxheV9ucy4KKyAq Lworc3RhdGljIHZvaWQKK2lvX2xpbWl0X3dhaXQocGdfYXRvbWljX3VpbnQ2NCAqbmV4dF9uc19w LCBpbnQgZGVsYXlfbnMpCit7CisJaW5zdHJfdGltZQlub3c7CisJdWludDY0CQlub3dfbnM7CisJ dWludDY0CQluZXh0X25zOworCisJSU5TVFJfVElNRV9TRVRfQ1VSUkVOVChub3cpOworCW5vd19u cyA9IElOU1RSX1RJTUVfR0VUX05BTk9TRUMobm93KTsKKwluZXh0X25zID0gcGdfYXRvbWljX3Jl YWRfdTY0KG5leHRfbnNfcCk7CisKKwlmb3IgKDs7KQorCXsKKwkJaWYgKG5leHRfbnMgPiBub3df bnMpCisJCXsKKwkJCS8qIE5lZWQgdG8gd2FpdC4gIERlbGF5IHRoZSBuZXh0IG9wIGZ1cnRoZXIu ICovCisJCQluZXh0X25zID0gcGdfYXRvbWljX2ZldGNoX2FkZF91NjQobmV4dF9uc19wLCBkZWxh eV9ucyk7CisKKwkJCS8qIEF2ZXJhZ2UgcmF0ZSBtYWludGFpbmVkIGV2ZW4gd2l0aCBsb3ctcmVz IHNsZWVwIG9yIEVJTlRSLiAqLworCQkJcGdfdXNsZWVwKCgobmV4dF9ucyAtIG5vd19ucykgKyA5 OTkpIC8gMTAwMCk7CisJCQlicmVhazsKKwkJfQorCQllbHNlCisJCXsKKwkJCS8qIERvbid0IG5l ZWQgdG8gd2FpdC4gIE5ldyBuZXh0X25zIGlzIHJlbGF0aXZlIHRvIG5vdy4gKi8KKwkJCWlmIChw Z19hdG9taWNfY29tcGFyZV9leGNoYW5nZV91NjQobmV4dF9uc19wLAorCQkJCQkJCQkJCQkgICAm bmV4dF9ucywKKwkJCQkJCQkJCQkJICAgbm93X25zICsgZGVsYXlfbnMpKQorCQkJCWJyZWFrOwor CQl9CisJfQorfQorCitzdGF0aWMgdm9pZAoraW9fbGltaXRfb25fcGVyZm9ybShQZ0Fpb0hhbmRs ZSAqaW9oKQoreworCWludAkJCW9wX25zOworCWludAkJCXJlYWRfYmxvY2tfbnM7CisJaW50CQkJ d3JpdGVfYmxvY2tfbnM7CisKKwlpZiAoIWlvX2xpbWl0X2NvbnRyb2wtPmVuYWJsZWQpCisJCXJl dHVybjsKKworCW9wX25zID0gaW9fbGltaXRfY29udHJvbC0+b3BfbnM7CisJaWYgKG9wX25zKQor CQlpb19saW1pdF93YWl0KCZpb19saW1pdF9jb250cm9sLT5vcF9uZXh0X25zLCBvcF9ucyk7CisK KwlpZiAoaW9oLT5vcCA9PSBQR0FJT19PUF9SRUFEVikKKwl7CisJCXJlYWRfYmxvY2tfbnMgPSBp b19saW1pdF9jb250cm9sLT5yZWFkX2Jsb2NrX25zOworCQlpZiAocmVhZF9ibG9ja19ucykKKwkJ CWlvX2xpbWl0X3dhaXQoJmlvX2xpbWl0X2NvbnRyb2wtPnJlYWRfbmV4dF9ucywKKwkJCQkJCSAg aW9fbGltaXRfZ2V0X2Jsb2NrX2NvdW50KGlvaCkgKiByZWFkX2Jsb2NrX25zKTsKKwl9CisJZWxz ZSBpZiAoaW9oLT5vcCA9PSBQR0FJT19PUF9XUklURVYpCisJeworCQl3cml0ZV9ibG9ja19ucyA9 IGlvX2xpbWl0X2NvbnRyb2wtPndyaXRlX2Jsb2NrX25zOworCQlpb19saW1pdF93YWl0KCZpb19s aW1pdF9jb250cm9sLT53cml0ZV9uZXh0X25zLAorCQkJCQkgIGlvX2xpbWl0X2dldF9ibG9ja19j b3VudChpb2gpICogd3JpdGVfYmxvY2tfbnMpOworCX0KK30KZGlmZiAtLWdpdCBhL2NvbnRyaWIv aW9fbGltaXQvaW9fbGltaXQuY29udHJvbCBiL2NvbnRyaWIvaW9fbGltaXQvaW9fbGltaXQuY29u dHJvbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMmY4ZjA2YzllODcK LS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2lvX2xpbWl0L2lvX2xpbWl0LmNvbnRyb2wKQEAg LTAsMCArMSw1IEBACisjIGlvX2xpbWl0IGV4dGVuc2lvbgorY29tbWVudCA9ICdpb19saW1pdCcK K2RlZmF1bHRfdmVyc2lvbiA9ICcxLjAnCittb2R1bGVfcGF0aG5hbWUgPSAnJGxpYmRpci9pb19s aW1pdCcKK3JlbG9jYXRhYmxlID0gdHJ1ZQpkaWZmIC0tZ2l0IGEvY29udHJpYi9pb19saW1pdC9t ZXNvbi5idWlsZCBiL2NvbnRyaWIvaW9fbGltaXQvbWVzb24uYnVpbGQKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjFkMjZhMDhkZTgzCi0tLSAvZGV2L251bGwKKysrIGIv Y29udHJpYi9pb19saW1pdC9tZXNvbi5idWlsZApAQCAtMCwwICsxLDI4IEBACisjIENvcHlyaWdo dCAoYykgMjAyMi0yMDI2LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorCitp b19saW1pdF9zb3VyY2VzID0gZmlsZXMoCisgICdpb19saW1pdC5jJywKKykKKworaWYgaG9zdF9z eXN0ZW0gPT0gJ3dpbmRvd3MnCisgIGlvX2xpbWl0X3NvdXJjZXMgKz0gcmNfbGliX2dlbi5wcm9j ZXNzKHdpbjMydmVyX3JjLCBleHRyYV9hcmdzOiBbCisgICAgJy0tTkFNRScsICdpb19saW1pdCcs CisgICAgJy0tRklMRURFU0MnLCAnaW9fbGltaXQgLSBhcnRpZmljaWFsbHkgbGltaXQgYXN5bmNo cm9ub3VzIEkvTyBmb3IgdGVzaW5nJyxdKQorZW5kaWYKKworaW9fbGltaXQgPSBzaGFyZWRfbW9k dWxlKCdpb19saW1pdCcsCisgIGlvX2xpbWl0X3NvdXJjZXMsCisgIGt3YXJnczogY29udHJpYl9t b2RfYXJncywKKykKK2NvbnRyaWJfdGFyZ2V0cyArPSBpb19saW1pdAorCitpbnN0YWxsX2RhdGEo CisgICdpb19saW1pdC5jb250cm9sJywKKyAga3dhcmdzOiBjb250cmliX2RhdGFfYXJncywKKykK KwordGVzdHMgKz0geworICAnbmFtZSc6ICdpb19saW1pdCcsCisgICdzZCc6IG1lc29uLmN1cnJl bnRfc291cmNlX2RpcigpLAorICAnYmQnOiBtZXNvbi5jdXJyZW50X2J1aWxkX2RpcigpLAorfQpk aWZmIC0tZ2l0IGEvY29udHJpYi9tZXNvbi5idWlsZCBiL2NvbnRyaWIvbWVzb24uYnVpbGQKaW5k ZXggZWJiN2Y4M2Q4YzUuLjM5OGIwZDcwNGI1IDEwMDY0NAotLS0gYS9jb250cmliL21lc29uLmJ1 aWxkCisrKyBiL2NvbnRyaWIvbWVzb24uYnVpbGQKQEAgLTM0LDYgKzM0LDcgQEAgc3ViZGlyKCdo c3RvcmVfcGxwZXJsJykKIHN1YmRpcignaHN0b3JlX3BscHl0aG9uJykKIHN1YmRpcignaW50YWdn JykKIHN1YmRpcignaW50YXJyYXknKQorc3ViZGlyKCdpb19saW1pdCcpCiBzdWJkaXIoJ2lzbicp CiBzdWJkaXIoJ2pzb25iX3BscGVybCcpCiBzdWJkaXIoJ2pzb25iX3BscHl0aG9uJykKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL21ldGhvZF93b3JrZXIuYyBiL3NyYy9iYWNr ZW5kL3N0b3JhZ2UvYWlvL21ldGhvZF93b3JrZXIuYwppbmRleCBhNWNjZDUwNmQ4Yy4uODdhZmNm ODU2ZTEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL21ldGhvZF93b3JrZXIu YworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9tZXRob2Rfd29ya2VyLmMKQEAgLTEzOSw2 ICsxMzksNyBAQCBzdGF0aWMgaW50CU15SW9Xb3JrZXJJZCA9IC0xOwogc3RhdGljIFBnQWlvV29y a2VyU3VibWlzc2lvblF1ZXVlICppb193b3JrZXJfc3VibWlzc2lvbl9xdWV1ZTsKIHN0YXRpYyBQ Z0Fpb1dvcmtlckNvbnRyb2wgKmlvX3dvcmtlcl9jb250cm9sOwogCitzdGF0aWMgaW9fd29ya2Vy X29uX3BlcmZvcm1fZm4gaW9fd29ya2VyX29uX3BlcmZvcm1faG9vazsKIAogc3RhdGljIHZvaWQK IHBnYWlvX3dvcmtlcnNldF9pbml0aWFsaXplKFBnQWlvV29ya2VyU2V0ICpzZXQpCkBAIC01Mjks NiArNTMwLDkgQEAgcGdhaW9fd29ya2VyX3N1Ym1pdCh1aW50MTYgbnVtX3N0YWdlZF9pb3MsIFBn QWlvSGFuZGxlICoqc3RhZ2VkX2lvcykKIAkJZm9yIChpbnQgaSA9IDA7IGkgPCBuc3luYzsgKytp KQogCQl7CiAJCQlwZ2Fpb19pb19wZXJmb3JtX3N5bmNocm9ub3VzbHkoc3luY2hyb25vdXNfaW9z W2ldKTsKKworCQkJaWYgKGlvX3dvcmtlcl9vbl9wZXJmb3JtX2hvb2spCisJCQkJaW9fd29ya2Vy X29uX3BlcmZvcm1faG9vayhzeW5jaHJvbm91c19pb3NbaV0pOwogCQl9CiAJfQogCkBAIC05Mjks NiArOTMzLDkgQEAgSW9Xb3JrZXJNYWluKGNvbnN0IHZvaWQgKnN0YXJ0dXBfZGF0YSwgc2l6ZV90 IHN0YXJ0dXBfZGF0YV9sZW4pCiAJCQkgKi8KIAkJCXBnYWlvX2lvX3BlcmZvcm1fc3luY2hyb25v dXNseShpb2gpOwogCisJCQlpZiAoaW9fd29ya2VyX29uX3BlcmZvcm1faG9vaykKKwkJCQlpb193 b3JrZXJfb25fcGVyZm9ybV9ob29rKGlvaCk7CisKIAkJCVJFU1VNRV9JTlRFUlJVUFRTKCk7CiAJ CQllcnJjYWxsYmFjay5hcmcgPSBOVUxMOwogCQl9CkBAIC0xMDI0LDYgKzEwMzEsMTIgQEAgSW9X b3JrZXJNYWluKGNvbnN0IHZvaWQgKnN0YXJ0dXBfZGF0YSwgc2l6ZV90IHN0YXJ0dXBfZGF0YV9s ZW4pCiAJcHJvY19leGl0KDApOwogfQogCit2b2lkCitwZ2Fpb193b3JrZXJfc2V0X29uX3BlcmZv cm1faG9vayhpb193b3JrZXJfb25fcGVyZm9ybV9mbiBmbikKK3sKKwlpb193b3JrZXJfb25fcGVy Zm9ybV9ob29rID0gZm47Cit9CisKIGJvb2wKIHBnYWlvX3dvcmtlcnNfZW5hYmxlZCh2b2lkKQog ewpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9pb193b3JrZXIuaCBiL3NyYy9pbmNs dWRlL3N0b3JhZ2UvaW9fd29ya2VyLmgKaW5kZXggYzg1MmM5ZjM3NDEuLmM5ZWY0OWE1ODVkIDEw MDY0NAotLS0gYS9zcmMvaW5jbHVkZS9zdG9yYWdlL2lvX3dvcmtlci5oCisrKyBiL3NyYy9pbmNs dWRlL3N0b3JhZ2UvaW9fd29ya2VyLmgKQEAgLTI4LDQgKzI4LDkgQEAgZXh0ZXJuIGJvb2wgcGdh aW9fd29ya2VyX3BtX3Rlc3RfZ3Jvd19zaWduYWxfc2VudCh2b2lkKTsKIGV4dGVybiB2b2lkIHBn YWlvX3dvcmtlcl9wbV9jbGVhcl9ncm93X3NpZ25hbF9zZW50KHZvaWQpOwogZXh0ZXJuIGJvb2wg cGdhaW9fd29ya2VyX3BtX3Rlc3RfZ3Jvdyh2b2lkKTsKIAorLyogSG9vayB0byBzdXBwb3J0IGNv bnRyaWIvaW9fbGltaXQuICovCit0eXBlZGVmIHZvaWQgKCppb193b3JrZXJfb25fcGVyZm9ybV9m bikgKFBnQWlvSGFuZGxlICpoYW5kbGUpOworZXh0ZXJuIHZvaWQgcGdhaW9fd29ya2VyX3NldF9v bl9wZXJmb3JtX2hvb2soaW9fd29ya2VyX29uX3BlcmZvcm1fZm4gZm4pOworCisKICNlbmRpZgkJ CQkJCQkvKiBJT19XT1JLRVJfSCAqLwotLSAKMi41My4wCgo= --00000000000037898c064f297637--