From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail2-relais-roc.national.inria.fr (mail2-relais-roc.national.inria.fr [192.134.164.83]) by yquem.inria.fr (Postfix) with ESMTP id 4070DBC57 for ; Wed, 3 Mar 2010 09:49:42 +0100 (CET) X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AjIBAB6xjUvRVdrakGdsb2JhbACTL4dVCBUBAQEBCQkMBxMDH7AqhQmIdwEBAwWEdgSMGg X-IronPort-AV: E=Sophos;i="4.49,573,1262559600"; d="ml'?mli'?scan'208";a="45814547" Received: from mail-bw0-f218.google.com ([209.85.218.218]) by mail2-smtp-roc.national.inria.fr with ESMTP; 03 Mar 2010 09:49:41 +0100 Received: by bwz10 with SMTP id 10so990725bwz.22 for ; Wed, 03 Mar 2010 00:49:41 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:sender:received:in-reply-to :references:date:x-google-sender-auth:message-id:subject:from:to:cc :content-type; bh=l3qggvNpPjsFP/xN5jFdUM/Bu4/31H1G4LsZZ+nV3ok=; b=XgagvEfM0881pFxVcX7+oDKBepPjqcKQm3AnHfmuKhfVmfxSz5SyYhYZru9uD70tkj VxW5tYMZiXtJPEUZbePtPEHkE56ZzP56UChGLwzmVYNVXmmVjft0SzJXz27SII9W5EgT HMNgXHeB/1fIV8KO8PUj/pG9ZRIDAH6LkFApc= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:sender:in-reply-to:references:date :x-google-sender-auth:message-id:subject:from:to:cc:content-type; b=wuxmZDPKGttCXvVwb5Detb96PaFHnV+rF2uxHUPjstKFGmuf8uqYh09IZNSu3CCDA1 sJYN2f9vb78+dnTweeeHlrXIKCXarFtX/6UHKyWLAuinSQraOjAbtdYPe46tnW3IWUYa L2MX1OjXDrAftr5LbMhzWiUZX9o1mXY0rpSyQ= MIME-Version: 1.0 Sender: oandrieu@gmail.com Received: by 10.204.34.197 with SMTP id m5mr5802883bkd.20.1267606180939; Wed, 03 Mar 2010 00:49:40 -0800 (PST) In-Reply-To: <37150F07-8902-464A-9A0E-44A0C424C87B@gmail.com> References: <37150F07-8902-464A-9A0E-44A0C424C87B@gmail.com> Date: Wed, 3 Mar 2010 09:49:38 +0100 X-Google-Sender-Auth: 175f549018f2449a Message-ID: <95513601003030049y5c92200et4cec2a72d24a6abb@mail.gmail.com> Subject: Re: [Caml-list] gc overhead From: Olivier Andrieu To: Warren Harris Cc: OCaml Content-Type: multipart/mixed; boundary=00032555772e2195560480e1905a X-Spam: no; 0.00; andrieu:01 oandrieu:01 runtime:01 compiler:01 warren:98 garbage:01 wrote:01 parsing:01 typing:01 caml-list:01 minor:01 nerim:01 short:01 caml:02 allocated:02 X-Attachments: type="text/x-patch" name="ocaml-timing.patch" name="ocaml-timing.patch" type="text/x-ocaml" name="ocaml-timing.ml" name="ocaml-timing.ml" type="text/x-ocaml" name="ocaml-timing.mli" name="ocaml-timing.mli" --00032555772e2195560480e1905a Content-Type: text/plain; charset=ISO-8859-1 On Mon, Mar 1, 2010 at 01:16, Warren Harris wrote: > I would like to determine what percentage of my application's cpu time is > spent in the garbage collector (for tuning purposes, but also just to > monitor the overhead). Is there any way to obtain this information short of > using gprof? Additional information provided by Gc.stat would be ideal, or > perhaps a Gc.alarm that was called at the beginning of the gc cycle, but > neither of these seem to exist. Here's what I use to measure GC overhead in my programs. There's a small modification to the runtime, so as to track the time spent in caml_minor_collection, and a helper ml module. It tracks and prints the time spent between calls to the start() and stop() function of the helper module, as well the number of collections, number of bytes allocated, etc. It is rather coarse-grained of course. I use it to profile the different parts of a compiler: parsing, typing, optimizations, code generation, etc. -- Olivier --00032555772e2195560480e1905a Content-Type: text/x-patch; charset=US-ASCII; name="ocaml-timing.patch" Content-Disposition: attachment; filename="ocaml-timing.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_g6bvq2ng0 ZGlmZiAtdXAgLi9ieXRlcnVuL3N5cy5oLm9yaWcgLi9ieXRlcnVuL3N5cy5oCi0tLSAuL2J5dGVy dW4vc3lzLmgub3JpZwkyMDA3LTAyLTI1IDEzOjM4OjM2LjAwMDAwMDAwMCArMDEwMAorKysgLi9i eXRlcnVuL3N5cy5oCTIwMDctMTAtMDMgMTU6NDI6MTguMDAwMDAwMDAwICswMjAwCkBAIC0yNyw0 ICsyNyw2IEBAIENBTUxleHRlcm4gdmFsdWUgY2FtbF9zeXNfZXhpdCAodmFsdWUpOwogCiBleHRl cm4gY2hhciAqIGNhbWxfZXhlX25hbWU7CiAKK2RvdWJsZSBjYW1sX3RpY2sgKHZvaWQpOworCiAj ZW5kaWYgLyogQ0FNTF9TWVNfSCAqLwpkaWZmIC11cCAuL2J5dGVydW4vbWlub3JfZ2MuYy5vcmln IC4vYnl0ZXJ1bi9taW5vcl9nYy5jCi0tLSAuL2J5dGVydW4vbWlub3JfZ2MuYy5vcmlnCTIwMDUt MDktMjIgMTY6MjE6NTAuMDAwMDAwMDAwICswMjAwCisrKyAuL2J5dGVydW4vbWlub3JfZ2MuYwky MDA3LTEwLTAzIDE1OjQyOjE4LjAwMDAwMDAwMCArMDIwMApAQCAtMjcsNiArMjcsOSBAQAogI2lu Y2x1ZGUgInJvb3RzLmgiCiAjaW5jbHVkZSAic2lnbmFscy5oIgogCisjaW5jbHVkZSAiYWxsb2Mu aCIKKyNpbmNsdWRlICJzeXMuaCIKKwogYXNpemVfdCBjYW1sX21pbm9yX2hlYXBfc2l6ZTsKIENB TUxleHBvcnQgY2hhciAqY2FtbF95b3VuZ19zdGFydCA9IE5VTEwsICpjYW1sX3lvdW5nX2VuZCA9 IE5VTEw7CiBDQU1MZXhwb3J0IGNoYXIgKmNhbWxfeW91bmdfcHRyID0gTlVMTCwgKmNhbWxfeW91 bmdfbGltaXQgPSBOVUxMOwpAQCAtMzUsNiArMzgsMjAgQEAgQ0FNTGV4cG9ydCB2YWx1ZSAqKmNh bWxfcmVmX3RhYmxlX3B0ciA9IAogc3RhdGljIGFzaXplX3QgcmVmX3RhYmxlX3NpemUsIHJlZl90 YWJsZV9yZXNlcnZlOwogaW50IGNhbWxfaW5fbWlub3JfY29sbGVjdGlvbiA9IDA7CiAKK3N0YXRp YyBpbnQgY2FtbF9nY190aW1pbmc7Citkb3VibGUgY2FtbF9nY190aW1lID0gMC47CisKK0NBTUxw cmltIHZhbHVlIGNhbWxfZ2V0X2djX3RpbWUgKHZhbHVlIHVuaXQpCit7CisgIHJldHVybiBjYW1s X2NvcHlfZG91YmxlIChjYW1sX2djX3RpbWUpOworfQorCitDQU1McHJpbSB2YWx1ZSBjYW1sX3Nl dF9nY190aW1pbmcgKHZhbHVlIHYpCit7CisgIGNhbWxfZ2NfdGltaW5nID0gQm9vbF92YWwgKHYp OworICByZXR1cm4gVmFsX3VuaXQ7Cit9CisKIHZvaWQgY2FtbF9zZXRfbWlub3JfaGVhcF9zaXpl IChhc2l6ZV90IHNpemUpCiB7CiAgIGNoYXIgKm5ld19oZWFwOwpAQCAtMjE3LDggKzIzNCwxMyBA QCB2b2lkIGNhbWxfZW1wdHlfbWlub3JfaGVhcCAodm9pZCkKICovCiBDQU1MZXhwb3J0IHZvaWQg Y2FtbF9taW5vcl9jb2xsZWN0aW9uICh2b2lkKQogeworICBkb3VibGUgdF9zdGFydCwgdF9lbmQ7 CisKICAgaW50bmF0IHByZXZfYWxsb2Nfd29yZHMgPSBjYW1sX2FsbG9jYXRlZF93b3JkczsKIAor ICBpZiAoY2FtbF9nY190aW1pbmcpCisgICAgdF9zdGFydCA9IGNhbWxfdGljayAoKTsKKwogICBj YW1sX2VtcHR5X21pbm9yX2hlYXAgKCk7CiAKICAgY2FtbF9zdGF0X3Byb21vdGVkX3dvcmRzICs9 IGNhbWxfYWxsb2NhdGVkX3dvcmRzIC0gcHJldl9hbGxvY193b3JkczsKQEAgLTIyOSw2ICsyNTEs MTIgQEAgQ0FNTGV4cG9ydCB2b2lkIGNhbWxfbWlub3JfY29sbGVjdGlvbiAodgogICBjYW1sX2Zp bmFsX2RvX2NhbGxzICgpOwogCiAgIGNhbWxfZW1wdHlfbWlub3JfaGVhcCAoKTsKKworICBpZiAo Y2FtbF9nY190aW1pbmcpIAorICAgIHsKKyAgICAgIHRfZW5kID0gY2FtbF90aWNrICgpOworICAg ICAgY2FtbF9nY190aW1lICs9IHRfZW5kIC0gdF9zdGFydDsKKyAgICB9CiB9CiAKIENBTUxleHBv cnQgdmFsdWUgY2FtbF9jaGVja191cmdlbnRfZ2MgKHZhbHVlIGV4dHJhX3Jvb3QpCmRpZmYgLXVw IC4vYnl0ZXJ1bi9zeXMuYy5vcmlnIC4vYnl0ZXJ1bi9zeXMuYwotLS0gLi9ieXRlcnVuL3N5cy5j Lm9yaWcJMjAwNy0wMy0wMSAxNDozNzozOS4wMDAwMDAwMDAgKzAxMDAKKysrIC4vYnl0ZXJ1bi9z eXMuYwkyMDA3LTEwLTAzIDE1OjQyOjE4LjAwMDAwMDAwMCArMDIwMApAQCAtMzQ0LDMgKzM0NCw1 NCBAQCBDQU1McHJpbSB2YWx1ZSBjYW1sX3N5c19yZWFkX2RpcmVjdG9yeSh2CiAgIGNhbWxfZXh0 X3RhYmxlX2ZyZWUoJnRibCwgMSk7CiAgIENBTUxyZXR1cm4ocmVzdWx0KTsKIH0KKworCisjaW5j bHVkZSA8bWF0aC5oPgorc3RhdGljIGxvbmcgZHVtYl9nZXR0aW1lIChjbG9ja2lkX3QgaSwgc3Ry dWN0IHRpbWVzcGVjICp0cykKK3sKKyAgZG91YmxlIHQgPSBjbG9jayAoKSAvIChkb3VibGUpIENM T0NLU19QRVJfU0VDOworICB0cy0+dHZfc2VjICA9IHQ7CisgIHRzLT50dl9uc2VjID0gKHQgLSBm bG9vcih0KSkgKiAxZTk7CisgIHJldHVybiAwOworfQorCitzdGF0aWMgbG9uZyAoKiBnZXR0aW1l KShjbG9ja2lkX3QsIHN0cnVjdCB0aW1lc3BlYyAqKTsKKworI2luY2x1ZGUgPGRsZmNuLmg+Citz dGF0aWMgdm9pZCBpbml0X2dldHRpbWUgKCkKK3sKKyAgdm9pZCAqaDsKKyAgaCA9IGRsb3BlbiAo ImxpYnJ0LnNvIiwgUlRMRF9MQVpZKTsKKyAgaWYgKCEgaCkKKyAgICBnb3RvIGZhaWw7CisgIGRs ZXJyb3IgKCk7CisgICoodm9pZCAqKikoJmdldHRpbWUpID0gZGxzeW0gKGgsICJjbG9ja19nZXR0 aW1lIik7CisgIGlmIChkbGVycm9yICgpICE9IE5VTEwpCisgICAgeworICAgICAgZGxjbG9zZSAo aCk7CisgICAgICBnb3RvIGZhaWw7CisgICAgfQorICByZXR1cm47CisKKyBmYWlsOgorICBnZXR0 aW1lID0gZHVtYl9nZXR0aW1lOworfQorCisKK2RvdWJsZSBjYW1sX3RpY2sgKCkKK3sKKyAgc3Ry dWN0IHRpbWVzcGVjIHRwOworCisgIGlmICghIGdldHRpbWUpCisgICAgaW5pdF9nZXR0aW1lKCk7 CisKKyAgaWYgKGdldHRpbWUgKENMT0NLX1BST0NFU1NfQ1BVVElNRV9JRCwgJnRwKSkKKyAgICBh Ym9ydCgpOworCisgIHJldHVybiB0cC50dl9zZWMgKyAoMS5lLTkpICogdHAudHZfbnNlYzsKK30K KworQ0FNTHByaW0gdmFsdWUgY2FtbF9nZXRfdGljayAodmFsdWUgdW5pdCkKK3sKKyAgcmV0dXJu IGNhbWxfY29weV9kb3VibGUgKGNhbWxfdGljayAoKSk7Cit9Cg== --00032555772e2195560480e1905a Content-Type: text/x-ocaml; charset=US-ASCII; name="ocaml-timing.ml" Content-Disposition: attachment; filename="ocaml-timing.ml" Content-Transfer-Encoding: base64 X-Attachment-Id: f_g6bvqenb1 bGV0IGRvX3RpbWluZyA9IAogIHRyeSBpZ25vcmUgKFN5cy5nZXRlbnYgIlRJTUlORyIpIDsgdHJ1 ZQogIHdpdGggTm90X2ZvdW5kIC0+IGZhbHNlCgpleHRlcm5hbCBzZXRfZ2NfdGltaW5nIDogYm9v bCAtPiB1bml0ICA9ICJjYW1sX3NldF9nY190aW1pbmciICJub2FsbG9jIgpleHRlcm5hbCBnZXRf Z2NfdGltZSAgIDogdW5pdCAtPiBmbG9hdCA9ICJjYW1sX2dldF9nY190aW1lIgpleHRlcm5hbCBn ZXRfdGljayAgICAgIDogdW5pdCAtPiBmbG9hdCA9ICJjYW1sX2dldF90aWNrIgoKbGV0IGJwdyA9 IGZsb2F0X29mX2ludCAoU3lzLndvcmRfc2l6ZSAvIDgpCgpsZXQgZ2NfYWxsb2NfbWVtICgpID0K ICBsZXQgcyA9IEdjLnF1aWNrX3N0YXQgKCkgaW4KICBsZXQgbWkgPSBzLkdjLm1pbm9yX3dvcmRz CiAgYW5kIHByID0gcy5HYy5wcm9tb3RlZF93b3JkcwogIGFuZCBtYSA9IHMuR2MubWFqb3Jfd29y ZHMgaW4KICAobWkgLS4gcHIgKy4gbWEpICouIGJwdywKICBzLkdjLmhlYXBfd29yZHMsCiAgcy5H Yy5taW5vcl9jb2xsZWN0aW9ucywgcy5HYy5tYWpvcl9jb2xsZWN0aW9ucywgcy5HYy5jb21wYWN0 aW9ucwoKCgoKCgoKdHlwZSBjaHJvbm8gPSB7CiAgICBtdXRhYmxlIHRpY2sgICAgICAgICA6IGZs b2F0IDsKICAgIG11dGFibGUgZ2NfdGljayAgICAgIDogZmxvYXQgOwogICAgbXV0YWJsZSBnY19h bGxvYyAgICAgOiBmbG9hdCA7CiAgICBtdXRhYmxlIGdjX2hlYXAgICAgICA6IGludCA7CiAgICBt dXRhYmxlIGdjX2NvbGxlY19taSA6IGludCA7CiAgICBtdXRhYmxlIGdjX2NvbGxlY19tYSA6IGlu dCA7CiAgICBtdXRhYmxlIGdjX2NvbGxlY19jbyA6IGludCA7CiAgfQoKbGV0IG1ha2VfY2hyb25v ICgpID0gewogIHRpY2sgICAgICAgICA9IDAuIDsKICBnY190aWNrICAgICAgPSAwLiA7CiAgZ2Nf YWxsb2MgICAgID0gMC4gOwogIGdjX2hlYXAgICAgICA9IDAgOwogIGdjX2NvbGxlY19taSA9IDAg OwogIGdjX2NvbGxlY19tYSA9IDAgOwogIGdjX2NvbGxlY19jbyA9IDAgOwp9CgoKbGV0IGNocm9u b19zdGFydCBjID0KICBpZiBkb190aW1pbmcgdGhlbiBiZWdpbgogICAgYy50aWNrICAgIDwtIGdl dF90aWNrICgpIDsKICAgIGMuZ2NfdGljayA8LSBnZXRfZ2NfdGltZSAoKSA7CiAgICBsZXQgbWVt LCBfLCBtaSwgbWEsIGNvID0gZ2NfYWxsb2NfbWVtICgpIGluCiAgICBjLmdjX2FsbG9jICAgICA8 LSBtZW0gOwogICAgYy5nY19jb2xsZWNfbWkgPC0gbWkgOwogICAgYy5nY19jb2xsZWNfbWEgPC0g bWEgOwogICAgYy5nY19jb2xsZWNfY28gPC0gY28KICBlbmQKCmxldCBjaHJvbm9fc3RvcCBjID0K ICBpZiBkb190aW1pbmcgdGhlbiBiZWdpbgogICAgYy50aWNrICAgIDwtIGdldF90aWNrICgpIC0u IGMudGljayA7CiAgICBjLmdjX3RpY2sgPC0gZ2V0X2djX3RpbWUgKCkgLS4gYy5nY190aWNrIDsK ICAgIGxldCBuX21lbSwgaCwgbl9taSwgbl9tYSwgbl9jbyA9IGdjX2FsbG9jX21lbSAoKSBpbgog ICAgYy5nY19hbGxvYyAgICAgPC0gbl9tZW0gLS4gYy5nY19hbGxvYyA7CiAgICBjLmdjX2hlYXAg ICAgICA8LSBoIDsKICAgIGMuZ2NfY29sbGVjX21pIDwtIG5fbWkgLSBjLmdjX2NvbGxlY19taSA7 CiAgICBjLmdjX2NvbGxlY19tYSA8LSBuX21hIC0gYy5nY19jb2xsZWNfbWEgOyAgCiAgICBjLmdj X2NvbGxlY19jbyA8LSBuX2NvIC0gYy5nY19jb2xsZWNfY28gOwogIGVuZAoKbGV0IGNocm9ub19h Y2N1bSBjMSBjMiA9CiAgYzEudGljayAgICAgICAgIDwtIGMxLnRpY2sgKy4gYzIudGljayA7CiAg YzEuZ2NfdGljayAgICAgIDwtIGMxLmdjX3RpY2sgKy4gYzIuZ2NfdGljayA7CiAgYzEuZ2NfYWxs b2MgICAgIDwtIGMxLmdjX2FsbG9jICsuIGMyLmdjX2FsbG9jIDsKICBjMS5nY19oZWFwICAgICAg PC0gbWF4IGMxLmdjX2hlYXAgYzIuZ2NfaGVhcCA7CiAgYzEuZ2NfY29sbGVjX21pIDwtIGMxLmdj X2NvbGxlY19taSArIGMyLmdjX2NvbGxlY19taSA7CiAgYzEuZ2NfY29sbGVjX21hIDwtIGMxLmdj X2NvbGxlY19tYSArIGMyLmdjX2NvbGxlY19tYSA7CiAgYzEuZ2NfY29sbGVjX2NvIDwtIGMxLmdj X2NvbGxlY19jbyArIGMyLmdjX2NvbGxlY19jbwoKCgoKCgpsZXQgc3RyaW5nX29mX3RpbWUgdCA9 CiAgaWYgdCA9IDAuICAgICAgICB0aGVuCiAgICAiMG1zIgogIGVsc2UgaWYgdCA8IDFlLTMgdGhl bgogICAgIjwxbXMiCiAgZWxzZSBpZiB0IDwgMS4gICB0aGVuCiAgICBQcmludGYuc3ByaW50ZiAi JS4zZnMiIHQKICBlbHNlIGxldCBtID0gZmxvb3IgKHQgLy4gNjAuKSBpbgogIGlmIG0gPCAxLiAg ICAgICAgdGhlbiAKICAgIFByaW50Zi5zcHJpbnRmICIlLjJmcyIgdAogIGVsc2UgbGV0IHMgPSB0 IC0uIG0gKi4gNjAuIGluCiAgUHJpbnRmLnNwcmludGYgIiUuMGZtICUuMmZzIiBtIHMKCmxldCBz dHJpbmdfb2ZfbWVtIGIgPQogIGxldCBiID0gaW50X29mX2Zsb2F0IGIgaW4KICBsZXQgZywgYiA9 IAogICAgbGV0IHYgPSBiIC8gKDEgbHNsIDMwKSBpbgogICAgaWYgdiA+IDAgCiAgICB0aGVuIHN0 cmluZ19vZl9pbnQgdiBeICJHICIsIGIgLSB2ICogKDEgbHNsIDMwKQogICAgZWxzZSAiIiwgYiBp bgogIGxldCBtLCBiID0KICAgIGxldCB2ID0gYiAvICgxIGxzbCAyMCkgaW4KICAgIGlmIHYgPiAw IAogICAgdGhlbiBnIF4gc3RyaW5nX29mX2ludCB2IF4gIk0gIiwgYiAtIHYgKiAoMSBsc2wgMjAp CiAgICBlbHNlIGcsIGIgaW4KICBsZXQgaywgYiA9CiAgICBsZXQgdiA9IGIgLyAoMSBsc2wgMTAp IGluCiAgICBpZiB2ID4gMCAKICAgIHRoZW4gbSBeIHN0cmluZ19vZl9pbnQgdiBeICJLICIsIGIg LSB2ICogKDEgbHNsIDEwKQogICAgZWxzZSBtLCBiIGluCiAgbGV0IGIgPSAKICAgIGlmIGIgPiAw CiAgICB0aGVuIGsgXiBzdHJpbmdfb2ZfaW50IGIgCiAgICBlbHNlIGsgaW4KICBiCgpsZXQgc3Ry aW5nX29mX21lbXcgdyA9CiAgc3RyaW5nX29mX21lbSAoZmxvYXRfb2ZfaW50IHcgKi4gYnB3KQoK bGV0IHN0cmluZ19vZl9jb2xsIGMgPQogIGxldCBtaSA9IGMuZ2NfY29sbGVjX21pCiAgYW5kIG1h ID0gYy5nY19jb2xsZWNfbWEKICBhbmQgY28gPSBjLmdjX2NvbGxlY19jbyBpbgogIGxldCBtaSA9 IGlmIG1pID4gMCB0aGVuIHN0cmluZ19vZl9pbnQgbWkgXiAibSAiIGVsc2UgIiIgaW4KICBsZXQg bWEgPSBpZiBtYSA+IDAgdGhlbiBzdHJpbmdfb2ZfaW50IG1hIF4gIk0gIiBlbHNlICIiIGluCiAg bGV0IGNvID0gaWYgY28gPiAwIHRoZW4gc3RyaW5nX29mX2ludCBjbyBeICJDIiAgZWxzZSAiIiBp bgogIG1pIF4gbWEgXiBjbwoKCmxldCBwcF9jaHJvbm8gbXNnIGMgPQogIGxldCB0cCAgPSBjLnRp Y2sgLS4gYy5nY190aWNrIAogIGFuZCB0ZyAgPSBjLmdjX3RpY2sKICBhbmQgbWVtID0gYy5nY19h bGxvYyBpbgogIFByaW50Zi5zcHJpbnRmCiAgICAiJS0xNXM6ICU4cyAoR0MgJS05cywgYWxsb2Mg JS0yMHMsIGhlYXAgJS0xNXMsIGNvbGxlYyAlcykiCiAgICBtc2cKICAgIChzdHJpbmdfb2ZfdGlt ZSB0cCkgKHN0cmluZ19vZl90aW1lIHRnKQogICAgKHN0cmluZ19vZl9tZW0gbWVtKSAoc3RyaW5n X29mX21lbXcgYy5nY19oZWFwKQogICAgKHN0cmluZ19vZl9jb2xsIGMpCgpsZXQgcHBfdGltZSBt c2cgYyA9CiAgaWYgZG9fdGltaW5nIAogIHRoZW4gcHJlcnJfZW5kbGluZSAocHBfY2hyb25vIG1z ZyBjKQoKCgpsZXQgbWFpbiA9IAogIG1ha2VfY2hyb25vICgpCgpsZXQgc3RhcnQgKCkgPSAKICBj aHJvbm9fc3RhcnQgbWFpbgoKbGV0IHN0b3AgbXNnID0KICBjaHJvbm9fc3RvcCBtYWluIDsKICBw cF90aW1lIG1zZyBtYWluCgoKbGV0IF8gPSAKICBzZXRfZ2NfdGltaW5nIGRvX3RpbWluZyA7CiAg aWYgZG9fdGltaW5nCiAgdGhlbgogICAgYXRfZXhpdCAoZnVuICgpIC0+CiAgICAgIGxldCBzID0g R2MucXVpY2tfc3RhdCAoKSBpbgogICAgICBwcmVycl9lbmRsaW5lCiAgICAgICAgKCJ0b3BfaGVh cF93b3JkcyA9ICIgXiBzdHJpbmdfb2ZfbWVtdyBzLkdjLnRvcF9oZWFwX3dvcmRzKSkK --00032555772e2195560480e1905a Content-Type: text/x-ocaml; charset=US-ASCII; name="ocaml-timing.mli" Content-Disposition: attachment; filename="ocaml-timing.mli" Content-Transfer-Encoding: base64 X-Attachment-Id: f_g6bvqhyv2 dHlwZSBjaHJvbm8KdmFsIG1ha2VfY2hyb25vICA6IHVuaXQgLT4gY2hyb25vCnZhbCBjaHJvbm9f c3RhcnQgOiBjaHJvbm8gLT4gdW5pdAp2YWwgY2hyb25vX3N0b3AgIDogY2hyb25vIC0+IHVuaXQK dmFsIGNocm9ub19hY2N1bSA6IGNocm9ubyAtPiBjaHJvbm8gLT4gdW5pdAp2YWwgcHBfY2hyb25v ICAgIDogc3RyaW5nIC0+IGNocm9ubyAtPiBzdHJpbmcKCnZhbCBzdGFydCA6IHVuaXQgLT4gdW5p dAp2YWwgc3RvcCAgOiBzdHJpbmcgLT4gdW5pdAo= --00032555772e2195560480e1905a--