From: "Aleix Conchillo Flaqué" <aconchillo@gmail.com>
To: "Ludovic Courtès" <ludo@gnu.org>
Cc: guile-user <guile-user@gnu.org>, guile-devel <guile-devel@gnu.org>
Subject: Re: Guile's time execution issues
Date: Sun, 26 Apr 2020 16:14:32 -0700 [thread overview]
Message-ID: <CA+XASoUwckB7vFU4DoTaEURaZOuawySfbwrC4wJoxnf3BXyXcg@mail.gmail.com> (raw)
In-Reply-To: <87d07u182a.fsf@gnu.org>
On Sun, Apr 26, 2020 at 10:16 AM Ludovic Courtès <ludo@gnu.org> wrote:
> Bon dia!
>
>
Bon dia! And bon jour! :-D
> Aleix Conchillo Flaqué <aconchillo@gmail.com> skribis:
>
> > I was trying to get some guile-json performance times loading large JSON
> > file. However, I'm getting increasing numbers at each run, so I'm
> wondering
> > if I'm doing something wrong. Below you can see how the first run took
> > 19.95s and then running the same command kept increasing.
> >
> > I'm running Guile 2.2.7 on macOS Catalina 10.15.3.
> >
> > scheme@(guile-user)> (use-modules (json))
> > scheme@(guile-user)> ,t (define a (call-with-input-file
> > "/Users/aleix/Downloads/large-file.json" (lambda (port) (json->scm
> port))))
> > ;; 19.956429s real time, 87.100982s run time. 75.270202s spent in GC.
> > ;; 26.173179s real time, 143.645265s run time. 131.022631s spent in GC.
> > ;; 28.193926s real time, 154.758375s run time. 141.697236s spent in GC.
> > ;; 29.044218s real time, 160.745984s run time. 147.449073s spent in GC.
> > ;; 30.480873s real time, 170.855527s run time. 157.332793s spent in GC.
> > ;; 30.555700s real time, 172.938278s run time. 159.468737s spent in GC.
> > ;; 32.190478s real time, 172.807551s run time. 158.905645s spent in GC.
>
> Could this have to do with <https://issues.guix.gnu.org/issue/40194>?
>
>
Honestly, I have no idea... :-(
Could you check if that happens with 3.0.2? (Or suggest a
> ‘large-file.json’ to use. :-))
>
>
Sure! I suggested a JSON, it was hidden at the end of my first message ;-).
This is the one:
https://github.com/json-iterator/test-data/blob/master/large-file.json
So, bad and good news for Guile 3.0.2. I'm trying it inside Docker using
this image https://hub.docker.com/r/schemers/guile.
On guile-json 3.5.0 (still using (string-append)) the first execution time
goes from 19 seconds to 42 seconds. Then, the times keep increasing as in
version 2.2.7 but numbers are much bigger:
# ./env guile
GNU Guile 3.0.2
Copyright (C) 1995-2020 Free Software Foundation, Inc.
Guile comes with ABSOLUTELY NO WARRANTY; for details type `,show w'.
This program is free software, and you are welcome to redistribute it
under certain conditions; type `,show c' for details.
Enter `,help' for help.
scheme@(guile-user)> (use-modules (json))
scheme@(guile-user)> ,t (define a (call-with-input-file "large-file.json"
(lambda (port) (json->scm port))))
;; 42.015887s real time, 42.059462s run time. 32.838460s spent in GC.
scheme@(guile-user)> ,t (define a (call-with-input-file "large-file.json"
(lambda (port) (json->scm port))))
;; 56.228837s real time, 56.176989s run time. 46.112349s spent in GC.
scheme@(guile-user)> ,t (define a (call-with-input-file "large-file.json"
(lambda (port) (json->scm port))))
;; 63.472869s real time, 63.383118s run time. 52.642226s spent in GC.
The good news is that on master branch I don't use (string-append) anymore
and it goes from 19 seconds (in 2.2.7) to ~6 seconds (both in 2.2.7 and
3.0.2).
❯ ./env guile
GNU Guile 2.2.7
Copyright (C) 1995-2019 Free Software Foundation, Inc.
Guile comes with ABSOLUTELY NO WARRANTY; for details type `,show w'.
This program is free software, and you are welcome to redistribute it
under certain conditions; type `,show c' for details.
Enter `,help' for help.
scheme@(guile-user)> (use-modules (json))
scheme@(guile-user)> ,t (define a (call-with-input-file "large-file.json"
(lambda (port) (json->scm port))))
;; 6.635275s real time, 11.126605s run time. 5.119203s spent in GC.
scheme@(guile-user)> ,t (define a (call-with-input-file "large-file.json"
(lambda (port) (json->scm port))))
;; 6.856995s real time, 12.605237s run time. 6.476064s spent in GC.
scheme@(guile-user)> ,t (define a (call-with-input-file "large-file.json"
(lambda (port) (json->scm port))))
;; 6.556502s real time, 10.542702s run time. 4.550531s spent in GC.
scheme@(guile-user)> ,t (define a (call-with-input-file "large-file.json"
(lambda (port) (json->scm port))))
;; 6.396581s real time, 9.638931s run time. 3.707881s spent in GC.
scheme@(guile-user)> ,t (define a (call-with-input-file "large-file.json"
(lambda (port) (json->scm port))))
;; 6.293497s real time, 8.944718s run time. 3.055733s spent in GC.
scheme@(guile-user)> ,t (define a (call-with-input-file "large-file.json"
(lambda (port) (json->scm port))))
;; 6.249073s real time, 8.938264s run time. 3.099037s spent in GC.
scheme@(guile-user)> ,t (define a (call-with-input-file "large-file.json"
(lambda (port) (json->scm port))))
;; 6.168000s real time, 8.557252s run time. 2.772902s spent in GC.
scheme@(guile-user)> ,t (define a (call-with-input-file "large-file.json"
(lambda (port) (json->scm port))))
;; 6.206124s real time, 7.920464s run time. 2.022655s spent in GC.
scheme@(guile-user)> ,t (define a (call-with-input-file "large-file.json"
(lambda (port) (json->scm port))))
;; 6.404214s real time, 8.412361s run time. 2.402077s spent in GC.
And actually Guile 3.0.2 seems a bit slower at the beginning but then for
some reason times go down until they seem to stabilize (I have tried it a
couple of times and it does the same) and then it seems a bit faster than
2.2.7:
# ./env guile
GNU Guile 3.0.2
Copyright (C) 1995-2020 Free Software Foundation, Inc.
Guile comes with ABSOLUTELY NO WARRANTY; for details type `,show w'.
This program is free software, and you are welcome to redistribute it
under certain conditions; type `,show c' for details.
Enter `,help' for help.
scheme@(guile-user)> (use-modules (json))
scheme@(guile-user)> ,t (define a (call-with-input-file "large-file.json"
(lambda (port) (json->scm port))))
;; 6.961477s real time, 6.973492s run time. 2.294030s spent in GC.
scheme@(guile-user)> ,t (define a (call-with-input-file "large-file.json"
(lambda (port) (json->scm port))))
;; 7.450862s real time, 7.422345s run time. 2.718710s spent in GC.
scheme@(guile-user)> ,t (define a (call-with-input-file "large-file.json"
(lambda (port) (json->scm port))))
;; 6.438989s real time, 6.399829s run time. 1.896063s spent in GC.
scheme@(guile-user)> ,t (define a (call-with-input-file "large-file.json"
(lambda (port) (json->scm port))))
;; 6.097962s real time, 6.070055s run time. 1.540690s spent in GC.
scheme@(guile-user)> ,t (define a (call-with-input-file "large-file.json"
(lambda (port) (json->scm port))))
;; 5.650008s real time, 5.668240s run time. 1.272017s spent in GC.
scheme@(guile-user)> ,t (define a (call-with-input-file "large-file.json"
(lambda (port) (json->scm port))))
;; 5.754515s real time, 5.748386s run time. 1.275179s spent in GC.
scheme@(guile-user)> ,t (define a (call-with-input-file "large-file.json"
(lambda (port) (json->scm port))))
;; 5.760096s real time, 5.755418s run time. 1.310558s spent in GC.
scheme@(guile-user)> ,t (define a (call-with-input-file "large-file.json"
(lambda (port) (json->scm port))))
;; 5.745274s real time, 5.739386s run time. 1.356917s spent in GC.
Let me know if you want me to test anything else.
> Thanks in advance!
>
>
Thank you!
Aleix
next prev parent reply other threads:[~2020-04-26 23:14 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-04-21 22:03 Guile's time execution issues Aleix Conchillo Flaqué
2020-04-22 13:47 ` Linus Björnstam
2020-04-26 17:16 ` Ludovic Courtès
2020-04-26 23:14 ` Aleix Conchillo Flaqué [this message]
2020-05-02 14:11 ` Ludovic Courtès
2020-05-04 0:32 ` Aleix Conchillo Flaqué
2020-05-04 9:36 ` Ludovic Courtès
2020-05-04 11:19 ` Linus Björnstam
2020-05-04 20:09 ` Ludovic Courtès
2020-05-04 20:50 ` Linus Björnstam
2020-05-08 11:31 ` Linus Björnstam
2020-05-04 18:47 ` Linus Björnstam
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.gnu.org/software/guile/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=CA+XASoUwckB7vFU4DoTaEURaZOuawySfbwrC4wJoxnf3BXyXcg@mail.gmail.com \
--to=aconchillo@gmail.com \
--cc=guile-devel@gnu.org \
--cc=guile-user@gnu.org \
--cc=ludo@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).