From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on inbox.vuxu.org X-Spam-Level: X-Spam-Status: No, score=-1.0 required=5.0 tests=MAILING_LIST_MULTI, RCVD_IN_DNSWL_NONE autolearn=ham autolearn_force=no version=3.4.2 Received: from primenet.com.au (ns1.primenet.com.au [203.24.36.2]) by inbox.vuxu.org (OpenSMTPD) with ESMTP id 34f929e4 for ; Fri, 7 Feb 2020 07:48:03 +0000 (UTC) Received: (qmail 7592 invoked by alias); 7 Feb 2020 07:47:55 -0000 Mailing-List: contact zsh-workers-help@zsh.org; run by ezmlm Precedence: bulk X-No-Archive: yes List-Id: Zsh Workers List List-Post: List-Help: List-Unsubscribe: X-Seq: 45393 Received: (qmail 15923 invoked by uid 1010); 7 Feb 2020 07:47:55 -0000 X-Qmail-Scanner-Diagnostics: from mail-ot1-f48.google.com by f.primenet.com.au (envelope-from , uid 7791) with qmail-scanner-2.11 (clamdscan: 0.102.1/25713. spamassassin: 3.4.2. Clear:RC:0(209.85.210.48):SA:0(-1.6/5.0):. Processed in 2.034717 secs); 07 Feb 2020 07:47:55 -0000 X-Envelope-From: michael@i3wm.org X-Qmail-Scanner-Mime-Attachments: | X-Qmail-Scanner-Zip-Files: | Received-SPF: none (ns1.primenet.com.au: domain at i3wm.org does not designate permitted sender hosts) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=Y9V1WtmZAQdDu1zhoKXiPy/leiu8henSoO+YPowQtq4=; b=Vwlr2S2gN7tq+mmKSGYm0kJ4mgrsWzPASABxXSxWS0Cz9bkAsZ0oXoCzHWK3uh6AG/ aFuNEap3+atwt/ZZesYGZ4I+sqwyB/C7vKDK3y2y3pi8By72vVq5yg7OJ8pcL4GINCJJ 6KG/gpQh9C7afCM/IiXIXurmc0ShrKGkTi7X5k6jhn/8B2L8F6K4BljQTRhX+eFXEeEN FCt3uj2pZrO367m8qMl6owGcaxIiq6/iWRUtQ2lTJ9cEh21GbD0YizW+JM/ptCc42np/ DAiPewI9Cy+j0Uraisg+X1iMnfkJ6p5R7dZAQZ/IBETYlylAO0Mzg2K+1WmYws8DNyOk zZFg== X-Gm-Message-State: APjAAAWP+0/IMSWRAqizjN3LnLZfCWIvpD/R41YjFLxHrrfN2OX1eccM s7g61Xyf/t1Duu9fM4PSoxXOctEpBCX9VNVddeVTKsrCtKBzgw== X-Google-Smtp-Source: APXvYqxUeftIdGodl4rIxhgpP75REBgjg31aFrszxMW7C3TCq8uHH92J+WS8dSf1TO3rH2ix1Jof20kSd/kph5eW8bM= X-Received: by 2002:a9d:7757:: with SMTP id t23mr1736632otl.315.1581061638999; Thu, 06 Feb 2020 23:47:18 -0800 (PST) MIME-Version: 1.0 From: Michael Stapelberg Date: Fri, 7 Feb 2020 08:47:08 +0100 Message-ID: Subject: [PATCH] readhistfile: avoid thousands of lseek(2) syscalls via ftell() To: zsh-workers@zsh.org Content-Type: multipart/mixed; boundary="0000000000005cc850059df7996a" --0000000000005cc850059df7996a Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable [please cc me in replies, as I=E2=80=99m not subscribed to this list] Before this change, zsh startup time was dominated by lseek(2) system calls= on the history file, as shown by strace -c: time seconds usecs/call calls errors syscall ------ ----------- ----------- --------- --------- ---------------- 97,35 1,112890 1 697153 1 lseek 0,99 0,011314 2 5277 read [=E2=80=A6] This change keeps track of read bytes and the position within the file, rem= oving all of these system calls. I verified correctness of the change by comparing fpos with ftell(in) in ev= ery loop iteration. --0000000000005cc850059df7996a Content-Type: text/x-patch; charset="UTF-8"; name="0001-readhistfile-avoid-thousands-of-lseek-2-syscalls-via.patch" Content-Disposition: attachment; filename="0001-readhistfile-avoid-thousands-of-lseek-2-syscalls-via.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_k6bv98tm0 RnJvbSA1NWNhMDc1MWYxMTQzMmVmYWI2Njc0NTFjYzliNjNlYzBiZWNjMDM4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNaWNoYWVsIFN0YXBlbGJlcmcgPHN0YXBlbGJlcmdAZ29vZ2xl LmNvbT4KRGF0ZTogRnJpLCA3IEZlYiAyMDIwIDA4OjQxOjI2ICswMTAwClN1YmplY3Q6IFtQQVRD SF0gcmVhZGhpc3RmaWxlOiBhdm9pZCB0aG91c2FuZHMgb2YgbHNlZWsoMikgc3lzY2FsbHMgdmlh CiBmdGVsbCgpCk1JTUUtVmVyc2lvbjogMS4wCkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hh cnNldD1VVEYtOApDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CgpCZWZvcmUgdGhpcyBj aGFuZ2UsIHpzaCBzdGFydHVwIHRpbWUgd2FzIGRvbWluYXRlZCBieSBsc2VlaygyKSBzeXN0ZW0g Y2FsbHMgb24KdGhlIGhpc3RvcnkgZmlsZSwgYXMgc2hvd24gYnkgc3RyYWNlIC1jOgoKdGltZSAg ICAgc2Vjb25kcyAgdXNlY3MvY2FsbCAgICAgY2FsbHMgICAgZXJyb3JzIHN5c2NhbGwKLS0tLS0t IC0tLS0tLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0tLS0tLSAtLS0tLS0tLS0gLS0tLS0tLS0tLS0t LS0tLQogOTcsMzUgICAgMSwxMTI4OTAgICAgICAgICAgIDEgICAgNjk3MTUzICAgICAgICAgMSBs c2VlawogIDAsOTkgICAgMCwwMTEzMTQgICAgICAgICAgIDIgICAgICA1Mjc3ICAgICAgICAgICBy ZWFkClvigKZdCgpUaGlzIGNoYW5nZSBrZWVwcyB0cmFjayBvZiByZWFkIGJ5dGVzIGFuZCB0aGUg cG9zaXRpb24gd2l0aGluIHRoZSBmaWxlLCByZW1vdmluZwphbGwgb2YgdGhlc2Ugc3lzdGVtIGNh bGxzLgoKSSB2ZXJpZmllZCBjb3JyZWN0bmVzcyBvZiB0aGUgY2hhbmdlIGJ5IGNvbXBhcmluZyBm cG9zIHdpdGggZnRlbGwoaW4pIGluIGV2ZXJ5Cmxvb3AgaXRlcmF0aW9uLgotLS0KIFNyYy9oaXN0 LmMgfCAxMyArKysrKysrKy0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgOCBpbnNlcnRpb25zKCspLCA1 IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL1NyYy9oaXN0LmMgYi9TcmMvaGlzdC5jCmluZGV4 IDUyODFlODcxOC4uMTJlZWY1Mjk0IDEwMDY0NAotLS0gYS9TcmMvaGlzdC5jCisrKyBiL1NyYy9o aXN0LmMKQEAgLTI1NzUsMTAgKzI1NzUsMTEgQEAgcmVzaXplaGlzdGVudHModm9pZCkKIH0KIAog c3RhdGljIGludAotcmVhZGhpc3RsaW5lKGludCBzdGFydCwgY2hhciAqKmJ1ZnAsIGludCAqYnVm c2l6LCBGSUxFICppbikKK3JlYWRoaXN0bGluZShpbnQgc3RhcnQsIGNoYXIgKipidWZwLCBpbnQg KmJ1ZnNpeiwgRklMRSAqaW4sIGludCAqcmVhZGJ5dGVzKQogewogICAgIGNoYXIgKmJ1ZiA9ICpi dWZwOwogICAgIGlmIChmZ2V0cyhidWYgKyBzdGFydCwgKmJ1ZnNpeiAtIHN0YXJ0LCBpbikpIHsK KwkqcmVhZGJ5dGVzICs9IHN0cmxlbihidWYgKyBzdGFydCk7CiAJaW50IGxlbiA9IHN0YXJ0ICsg c3RybGVuKGJ1ZiArIHN0YXJ0KTsKIAlpZiAobGVuID09IHN0YXJ0KQogCSAgICByZXR1cm4gLTE7 CkBAIC0yNTg4LDcgKzI1ODksNyBAQCByZWFkaGlzdGxpbmUoaW50IHN0YXJ0LCBjaGFyICoqYnVm cCwgaW50ICpidWZzaXosIEZJTEUgKmluKQogCQkgICAgcmV0dXJuIC0xOwogCQkqYnVmcCA9IHpy ZWFsbG9jKGJ1ZiwgMiAqICgqYnVmc2l6KSk7CiAJCSpidWZzaXogPSAyICogKCpidWZzaXopOwot CQlyZXR1cm4gcmVhZGhpc3RsaW5lKGxlbiwgYnVmcCwgYnVmc2l6LCBpbik7CisJCXJldHVybiBy ZWFkaGlzdGxpbmUobGVuLCBidWZwLCBidWZzaXosIGluLCByZWFkYnl0ZXMpOwogCSAgICB9CiAJ fQogCWVsc2UgewpAQCAtMjU5Niw3ICsyNTk3LDcgQEAgcmVhZGhpc3RsaW5lKGludCBzdGFydCwg Y2hhciAqKmJ1ZnAsIGludCAqYnVmc2l6LCBGSUxFICppbikKIAkgICAgaWYgKGxlbiA+IDEgJiYg YnVmW2xlbiAtIDJdID09ICdcXCcpIHsKIAkJYnVmWy0tbGVuIC0gMV0gPSAnXG4nOwogCQlpZiAo IWZlb2YoaW4pKQotCQkgICAgcmV0dXJuIHJlYWRoaXN0bGluZShsZW4sIGJ1ZnAsIGJ1ZnNpeiwg aW4pOworCQkgICAgcmV0dXJuIHJlYWRoaXN0bGluZShsZW4sIGJ1ZnAsIGJ1ZnNpeiwgaW4sIHJl YWRieXRlcyk7CiAJICAgIH0KIAl9CiAJcmV0dXJuIGxlbjsKQEAgLTI2MTYsNyArMjYxNyw3IEBA IHJlYWRoaXN0ZmlsZShjaGFyICpmbiwgaW50IGVyciwgaW50IHJlYWRmbGFncykKICAgICBzaG9y dCAqd29yZHM7CiAgICAgc3RydWN0IHN0YXQgc2I7CiAgICAgaW50IG53b3JkcG9zLCBud29yZHMs IGJ1ZnNpejsKLSAgICBpbnQgc2VhcmNoaW5nLCBuZXdmbGFncywgbCwgcmV0LCB1c2VsZXg7Cisg ICAgaW50IHNlYXJjaGluZywgbmV3ZmxhZ3MsIGwsIHJldCwgdXNlbGV4LCByZWFkYnl0ZXM7CiAK ICAgICBpZiAoIWZuICYmICEoZm4gPSBnZXRzcGFyYW0oIkhJU1RGSUxFIikpKQogCXJldHVybjsK QEAgLTI2NTgsMTMgKzI2NTksMTUgQEAgcmVhZGhpc3RmaWxlKGNoYXIgKmZuLCBpbnQgZXJyLCBp bnQgcmVhZGZsYWdzKQogCX0gZWxzZQogCSAgICBzZWFyY2hpbmcgPSAwOwogCisJZnBvcyA9IGZ0 ZWxsKGluKTsKKwlyZWFkYnl0ZXMgPSAwOwogCW5ld2ZsYWdzID0gSElTVF9PTEQgfCBISVNUX1JF QUQ7CiAJaWYgKHJlYWRmbGFncyAmIEhGSUxFX0ZBU1QpCiAJICAgIG5ld2ZsYWdzIHw9IEhJU1Rf Rk9SRUlHTjsKIAlpZiAocmVhZGZsYWdzICYgSEZJTEVfU0tJUE9MRAogCSB8fCAoaGlzdF9pZ25v cmVfYWxsX2R1cHMgJiYgbmV3ZmxhZ3MgJiBoaXN0X3NraXBfZmxhZ3MpKQogCSAgICBuZXdmbGFn cyB8PSBISVNUX01BS0VVTklRVUU7Ci0Jd2hpbGUgKGZwb3MgPSBmdGVsbChpbiksIChsID0gcmVh ZGhpc3RsaW5lKDAsICZidWYsICZidWZzaXosIGluKSkpIHsKKwl3aGlsZSAoZnBvcyArPSByZWFk Ynl0ZXMsIHJlYWRieXRlcyA9IDAsIChsID0gcmVhZGhpc3RsaW5lKDAsICZidWYsICZidWZzaXos IGluLCAmcmVhZGJ5dGVzKSkpIHsKIAkgICAgY2hhciAqcHQ7CiAJICAgIGludCByZW1ldGEgPSAw OwogCi0tIAoyLjI1LjAKCg== --0000000000005cc850059df7996a--