* bug#41194: 28.0.50; [feature/native-comp] fibn benchmark exhausts memory
@ 2020-05-11 20:47 Kévin Le Gouguec
2020-06-09 22:24 ` Andrea Corallo
0 siblings, 1 reply; 9+ messages in thread
From: Kévin Le Gouguec @ 2020-05-11 20:47 UTC (permalink / raw)
To: 41194
[-- Attachment #1: Type: text/plain, Size: 663 bytes --]
As detailed in bug#41077, I compiled the feature/native-comp branch[1]
on a low-end-ish laptop[2], blacklisting char-fold.el since native
compilation took too much memory for this file.
As reported there, I get appreciable speedups on the benchmarks
distributed in the elisp-benchmarks ELPA package, except for one
specific test: fibn. When native-compiled (with any value of
comp-speed), this test makes Emacs abort with the message:
> Memory exhausted--use C-x s then exit and restart Emacs
I've plotted some graphs showing fibn's memory consumption for every
value of comp-speed, as well as for emacs master[3] (where all 3
iterations run to completion):
[-- Attachment #2: fibn.pdf --]
[-- Type: application/pdf, Size: 81262 bytes --]
[-- Attachment #3: Type: text/plain, Size: 716 bytes --]
See [4] for the methodology, source material and logs. Out of curiosity
I've disassembled the compiled functions in fibn.el for comp-speed 2;
I'm not fluent enough in assembly to spot anything obviously wrong[5].
Let me know if there are things you would like me to try out in order to
investigate this.
[1] Commit 92cf4bb8cc3da81f4877a734b9e9089ac4b89e85.
[2] Samsung NC10, 2GB RAM, 2GB HDD swap, on Debian Buster.
[3] Commit 9d8fc3a598090da518fcdd5c0503ed0f7faa41a9.
[4] .eln files compiled with:
(dotimes (i 4) (rename-file (let ((comp-speed i)) (native-compile "fibn.el"))
(format "fibn-%d.eln" i)))
Script used to collect measurements on branch native-comp:
[-- Attachment #4: repro.sh --]
[-- Type: application/x-shellscript, Size: 690 bytes --]
[-- Attachment #5: Type: text/plain, Size: 59 bytes --]
Script used to collect measurements on branch master:
[-- Attachment #6: master.sh --]
[-- Type: application/x-shellscript, Size: 469 bytes --]
[-- Attachment #7: Type: text/plain, Size: 37 bytes --]
Script used to plot the graphs:
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #8: plot.py --]
[-- Type: text/x-python, Size: 2291 bytes --]
#!/usr/bin/env python3
from datetime import datetime, timedelta
from pathlib import Path
import re
import matplotlib
from matplotlib import pyplot
from matplotlib.ticker import EngFormatter
MONITOR_RE = re.compile('\n'.join((
'(?P<time>.+)',
r' *(?P<seconds>\d+) +(?P<vsz>\d+) +(?P<rss>\d+) +(?P<args>.+)',
' *(?P<memheader>.+)',
'Mem: *(?P<memvalues>.+)',
'Swap: *(?P<swapvalues>.+)',
''
)), flags=re.MULTILINE)
def list_snapshots(monitor_log):
snapshots = []
for match in MONITOR_RE.finditer(monitor_log):
md = match.groupdict()
memkeys = md['memheader'].split()
memvalues = md['memvalues'].split()
swapvalues = md['swapvalues'].split()
snapshot = {
'time': datetime.strptime(md['time'], '%Y-%m-%d-%H:%M:%S'),
'uptime': int(md['seconds']),
'vsz': int(md['vsz'])*1024,
'rss': int(md['rss'])*1024,
'process': md['args'],
'mem': {memkeys[i]: int(val)*1024 for i, val in enumerate(memvalues)},
'swap': {memkeys[i]: int(val)*1024 for i, val in enumerate(swapvalues)}
}
snapshots.append(snapshot)
return snapshots
def graph_logs(f, title):
snapshots = list_snapshots(Path(f).read_text())
x0 = snapshots[0]['time']
xs = tuple((s['time']-x0).seconds for s in snapshots)
vsz = tuple(s['vsz'] for s in snapshots)
rss = tuple(s['rss'] for s in snapshots)
memavail = tuple(s['mem']['available'] for s in snapshots)
swapused = tuple(s['swap']['used'] for s in snapshots)
fig, axes = pyplot.subplots()
axes.plot(xs, vsz, label='VSZ (process)')
axes.plot(xs, rss, label='RSS (process)')
axes.plot(xs, memavail, label='available memory (system)', linewidth=0.5)
axes.plot(xs, swapused, label='used swap (system)')
axes.set_xlim(0, (snapshots[-1]['time']-x0).seconds)
axes.set_xlabel('seconds')
axes.set_ylim(0)
axes.yaxis.set_major_formatter(EngFormatter(unit='B'))
axes.legend()
axes.set_title(title)
pyplot.savefig(f.replace('.log', '.pdf'))
pyplot.show()
matplotlib.use('TkAgg')
for i in range(4):
graph_logs(f'fibn-{i}.log', f'fibn test with comp-speed {i}')
graph_logs('fibn-master.log', 'fibn test with emacs master')
[-- Attachment #9: Type: text/plain, Size: 19 bytes --]
Measurements:
[-- Attachment #10: measurements.tgz --]
[-- Type: application/x-compressed-tar, Size: 18291 bytes --]
[-- Attachment #11: Type: text/plain, Size: 27 bytes --]
Logs for native-comp:
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #12: repro.log --]
[-- Type: text/x-log, Size: 5050 bytes --]
+ elisp_benchmarks=/home/peniblec/.emacs.d/elpa/elisp-benchmarks-1.1/elisp-benchmarks.el
+ gccemacs=/home/peniblec/Downloads/sources/emacs-meta/feature/native-comp/src/emacs
+ for i in {0..3}
+ sudo swapoff -a
+ sudo swapon -a
++ dirname /home/peniblec/.emacs.d/elpa/elisp-benchmarks-1.1/elisp-benchmarks.el
+ cd /home/peniblec/.emacs.d/elpa/elisp-benchmarks-1.1/benchmarks
+ ln -sf fibn-0.eln fibn.eln
+ out=fibn-0.log
+ set +x
+ /home/peniblec/Downloads/sources/emacs-meta/feature/native-comp/src/emacs -Q -batch -l /home/peniblec/.emacs.d/elpa/elisp-benchmarks-1.1/elisp-benchmarks.el -eval '(elisp-benchmarks-run "fibn\\.")'
Loading /home/peniblec/.emacs.d/elpa/elisp-benchmarks-1.1/benchmarks/bubble-no-cons...
Loading /home/peniblec/.emacs.d/elpa/elisp-benchmarks-1.1/benchmarks/bubble...
Loading /home/peniblec/.emacs.d/elpa/elisp-benchmarks-1.1/benchmarks/fibn-rec...
Loading /home/peniblec/.emacs.d/elpa/elisp-benchmarks-1.1/benchmarks/fibn-tc...
Loading /home/peniblec/.emacs.d/elpa/elisp-benchmarks-1.1/benchmarks/fibn (native compiled elisp)...
Loading /home/peniblec/.emacs.d/elpa/elisp-benchmarks-1.1/benchmarks/inclist...
Loading /home/peniblec/.emacs.d/elpa/elisp-benchmarks-1.1/benchmarks/listlen-tc...
Loading /home/peniblec/.emacs.d/elpa/elisp-benchmarks-1.1/benchmarks/pidigits...
Iteration number: 1
Running fibn...
Memory exhausted--use C-x s then exit and restart Emacs
+ for i in {0..3}
+ sudo swapoff -a
+ sudo swapon -a
++ dirname /home/peniblec/.emacs.d/elpa/elisp-benchmarks-1.1/elisp-benchmarks.el
+ cd /home/peniblec/.emacs.d/elpa/elisp-benchmarks-1.1/benchmarks
+ ln -sf fibn-1.eln fibn.eln
+ out=fibn-1.log
+ set +x
+ /home/peniblec/Downloads/sources/emacs-meta/feature/native-comp/src/emacs -Q -batch -l /home/peniblec/.emacs.d/elpa/elisp-benchmarks-1.1/elisp-benchmarks.el -eval '(elisp-benchmarks-run "fibn\\.")'
Loading /home/peniblec/.emacs.d/elpa/elisp-benchmarks-1.1/benchmarks/bubble-no-cons...
Loading /home/peniblec/.emacs.d/elpa/elisp-benchmarks-1.1/benchmarks/bubble...
Loading /home/peniblec/.emacs.d/elpa/elisp-benchmarks-1.1/benchmarks/fibn-rec...
Loading /home/peniblec/.emacs.d/elpa/elisp-benchmarks-1.1/benchmarks/fibn-tc...
Loading /home/peniblec/.emacs.d/elpa/elisp-benchmarks-1.1/benchmarks/fibn (native compiled elisp)...
Loading /home/peniblec/.emacs.d/elpa/elisp-benchmarks-1.1/benchmarks/inclist...
Loading /home/peniblec/.emacs.d/elpa/elisp-benchmarks-1.1/benchmarks/listlen-tc...
Loading /home/peniblec/.emacs.d/elpa/elisp-benchmarks-1.1/benchmarks/pidigits...
Iteration number: 1
Running fibn...
Memory exhausted--use C-x s then exit and restart Emacs
+ for i in {0..3}
+ sudo swapoff -a
+ sudo swapon -a
++ dirname /home/peniblec/.emacs.d/elpa/elisp-benchmarks-1.1/elisp-benchmarks.el
+ cd /home/peniblec/.emacs.d/elpa/elisp-benchmarks-1.1/benchmarks
+ ln -sf fibn-2.eln fibn.eln
+ out=fibn-2.log
+ set +x
+ /home/peniblec/Downloads/sources/emacs-meta/feature/native-comp/src/emacs -Q -batch -l /home/peniblec/.emacs.d/elpa/elisp-benchmarks-1.1/elisp-benchmarks.el -eval '(elisp-benchmarks-run "fibn\\.")'
Loading /home/peniblec/.emacs.d/elpa/elisp-benchmarks-1.1/benchmarks/bubble-no-cons...
Loading /home/peniblec/.emacs.d/elpa/elisp-benchmarks-1.1/benchmarks/bubble...
Loading /home/peniblec/.emacs.d/elpa/elisp-benchmarks-1.1/benchmarks/fibn-rec...
Loading /home/peniblec/.emacs.d/elpa/elisp-benchmarks-1.1/benchmarks/fibn-tc...
Loading /home/peniblec/.emacs.d/elpa/elisp-benchmarks-1.1/benchmarks/fibn (native compiled elisp)...
Loading /home/peniblec/.emacs.d/elpa/elisp-benchmarks-1.1/benchmarks/inclist...
Loading /home/peniblec/.emacs.d/elpa/elisp-benchmarks-1.1/benchmarks/listlen-tc...
Loading /home/peniblec/.emacs.d/elpa/elisp-benchmarks-1.1/benchmarks/pidigits...
Iteration number: 1
Running fibn...
Memory exhausted--use C-x s then exit and restart Emacs
+ for i in {0..3}
+ sudo swapoff -a
+ sudo swapon -a
++ dirname /home/peniblec/.emacs.d/elpa/elisp-benchmarks-1.1/elisp-benchmarks.el
+ cd /home/peniblec/.emacs.d/elpa/elisp-benchmarks-1.1/benchmarks
+ ln -sf fibn-3.eln fibn.eln
+ out=fibn-3.log
+ set +x
+ /home/peniblec/Downloads/sources/emacs-meta/feature/native-comp/src/emacs -Q -batch -l /home/peniblec/.emacs.d/elpa/elisp-benchmarks-1.1/elisp-benchmarks.el -eval '(elisp-benchmarks-run "fibn\\.")'
Loading /home/peniblec/.emacs.d/elpa/elisp-benchmarks-1.1/benchmarks/bubble-no-cons...
Loading /home/peniblec/.emacs.d/elpa/elisp-benchmarks-1.1/benchmarks/bubble...
Loading /home/peniblec/.emacs.d/elpa/elisp-benchmarks-1.1/benchmarks/fibn-rec...
Loading /home/peniblec/.emacs.d/elpa/elisp-benchmarks-1.1/benchmarks/fibn-tc...
Loading /home/peniblec/.emacs.d/elpa/elisp-benchmarks-1.1/benchmarks/fibn (native compiled elisp)...
Loading /home/peniblec/.emacs.d/elpa/elisp-benchmarks-1.1/benchmarks/inclist...
Loading /home/peniblec/.emacs.d/elpa/elisp-benchmarks-1.1/benchmarks/listlen-tc...
Loading /home/peniblec/.emacs.d/elpa/elisp-benchmarks-1.1/benchmarks/pidigits...
Iteration number: 1
Running fibn...
Memory exhausted--use C-x s then exit and restart Emacs
[-- Attachment #13: Type: text/plain, Size: 22 bytes --]
Logs for master:
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #14: master.log --]
[-- Type: text/x-log, Size: 1575 bytes --]
+ elisp_benchmarks=/home/peniblec/.emacs.d/elpa/elisp-benchmarks-1.1/elisp-benchmarks.el
+ emacs=/home/peniblec/Downloads/sources/emacs/src/emacs
+ sudo swapoff -a
+ sudo swapon -a
+ out=fibn-master.log
+ set +x
+ /home/peniblec/Downloads/sources/emacs/src/emacs -Q -batch -l /home/peniblec/.emacs.d/elpa/elisp-benchmarks-1.1/elisp-benchmarks.el -eval '(elisp-benchmarks-run "fibn\\.")'
Loading /home/peniblec/.emacs.d/elpa/elisp-benchmarks-1.1/benchmarks/bubble-no-cons...
Loading /home/peniblec/.emacs.d/elpa/elisp-benchmarks-1.1/benchmarks/bubble...
Loading /home/peniblec/.emacs.d/elpa/elisp-benchmarks-1.1/benchmarks/fibn-rec...
Loading /home/peniblec/.emacs.d/elpa/elisp-benchmarks-1.1/benchmarks/fibn-tc...
Loading /home/peniblec/.emacs.d/elpa/elisp-benchmarks-1.1/benchmarks/fibn...
Loading /home/peniblec/.emacs.d/elpa/elisp-benchmarks-1.1/benchmarks/inclist...
Loading /home/peniblec/.emacs.d/elpa/elisp-benchmarks-1.1/benchmarks/listlen-tc...
Loading /home/peniblec/.emacs.d/elpa/elisp-benchmarks-1.1/benchmarks/pidigits...
Iteration number: 1
Running fibn...
Iteration number: 2
Running fibn...
Iteration number: 3
Running fibn...
* Results
| test | non-gc avg (s) | gc avg (s) | gcs avg | tot avg (s) | tot avg err (s) |
|-------+----------------+------------+---------+-------------+-----------------|
| fibn | 283.13 | 247.25 | 4425 | 530.37 | 3.03 |
|-------+----------------+------------+---------+-------------+-----------------|
| total | 283.13 | 247.25 | 4425 | 530.37 | 3.03 |
[-- Attachment #15: Type: text/plain, Size: 5 bytes --]
[5]
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #16: elb-fibn.s --]
[-- Type: text/x-asm, Size: 4813 bytes --]
000015e0 <F656c622d6669626e_elb_fibn_0>:
15e0: e8 f7 01 00 00 call 17dc <__x86.get_pc_thunk.ax>
15e5: 05 1b 2a 00 00 add $0x2a1b,%eax
15ea: 55 push %ebp
15eb: 57 push %edi
15ec: 56 push %esi
15ed: 53 push %ebx
15ee: 83 ec 4c sub $0x4c,%esp
15f1: 8b 88 f4 ff ff ff mov -0xc(%eax),%ecx
15f7: 8b a8 f8 ff ff ff mov -0x8(%eax),%ebp
15fd: 8d 44 24 20 lea 0x20(%esp),%eax
1601: 89 4c 24 1c mov %ecx,0x1c(%esp)
1605: 8b 09 mov (%ecx),%ecx
1607: 89 44 24 18 mov %eax,0x18(%esp)
160b: 8d 44 24 38 lea 0x38(%esp),%eax
160f: 89 4c 24 04 mov %ecx,0x4(%esp)
1613: 89 4c 24 14 mov %ecx,0x14(%esp)
1617: 89 44 24 10 mov %eax,0x10(%esp)
161b: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi
161f: 90 nop
1620: 8b 44 24 14 mov 0x14(%esp),%eax
1624: 83 ec 08 sub $0x8,%esp
1627: 89 44 24 28 mov %eax,0x28(%esp)
162b: 8b 44 24 68 mov 0x68(%esp),%eax
162f: 89 44 24 2c mov %eax,0x2c(%esp)
1633: 8b 45 00 mov 0x0(%ebp),%eax
1636: ff 74 24 20 pushl 0x20(%esp)
163a: 6a 02 push $0x2
163c: ff 90 90 12 00 00 call *0x1290(%eax)
1642: 83 c4 10 add $0x10,%esp
1645: 85 c0 test %eax,%eax
1647: 0f 84 b3 00 00 00 je 1700 <F656c622d6669626e_elb_fibn_0+0x120>
164d: 8b 7c 24 1c mov 0x1c(%esp),%edi
1651: 8b 44 24 64 mov 0x64(%esp),%eax
1655: 83 ec 08 sub $0x8,%esp
1658: 89 44 24 30 mov %eax,0x30(%esp)
165c: 8b 47 0c mov 0xc(%edi),%eax
165f: 8b 77 08 mov 0x8(%edi),%esi
1662: 89 44 24 34 mov %eax,0x34(%esp)
1666: 8d 54 24 30 lea 0x30(%esp),%edx
166a: 8b 45 00 mov 0x0(%ebp),%eax
166d: 52 push %edx
166e: 6a 02 push $0x2
1670: ff 90 78 12 00 00 call *0x1278(%eax)
1676: 8b 1f mov (%edi),%ebx
1678: bf 06 00 00 00 mov $0x6,%edi
167d: 89 44 24 18 mov %eax,0x18(%esp)
1681: 83 c4 10 add $0x10,%esp
1684: 8d 44 24 30 lea 0x30(%esp),%eax
1688: 89 44 24 0c mov %eax,0xc(%esp)
168c: eb 32 jmp 16c0 <F656c622d6669626e_elb_fibn_0+0xe0>
168e: 66 90 xchg %ax,%ax
1690: 89 7c 24 3c mov %edi,0x3c(%esp)
1694: 83 ec 08 sub $0x8,%esp
1697: 8b 45 00 mov 0x0(%ebp),%eax
169a: 89 f7 mov %esi,%edi
169c: 89 74 24 40 mov %esi,0x40(%esp)
16a0: ff 74 24 18 pushl 0x18(%esp)
16a4: 6a 02 push $0x2
16a6: ff 90 7c 12 00 00 call *0x127c(%eax)
16ac: 89 44 24 14 mov %eax,0x14(%esp)
16b0: 89 d8 mov %ebx,%eax
16b2: e8 89 fa ff ff call 1140 <add1.constprop.0>
16b7: 8b 74 24 14 mov 0x14(%esp),%esi
16bb: 83 c4 10 add $0x10,%esp
16be: 89 c3 mov %eax,%ebx
16c0: 8b 44 24 08 mov 0x8(%esp),%eax
16c4: 89 5c 24 30 mov %ebx,0x30(%esp)
16c8: 83 ec 08 sub $0x8,%esp
16cb: 89 44 24 3c mov %eax,0x3c(%esp)
16cf: 8b 45 00 mov 0x0(%ebp),%eax
16d2: ff 74 24 14 pushl 0x14(%esp)
16d6: 6a 02 push $0x2
16d8: ff 90 90 12 00 00 call *0x1290(%eax)
16de: 83 c4 10 add $0x10,%esp
16e1: 85 c0 test %eax,%eax
16e3: 75 ab jne 1690 <F656c622d6669626e_elb_fibn_0+0xb0>
16e5: 8b 44 24 14 mov 0x14(%esp),%eax
16e9: e8 52 fa ff ff call 1140 <add1.constprop.0>
16ee: 89 44 24 14 mov %eax,0x14(%esp)
16f2: e9 29 ff ff ff jmp 1620 <F656c622d6669626e_elb_fibn_0+0x40>
16f7: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi
16fe: 66 90 xchg %ax,%ax
1700: 8b 44 24 04 mov 0x4(%esp),%eax
1704: 83 c4 4c add $0x4c,%esp
1707: 5b pop %ebx
1708: 5e pop %esi
1709: 5f pop %edi
170a: 5d pop %ebp
170b: c3 ret
170c: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #17: elb-fibn-entry.s --]
[-- Type: text/x-asm, Size: 1126 bytes --]
00001710 <F656c622d6669626e2d656e747279_elb_fibn_entry_0>:
1710: e8 20 fa ff ff call 1135 <__x86.get_pc_thunk.dx>
1715: 81 c2 eb 28 00 00 add $0x28eb,%edx
171b: 83 ec 24 sub $0x24,%esp
171e: 8b 82 f4 ff ff ff mov -0xc(%edx),%eax
1724: 8b 48 10 mov 0x10(%eax),%ecx
1727: 89 4c 24 0c mov %ecx,0xc(%esp)
172b: 8b 48 14 mov 0x14(%eax),%ecx
172e: 8b 40 18 mov 0x18(%eax),%eax
1731: 89 4c 24 10 mov %ecx,0x10(%esp)
1735: 89 44 24 14 mov %eax,0x14(%esp)
1739: 8b 82 f8 ff ff ff mov -0x8(%edx),%eax
173f: 8d 54 24 0c lea 0xc(%esp),%edx
1743: 8b 00 mov (%eax),%eax
1745: 52 push %edx
1746: 6a 03 push $0x3
1748: ff 90 40 0d 00 00 call *0xd40(%eax)
174e: 83 c4 2c add $0x2c,%esp
1751: c3 ret
1752: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi
1759: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi
^ permalink raw reply [flat|nested] 9+ messages in thread
* bug#41194: 28.0.50; [feature/native-comp] fibn benchmark exhausts memory
2020-05-11 20:47 bug#41194: 28.0.50; [feature/native-comp] fibn benchmark exhausts memory Kévin Le Gouguec
@ 2020-06-09 22:24 ` Andrea Corallo
2020-06-10 7:55 ` Kévin Le Gouguec
0 siblings, 1 reply; 9+ messages in thread
From: Andrea Corallo @ 2020-06-09 22:24 UTC (permalink / raw)
To: Kévin Le Gouguec; +Cc: 41194
Kévin Le Gouguec <kevin.legouguec@gmail.com> writes:
> As detailed in bug#41077, I compiled the feature/native-comp branch[1]
> on a low-end-ish laptop[2], blacklisting char-fold.el since native
> compilation took too much memory for this file.
>
> As reported there, I get appreciable speedups on the benchmarks
> distributed in the elisp-benchmarks ELPA package, except for one
> specific test: fibn. When native-compiled (with any value of
> comp-speed), this test makes Emacs abort with the message:
>
>> Memory exhausted--use C-x s then exit and restart Emacs
>
> I've plotted some graphs showing fibn's memory consumption for every
> value of comp-speed, as well as for emacs master[3] (where all 3
> iterations run to completion):
>
>
>
> See [4] for the methodology, source material and logs. Out of curiosity
> I've disassembled the compiled functions in fibn.el for comp-speed 2;
> I'm not fluent enough in assembly to spot anything obviously wrong[5].
>
>
> Let me know if there are things you would like me to try out in order to
> investigate this.
Hi Kevin,
sorry for the very late reply I just had a look.
The following is going on: being on 32bit system you get into bignums
end this allocates memory while is looping inside `elb-fibn'.
Unfortunatelly there's no opportunity of passing through maybe_gc to
trigger garbage collection because I've not implemented the equivalent
of what is the quitcounter in the byte interpreter.
I'll come-up with a patch to generate the equivalent code of the
quitcounter when compiling for speed < 3.
Thanks for the feedback
Andrea
PS FYI I think memory consumption during compilation (as compile time)
should be now considerably lowered (but I've still haven't measured it).
--
akrl@sdf.org
^ permalink raw reply [flat|nested] 9+ messages in thread
* bug#41194: 28.0.50; [feature/native-comp] fibn benchmark exhausts memory
2020-06-09 22:24 ` Andrea Corallo
@ 2020-06-10 7:55 ` Kévin Le Gouguec
2020-06-13 15:00 ` Andrea Corallo
0 siblings, 1 reply; 9+ messages in thread
From: Kévin Le Gouguec @ 2020-06-10 7:55 UTC (permalink / raw)
To: 41194
Andrea Corallo <akrl@sdf.org> writes:
> sorry for the very late reply I just had a look.
No need to apologize! You've obviously been busy on other fronts.
> The following is going on: being on 32bit system you get into bignums
> end this allocates memory while is looping inside `elb-fibn'.
> Unfortunatelly there's no opportunity of passing through maybe_gc to
> trigger garbage collection because I've not implemented the equivalent
> of what is the quitcounter in the byte interpreter.
>
> I'll come-up with a patch to generate the equivalent code of the
> quitcounter when compiling for speed < 3.
>
> Thanks for the feedback
>
> Andrea
>
> PS FYI I think memory consumption during compilation (as compile time)
> should be now considerably lowered (but I've still haven't measured it).
Alright! I'll keep an eye on your branch and on the bugtracker, and
recompile & run my measurements when I spot your patch.
^ permalink raw reply [flat|nested] 9+ messages in thread
* bug#41194: 28.0.50; [feature/native-comp] fibn benchmark exhausts memory
2020-06-10 7:55 ` Kévin Le Gouguec
@ 2020-06-13 15:00 ` Andrea Corallo
2020-06-13 18:17 ` Kévin Le Gouguec
2020-06-14 15:19 ` Kévin Le Gouguec
0 siblings, 2 replies; 9+ messages in thread
From: Andrea Corallo @ 2020-06-13 15:00 UTC (permalink / raw)
To: Kévin Le Gouguec; +Cc: 41194
Kévin Le Gouguec <kevin.legouguec@gmail.com> writes:
> Andrea Corallo <akrl@sdf.org> writes:
>
>> sorry for the very late reply I just had a look.
>
> No need to apologize! You've obviously been busy on other fronts.
>
>> The following is going on: being on 32bit system you get into bignums
>> end this allocates memory while is looping inside `elb-fibn'.
>> Unfortunatelly there's no opportunity of passing through maybe_gc to
>> trigger garbage collection because I've not implemented the equivalent
>> of what is the quitcounter in the byte interpreter.
>>
>> I'll come-up with a patch to generate the equivalent code of the
>> quitcounter when compiling for speed < 3.
>>
>> Thanks for the feedback
>>
>> Andrea
>>
>> PS FYI I think memory consumption during compilation (as compile time)
>> should be now considerably lowered (but I've still haven't measured it).
>
> Alright! I'll keep an eye on your branch and on the bugtracker, and
> recompile & run my measurements when I spot your patch.
Hi Kévin,
5a55a845a7 * Implement 'maybe_gc_or_quit' to allow correct GC in compiled Lisp
34ed9d2498 * Introduce latches
are fixing here this issue, now running fibn at speed 2 the memory
consuptions stays constant.
You'll still see the same behavior at speed 3 because there the
programmer is supposedly responsible to add manually possible GC entry
points.
I think now 32bit should be in a much better state but I hadn't time to
test it still.
Thanks!
Andrea
--
akrl@sdf.org
^ permalink raw reply [flat|nested] 9+ messages in thread
* bug#41194: 28.0.50; [feature/native-comp] fibn benchmark exhausts memory
2020-06-13 15:00 ` Andrea Corallo
@ 2020-06-13 18:17 ` Kévin Le Gouguec
2020-06-14 15:19 ` Kévin Le Gouguec
1 sibling, 0 replies; 9+ messages in thread
From: Kévin Le Gouguec @ 2020-06-13 18:17 UTC (permalink / raw)
To: Andrea Corallo; +Cc: 41194
Andrea Corallo <akrl@sdf.org> writes:
> I think now 32bit should be in a much better state but I hadn't time to
> test it still.
Alright! I've pulled the changes and started recompiling (without
blacklisting char-fold.el, because I'm such an optimist). I'll followup
when compilation has finished to let you know how it went with fibn!
Thank you for your efforts.
^ permalink raw reply [flat|nested] 9+ messages in thread
* bug#41194: 28.0.50; [feature/native-comp] fibn benchmark exhausts memory
2020-06-13 15:00 ` Andrea Corallo
2020-06-13 18:17 ` Kévin Le Gouguec
@ 2020-06-14 15:19 ` Kévin Le Gouguec
2020-06-14 16:19 ` Andrea Corallo
1 sibling, 1 reply; 9+ messages in thread
From: Kévin Le Gouguec @ 2020-06-14 15:19 UTC (permalink / raw)
To: Andrea Corallo; +Cc: 41194
[-- Attachment #1: Type: text/plain, Size: 969 bytes --]
Andrea Corallo <akrl@sdf.org> writes:
> 5a55a845a7 * Implement 'maybe_gc_or_quit' to allow correct GC in compiled Lisp
> 34ed9d2498 * Introduce latches
>
> are fixing here this issue, now running fibn at speed 2 the memory
> consuptions stays constant.
Alright, feedback time!
Commits:
- master: 82a632edc8b80bf16d9b9f205474bf9724b084c0
- feature/native-comp: 5a55a845a7c426e82e8a6a6d02bc4a39992871e3
The Good News
=============
- I can compile the branch without adding files to the default
blacklist,
- compilation (-j1) now only takes less than 6 hours instead of 3 days
(compared with 1.5 hour on master),
- at no point during compilation did the system swap; in fact, I could
probably have risked a -j2 build,
- elisp-benchmarks doesn't show any obvious performance regression
(… though see Bad News).
For details on memory usage during compilation, see attached memory
profile (to compare with bug#41077#28).
[-- Attachment #2: compilation-memory.pdf --]
[-- Type: application/pdf, Size: 73753 bytes --]
[-- Attachment #3: Type: text/plain, Size: 344 bytes --]
Few files take more than 3 minutes to compile now:
ELC+ELN emacs-lisp/comp.el 0:09:49
ELC+ELN org/org.el 0:03:39
ELC+ELN ../lisp/window.el 0:03:16
ELC+ELN emacs-lisp/bytecomp.el 0:03:16
For details on performance, see attached tables for master and
feature/native-comp, respectively (to compare with bug#41077#40).
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #4: perfs.org --]
[-- Type: text/x-org, Size: 2834 bytes --]
* Results
** master
| test | non-gc avg (s) | gc avg (s) | gcs avg | tot avg (s) | tot avg err (s) |
|----------------+----------------+------------+---------+-------------+-----------------|
| bubble-no-cons | 119.55 | 0.23 | 3 | 119.77 | 0.62 |
| bubble | 46.98 | 31.03 | 406 | 78.01 | 0.40 |
| dhrystone | 75.05 | 0.00 | 0 | 75.05 | 0.12 |
| fibn-rec | 59.89 | 0.00 | 0 | 59.89 | 0.07 |
| fibn-tc | 151.21 | 96.27 | 1168 | 247.48 | 0.45 |
| flet | 110.56 | 0.00 | 0 | 110.56 | 0.21 |
| inclist | 166.63 | 0.00 | 0 | 166.63 | 0.23 |
| listlen-tc | 77.43 | 0.00 | 0 | 77.43 | 0.37 |
| map-closure | 81.72 | 0.00 | 0 | 81.72 | 0.41 |
| nbody | 28.88 | 98.07 | 1291 | 126.95 | 0.22 |
| pcase | 111.76 | 0.00 | 0 | 111.76 | 0.14 |
|----------------+----------------+------------+---------+-------------+-----------------|
| total | 1029.64 | 225.60 | 2868 | 1255.24 | 1.12 |
** feature/native-comp
| test | non-gc avg (s) | gc avg (s) | gcs avg | tot avg (s) | tot avg err (s) |
|----------------+----------------+------------+---------+-------------+-----------------|
| bubble-no-cons | 19.44 | 0.10 | 1 | 19.54 | 0.02 |
| bubble | 11.35 | 7.63 | 1 | 18.99 | 8.51 |
| dhrystone | 31.39 | 0.00 | 0 | 31.39 | 0.10 |
| fibn-rec | 19.36 | 0.00 | 0 | 19.36 | 0.03 |
| fibn-tc | 87.00 | 6.16 | 1 | 93.16 | 1.61 |
| flet | 23.83 | 0.00 | 0 | 23.83 | 0.01 |
| inclist | 9.78 | 0.00 | 0 | 9.78 | 0.02 |
| listlen-tc | 0.78 | 0.00 | 0 | 0.78 | 0.00 |
| map-closure | 81.11 | 0.00 | 0 | 81.11 | 0.06 |
| nbody | 15.76 | 1.61 | 1 | 17.38 | 0.03 |
| pcase | 12.52 | 0.00 | 0 | 12.52 | 0.02 |
|----------------+----------------+------------+---------+-------------+-----------------|
| total | 312.34 | 15.51 | 4 | 327.84 | 8.67 |
[-- Attachment #5: Type: text/plain, Size: 85 bytes --]
The Bad News
============
- fibn still exhausts memory,
- now pidigits does too.
[-- Attachment #6: fibn.pdf --]
[-- Type: application/pdf, Size: 19089 bytes --]
[-- Attachment #7: pidigits.pdf --]
[-- Type: application/pdf, Size: 17848 bytes --]
[-- Attachment #8: Type: text/plain, Size: 144 bytes --]
I've only tried the default comp-speed (2) so far. I've attached the
results of M-x disassemble on the functions in fibn.el and pidigits.el.
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #9: elb-eliminate-digit.s --]
[-- Type: text/x-asm, Size: 4237 bytes --]
000013a0 <F656c622d656c696d696e6174652d6469676974_elb_eliminate_digit_0>:
13a0: e8 90 06 00 00 call 1a35 <__x86.get_pc_thunk.ax>
13a5: 05 5b 2c 00 00 add $0x2c5b,%eax
13aa: 57 push %edi
13ab: 56 push %esi
13ac: 53 push %ebx
13ad: 83 ec 2c sub $0x2c,%esp
13b0: 8b 98 f8 ff ff ff mov -0x8(%eax),%ebx
13b6: 8b b0 f4 ff ff ff mov -0xc(%eax),%esi
13bc: 8b 13 mov (%ebx),%edx
13be: ff 76 08 pushl 0x8(%esi)
13c1: ff 92 e4 12 00 00 call *0x12e4(%edx)
13c7: 89 44 24 18 mov %eax,0x18(%esp)
13cb: 58 pop %eax
13cc: 8b 03 mov (%ebx),%eax
13ce: ff 76 0c pushl 0xc(%esi)
13d1: ff 90 e4 12 00 00 call *0x12e4(%eax)
13d7: 89 44 24 10 mov %eax,0x10(%esp)
13db: 8b 44 24 40 mov 0x40(%esp),%eax
13df: 89 44 24 14 mov %eax,0x14(%esp)
13e3: 5a pop %edx
13e4: 59 pop %ecx
13e5: 8b 03 mov (%ebx),%eax
13e7: 8d 54 24 08 lea 0x8(%esp),%edx
13eb: 52 push %edx
13ec: 6a 02 push $0x2
13ee: ff 90 88 12 00 00 call *0x1288(%eax)
13f4: 89 44 24 1c mov %eax,0x1c(%esp)
13f8: 5f pop %edi
13f9: 58 pop %eax
13fa: 8b 03 mov (%ebx),%eax
13fc: 8d 54 24 10 lea 0x10(%esp),%edx
1400: 52 push %edx
1401: 6a 02 push $0x2
1403: ff 90 8c 12 00 00 call *0x128c(%eax)
1409: 8b 13 mov (%ebx),%edx
140b: 89 44 24 20 mov %eax,0x20(%esp)
140f: 6a 00 push $0x0
1411: 6a 00 push $0x0
1413: 50 push %eax
1414: ff 76 08 pushl 0x8(%esi)
1417: ff 52 24 call *0x24(%edx)
141a: 8b 46 10 mov 0x10(%esi),%eax
141d: 89 44 24 34 mov %eax,0x34(%esp)
1421: 83 c4 18 add $0x18,%esp
1424: 8b 03 mov (%ebx),%eax
1426: 8d 54 24 18 lea 0x18(%esp),%edx
142a: 52 push %edx
142b: 6a 02 push $0x2
142d: ff 90 88 12 00 00 call *0x1288(%eax)
1433: 6a 00 push $0x0
1435: 8b 13 mov (%ebx),%edx
1437: 6a 00 push $0x0
1439: 50 push %eax
143a: ff 76 08 pushl 0x8(%esi)
143d: ff 52 24 call *0x24(%edx)
1440: 8b 03 mov (%ebx),%eax
1442: 83 c4 14 add $0x14,%esp
1445: ff 76 04 pushl 0x4(%esi)
1448: ff 90 e4 12 00 00 call *0x12e4(%eax)
144e: 89 44 24 28 mov %eax,0x28(%esp)
1452: 8b 46 10 mov 0x10(%esi),%eax
1455: 89 44 24 2c mov %eax,0x2c(%esp)
1459: 58 pop %eax
145a: 8b 03 mov (%ebx),%eax
145c: 5a pop %edx
145d: 8d 54 24 20 lea 0x20(%esp),%edx
1461: 52 push %edx
1462: 6a 02 push $0x2
1464: ff 90 88 12 00 00 call *0x1288(%eax)
146a: 6a 00 push $0x0
146c: 89 c7 mov %eax,%edi
146e: 6a 00 push $0x0
1470: 8b 03 mov (%ebx),%eax
1472: 57 push %edi
1473: ff 76 04 pushl 0x4(%esi)
1476: ff 50 24 call *0x24(%eax)
1479: 89 f8 mov %edi,%eax
147b: 83 c4 40 add $0x40,%esp
147e: 5b pop %ebx
147f: 5e pop %esi
1480: 5f pop %edi
1481: c3 ret
1482: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi
1489: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #10: elb-extract-digit.s --]
[-- Type: text/x-asm, Size: 2632 bytes --]
00001310 <F656c622d657874726163742d6469676974_elb_extract_digit_0>:
1310: e8 20 07 00 00 call 1a35 <__x86.get_pc_thunk.ax>
1315: 05 eb 2c 00 00 add $0x2ceb,%eax
131a: 57 push %edi
131b: 56 push %esi
131c: 53 push %ebx
131d: 83 ec 1c sub $0x1c,%esp
1320: 8b 98 f8 ff ff ff mov -0x8(%eax),%ebx
1326: 8b b8 f4 ff ff ff mov -0xc(%eax),%edi
132c: 8b 13 mov (%ebx),%edx
132e: ff 77 04 pushl 0x4(%edi)
1331: ff 92 e4 12 00 00 call *0x12e4(%edx)
1337: 89 44 24 10 mov %eax,0x10(%esp)
133b: 8b 44 24 30 mov 0x30(%esp),%eax
133f: 89 44 24 14 mov %eax,0x14(%esp)
1343: 58 pop %eax
1344: 5a pop %edx
1345: 8b 03 mov (%ebx),%eax
1347: 8d 54 24 08 lea 0x8(%esp),%edx
134b: 52 push %edx
134c: 6a 02 push $0x2
134e: ff 90 88 12 00 00 call *0x1288(%eax)
1354: 89 44 24 18 mov %eax,0x18(%esp)
1358: 59 pop %ecx
1359: 8b 03 mov (%ebx),%eax
135b: ff 77 08 pushl 0x8(%edi)
135e: ff 90 e4 12 00 00 call *0x12e4(%eax)
1364: 89 44 24 1c mov %eax,0x1c(%esp)
1368: 5e pop %esi
1369: 58 pop %eax
136a: 8b 03 mov (%ebx),%eax
136c: 8d 54 24 10 lea 0x10(%esp),%edx
1370: 52 push %edx
1371: 6a 02 push $0x2
1373: ff 90 90 12 00 00 call *0x1290(%eax)
1379: 89 c6 mov %eax,%esi
137b: 58 pop %eax
137c: 8b 03 mov (%ebx),%eax
137e: ff 77 0c pushl 0xc(%edi)
1381: ff 90 e4 12 00 00 call *0x12e4(%eax)
1387: 89 c2 mov %eax,%edx
1389: 58 pop %eax
138a: 59 pop %ecx
138b: 52 push %edx
138c: 8b 03 mov (%ebx),%eax
138e: 56 push %esi
138f: ff 90 a8 0c 00 00 call *0xca8(%eax)
1395: 83 c4 20 add $0x20,%esp
1398: 5b pop %ebx
1399: 5e pop %esi
139a: 5f pop %edi
139b: c3 ret
139c: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #11: elb-fibn.s --]
[-- Type: text/x-asm, Size: 6689 bytes --]
000012e0 <F656c622d6669626e_elb_fibn_0>:
12e0: e8 af 02 00 00 call 1594 <__x86.get_pc_thunk.ax>
12e5: 05 1b 2d 00 00 add $0x2d1b,%eax
12ea: 55 push %ebp
12eb: 57 push %edi
12ec: 56 push %esi
12ed: 53 push %ebx
12ee: 83 ec 4c sub $0x4c,%esp
12f1: 8b 90 f4 ff ff ff mov -0xc(%eax),%edx
12f7: 8b a8 f8 ff ff ff mov -0x8(%eax),%ebp
12fd: 8d 44 24 20 lea 0x20(%esp),%eax
1301: 89 54 24 1c mov %edx,0x1c(%esp)
1305: 8b 12 mov (%edx),%edx
1307: 89 44 24 18 mov %eax,0x18(%esp)
130b: 8d 44 24 38 lea 0x38(%esp),%eax
130f: 89 54 24 04 mov %edx,0x4(%esp)
1313: 89 54 24 14 mov %edx,0x14(%esp)
1317: 89 44 24 10 mov %eax,0x10(%esp)
131b: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi
131f: 90 nop
1320: 8b 44 24 14 mov 0x14(%esp),%eax
1324: 83 ec 08 sub $0x8,%esp
1327: 89 44 24 28 mov %eax,0x28(%esp)
132b: 8b 44 24 68 mov 0x68(%esp),%eax
132f: 89 44 24 2c mov %eax,0x2c(%esp)
1333: 8b 45 00 mov 0x0(%ebp),%eax
1336: ff 74 24 20 pushl 0x20(%esp)
133a: 6a 02 push $0x2
133c: ff 90 a4 12 00 00 call *0x12a4(%eax)
1342: 83 c4 10 add $0x10,%esp
1345: 85 c0 test %eax,%eax
1347: 0f 84 23 01 00 00 je 1470 <F656c622d6669626e_elb_fibn_0+0x190>
134d: 8b 7c 24 1c mov 0x1c(%esp),%edi
1351: 8b 44 24 64 mov 0x64(%esp),%eax
1355: 83 ec 08 sub $0x8,%esp
1358: be 06 00 00 00 mov $0x6,%esi
135d: 89 44 24 30 mov %eax,0x30(%esp)
1361: 8b 47 0c mov 0xc(%edi),%eax
1364: 8b 5f 08 mov 0x8(%edi),%ebx
1367: 89 44 24 34 mov %eax,0x34(%esp)
136b: 8d 54 24 30 lea 0x30(%esp),%edx
136f: 8b 45 00 mov 0x0(%ebp),%eax
1372: 52 push %edx
1373: 6a 02 push $0x2
1375: ff 90 8c 12 00 00 call *0x128c(%eax)
137b: 8b 3f mov (%edi),%edi
137d: 89 44 24 18 mov %eax,0x18(%esp)
1381: 83 c4 10 add $0x10,%esp
1384: 8d 44 24 30 lea 0x30(%esp),%eax
1388: 89 44 24 0c mov %eax,0xc(%esp)
138c: 89 f8 mov %edi,%eax
138e: 89 f7 mov %esi,%edi
1390: 89 de mov %ebx,%esi
1392: 89 c3 mov %eax,%ebx
1394: eb 23 jmp 13b9 <F656c622d6669626e_elb_fibn_0+0xd9>
1396: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi
139d: 8d 76 00 lea 0x0(%esi),%esi
13a0: 89 d8 mov %ebx,%eax
13a2: c1 f8 02 sar $0x2,%eax
13a5: 3d ff ff ff 1f cmp $0x1fffffff,%eax
13aa: 74 5a je 1406 <F656c622d6669626e_elb_fibn_0+0x126>
13ac: 8d 1c 85 06 00 00 00 lea 0x6(,%eax,4),%ebx
13b3: 89 f7 mov %esi,%edi
13b5: 8b 74 24 04 mov 0x4(%esp),%esi
13b9: 8b 44 24 08 mov 0x8(%esp),%eax
13bd: 89 5c 24 30 mov %ebx,0x30(%esp)
13c1: 83 ec 08 sub $0x8,%esp
13c4: 89 44 24 3c mov %eax,0x3c(%esp)
13c8: 8b 45 00 mov 0x0(%ebp),%eax
13cb: ff 74 24 14 pushl 0x14(%esp)
13cf: 6a 02 push $0x2
13d1: ff 90 a4 12 00 00 call *0x12a4(%eax)
13d7: 83 c4 10 add $0x10,%esp
13da: 85 c0 test %eax,%eax
13dc: 74 42 je 1420 <F656c622d6669626e_elb_fibn_0+0x140>
13de: 89 74 24 38 mov %esi,0x38(%esp)
13e2: 83 ec 08 sub $0x8,%esp
13e5: 8b 45 00 mov 0x0(%ebp),%eax
13e8: 89 7c 24 44 mov %edi,0x44(%esp)
13ec: ff 74 24 18 pushl 0x18(%esp)
13f0: 6a 02 push $0x2
13f2: ff 90 90 12 00 00 call *0x1290(%eax)
13f8: 89 44 24 14 mov %eax,0x14(%esp)
13fc: 8d 43 fe lea -0x2(%ebx),%eax
13ff: 83 c4 10 add $0x10,%esp
1402: a8 03 test $0x3,%al
1404: 74 9a je 13a0 <F656c622d6669626e_elb_fibn_0+0xc0>
1406: 83 ec 0c sub $0xc,%esp
1409: 8b 45 00 mov 0x0(%ebp),%eax
140c: 53 push %ebx
140d: ff 90 5c 12 00 00 call *0x125c(%eax)
1413: 89 c3 mov %eax,%ebx
1415: 83 c4 10 add $0x10,%esp
1418: eb 99 jmp 13b3 <F656c622d6669626e_elb_fibn_0+0xd3>
141a: 8d b6 00 00 00 00 lea 0x0(%esi),%esi
1420: 8b 4c 24 14 mov 0x14(%esp),%ecx
1424: 8d 41 fe lea -0x2(%ecx),%eax
1427: a8 03 test $0x3,%al
1429: 75 25 jne 1450 <F656c622d6669626e_elb_fibn_0+0x170>
142b: 89 c8 mov %ecx,%eax
142d: c1 f8 02 sar $0x2,%eax
1430: 3d ff ff ff 1f cmp $0x1fffffff,%eax
1435: 74 19 je 1450 <F656c622d6669626e_elb_fibn_0+0x170>
1437: 8d 04 85 06 00 00 00 lea 0x6(,%eax,4),%eax
143e: 89 44 24 14 mov %eax,0x14(%esp)
1442: e9 d9 fe ff ff jmp 1320 <F656c622d6669626e_elb_fibn_0+0x40>
1447: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi
144e: 66 90 xchg %ax,%ax
1450: 83 ec 0c sub $0xc,%esp
1453: 8b 45 00 mov 0x0(%ebp),%eax
1456: ff 74 24 20 pushl 0x20(%esp)
145a: ff 90 5c 12 00 00 call *0x125c(%eax)
1460: 89 44 24 24 mov %eax,0x24(%esp)
1464: 83 c4 10 add $0x10,%esp
1467: e9 b4 fe ff ff jmp 1320 <F656c622d6669626e_elb_fibn_0+0x40>
146c: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi
1470: 8b 44 24 04 mov 0x4(%esp),%eax
1474: 83 c4 4c add $0x4c,%esp
1477: 5b pop %ebx
1478: 5e pop %esi
1479: 5f pop %edi
147a: 5d pop %ebp
147b: c3 ret
147c: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #12: elb-fibn-entry.s --]
[-- Type: text/x-asm, Size: 697 bytes --]
00001480 <F656c622d6669626e2d656e747279_elb_fibn_entry_0>:
1480: 53 push %ebx
1481: e8 da fb ff ff call 1060 <__x86.get_pc_thunk.bx>
1486: 81 c3 7a 2b 00 00 add $0x2b7a,%ebx
148c: 83 ec 10 sub $0x10,%esp
148f: 68 42 01 00 00 push $0x142
1494: 68 02 1b b7 00 push $0xb71b02
1499: e8 92 fb ff ff call 1030 <F656c622d6669626e_elb_fibn_0@plt>
149e: 83 c4 18 add $0x18,%esp
14a1: 5b pop %ebx
14a2: c3 ret
14a3: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi
14aa: 8d b6 00 00 00 00 lea 0x0(%esi),%esi
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #13: elb-next-term.s --]
[-- Type: text/x-asm, Size: 6624 bytes --]
00001490 <F656c622d6e6578742d7465726d_elb_next_term_0>:
1490: e8 a0 05 00 00 call 1a35 <__x86.get_pc_thunk.ax>
1495: 05 6b 2b 00 00 add $0x2b6b,%eax
149a: 55 push %ebp
149b: 57 push %edi
149c: 56 push %esi
149d: 53 push %ebx
149e: 83 ec 44 sub $0x44,%esp
14a1: 8b b0 f4 ff ff ff mov -0xc(%eax),%esi
14a7: 8b 98 f8 ff ff ff mov -0x8(%eax),%ebx
14ad: 8b 7c 24 58 mov 0x58(%esp),%edi
14b1: 8b 56 14 mov 0x14(%esi),%edx
14b4: 8b 03 mov (%ebx),%eax
14b6: 89 7c 24 08 mov %edi,0x8(%esp)
14ba: 89 54 24 0c mov %edx,0xc(%esp)
14be: 8d 54 24 08 lea 0x8(%esp),%edx
14c2: 52 push %edx
14c3: 6a 02 push $0x2
14c5: ff 90 88 12 00 00 call *0x1288(%eax)
14cb: 8d 50 fe lea -0x2(%eax),%edx
14ce: 83 c4 10 add $0x10,%esp
14d1: 83 e2 03 and $0x3,%edx
14d4: 75 1a jne 14f0 <F656c622d6e6578742d7465726d_elb_next_term_0+0x60>
14d6: 89 c2 mov %eax,%edx
14d8: c1 fa 02 sar $0x2,%edx
14db: 81 fa ff ff ff 1f cmp $0x1fffffff,%edx
14e1: 74 0d je 14f0 <F656c622d6e6578742d7465726d_elb_next_term_0+0x60>
14e3: 8d 2c 95 06 00 00 00 lea 0x6(,%edx,4),%ebp
14ea: eb 15 jmp 1501 <F656c622d6e6578742d7465726d_elb_next_term_0+0x71>
14ec: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi
14f0: 83 ec 0c sub $0xc,%esp
14f3: 8b 13 mov (%ebx),%edx
14f5: 50 push %eax
14f6: ff 92 5c 12 00 00 call *0x125c(%edx)
14fc: 89 c5 mov %eax,%ebp
14fe: 83 c4 10 add $0x10,%esp
1501: 83 ec 0c sub $0xc,%esp
1504: 8b 03 mov (%ebx),%eax
1506: ff 76 08 pushl 0x8(%esi)
1509: ff 90 e4 12 00 00 call *0x12e4(%eax)
150f: 89 44 24 20 mov %eax,0x20(%esp)
1513: 58 pop %eax
1514: 8b 03 mov (%ebx),%eax
1516: ff 76 04 pushl 0x4(%esi)
1519: ff 90 e4 12 00 00 call *0x12e4(%eax)
151f: 89 44 24 18 mov %eax,0x18(%esp)
1523: 8b 46 14 mov 0x14(%esi),%eax
1526: 89 44 24 1c mov %eax,0x1c(%esp)
152a: 5a pop %edx
152b: 59 pop %ecx
152c: 8b 03 mov (%ebx),%eax
152e: 8d 54 24 10 lea 0x10(%esp),%edx
1532: 52 push %edx
1533: 6a 02 push $0x2
1535: ff 90 88 12 00 00 call *0x1288(%eax)
153b: 89 44 24 24 mov %eax,0x24(%esp)
153f: 58 pop %eax
1540: 5a pop %edx
1541: 8b 03 mov (%ebx),%eax
1543: 8d 54 24 18 lea 0x18(%esp),%edx
1547: 52 push %edx
1548: 6a 02 push $0x2
154a: ff 90 90 12 00 00 call *0x1290(%eax)
1550: 8b 13 mov (%ebx),%edx
1552: 89 44 24 28 mov %eax,0x28(%esp)
1556: 6a 00 push $0x0
1558: 6a 00 push $0x0
155a: 50 push %eax
155b: ff 76 08 pushl 0x8(%esi)
155e: ff 52 24 call *0x24(%edx)
1561: 8b 03 mov (%ebx),%eax
1563: 89 6c 24 3c mov %ebp,0x3c(%esp)
1567: 83 c4 18 add $0x18,%esp
156a: 8d 54 24 20 lea 0x20(%esp),%edx
156e: 52 push %edx
156f: 6a 02 push $0x2
1571: ff 90 88 12 00 00 call *0x1288(%eax)
1577: 6a 00 push $0x0
1579: 8b 13 mov (%ebx),%edx
157b: 6a 00 push $0x0
157d: 50 push %eax
157e: ff 76 08 pushl 0x8(%esi)
1581: ff 52 24 call *0x24(%edx)
1584: 8b 03 mov (%ebx),%eax
1586: 83 c4 14 add $0x14,%esp
1589: ff 76 0c pushl 0xc(%esi)
158c: ff 90 e4 12 00 00 call *0x12e4(%eax)
1592: 89 44 24 30 mov %eax,0x30(%esp)
1596: 8b 03 mov (%ebx),%eax
1598: 89 6c 24 34 mov %ebp,0x34(%esp)
159c: 59 pop %ecx
159d: 5d pop %ebp
159e: 8d 54 24 28 lea 0x28(%esp),%edx
15a2: 52 push %edx
15a3: 6a 02 push $0x2
15a5: ff 90 88 12 00 00 call *0x1288(%eax)
15ab: 6a 00 push $0x0
15ad: 8b 13 mov (%ebx),%edx
15af: 6a 00 push $0x0
15b1: 50 push %eax
15b2: ff 76 0c pushl 0xc(%esi)
15b5: ff 52 24 call *0x24(%edx)
15b8: 8b 03 mov (%ebx),%eax
15ba: 83 c4 14 add $0x14,%esp
15bd: ff 76 04 pushl 0x4(%esi)
15c0: ff 90 e4 12 00 00 call *0x12e4(%eax)
15c6: 89 44 24 38 mov %eax,0x38(%esp)
15ca: 89 7c 24 3c mov %edi,0x3c(%esp)
15ce: 58 pop %eax
15cf: 8b 03 mov (%ebx),%eax
15d1: 5a pop %edx
15d2: 8d 54 24 30 lea 0x30(%esp),%edx
15d6: 52 push %edx
15d7: 6a 02 push $0x2
15d9: ff 90 88 12 00 00 call *0x1288(%eax)
15df: 6a 00 push $0x0
15e1: 89 c7 mov %eax,%edi
15e3: 6a 00 push $0x0
15e5: 8b 03 mov (%ebx),%eax
15e7: 57 push %edi
15e8: ff 76 04 pushl 0x4(%esi)
15eb: ff 50 24 call *0x24(%eax)
15ee: 89 f8 mov %edi,%eax
15f0: 83 c4 5c add $0x5c,%esp
15f3: 5b pop %ebx
15f4: 5e pop %esi
15f5: 5f pop %edi
15f6: 5d pop %ebp
15f7: c3 ret
15f8: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi
15ff: 90 nop
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #14: elb-pidigits.s --]
[-- Type: text/x-asm, Size: 8594 bytes --]
00001600 <F656c622d7069646967697473_elb_pidigits_0>:
1600: 55 push %ebp
1601: 57 push %edi
1602: 56 push %esi
1603: 53 push %ebx
1604: e8 87 fa ff ff call 1090 <__x86.get_pc_thunk.bx>
1609: 81 c3 f7 29 00 00 add $0x29f7,%ebx
160f: 83 ec 54 sub $0x54,%esp
1612: 8b ab f4 ff ff ff mov -0xc(%ebx),%ebp
1618: 8b b3 f8 ff ff ff mov -0x8(%ebx),%esi
161e: 8b 45 20 mov 0x20(%ebp),%eax
1621: 89 44 24 1c mov %eax,0x1c(%esp)
1625: 8b 06 mov (%esi),%eax
1627: 6a 06 push $0x6
1629: ff 75 04 pushl 0x4(%ebp)
162c: ff 50 2c call *0x2c(%eax)
162f: 8b 06 mov (%esi),%eax
1631: 59 pop %ecx
1632: 5f pop %edi
1633: 6a 06 push $0x6
1635: bf 02 00 00 00 mov $0x2,%edi
163a: ff 75 0c pushl 0xc(%ebp)
163d: ff 50 2c call *0x2c(%eax)
1640: 58 pop %eax
1641: 5a pop %edx
1642: 8b 06 mov (%esi),%eax
1644: 6a 02 push $0x2
1646: ff 75 08 pushl 0x8(%ebp)
1649: ff 50 2c call *0x2c(%eax)
164c: 8b 45 24 mov 0x24(%ebp),%eax
164f: 83 c4 10 add $0x10,%esp
1652: c7 44 24 08 02 00 00 movl $0x2,0x8(%esp)
1659: 00
165a: 8d 4c 24 28 lea 0x28(%esp),%ecx
165e: 89 4c 24 0c mov %ecx,0xc(%esp)
1662: 8d 4c 24 30 lea 0x30(%esp),%ecx
1666: 89 4c 24 10 mov %ecx,0x10(%esp)
166a: 8d 4c 24 38 lea 0x38(%esp),%ecx
166e: 89 4c 24 1c mov %ecx,0x1c(%esp)
1672: eb 5b jmp 16cf <F656c622d7069646967697473_elb_pidigits_0+0xcf>
1674: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi
1678: 89 f8 mov %edi,%eax
167a: c1 f8 02 sar $0x2,%eax
167d: 3d ff ff ff 1f cmp $0x1fffffff,%eax
1682: 74 7e je 1702 <F656c622d7069646967697473_elb_pidigits_0+0x102>
1684: 8d 3c 85 06 00 00 00 lea 0x6(,%eax,4),%edi
168b: 83 ec 0c sub $0xc,%esp
168e: 57 push %edi
168f: e8 dc f9 ff ff call 1070 <F656c622d6e6578742d7465726d_elb_next_term_0@plt>
1694: 59 pop %ecx
1695: 8b 06 mov (%esi),%eax
1697: ff 75 04 pushl 0x4(%ebp)
169a: ff 90 e4 12 00 00 call *0x12e4(%eax)
16a0: 89 44 24 40 mov %eax,0x40(%esp)
16a4: 58 pop %eax
16a5: 8b 06 mov (%esi),%eax
16a7: ff 75 08 pushl 0x8(%ebp)
16aa: ff 90 e4 12 00 00 call *0x12e4(%eax)
16b0: 89 44 24 44 mov %eax,0x44(%esp)
16b4: 58 pop %eax
16b5: 8b 06 mov (%esi),%eax
16b7: 5a pop %edx
16b8: ff 74 24 18 pushl 0x18(%esp)
16bc: 6a 02 push $0x2
16be: ff 90 a0 12 00 00 call *0x12a0(%eax)
16c4: 83 c4 10 add $0x10,%esp
16c7: 85 c0 test %eax,%eax
16c9: 74 55 je 1720 <F656c622d7069646967697473_elb_pidigits_0+0x120>
16cb: 8b 44 24 60 mov 0x60(%esp),%eax
16cf: 8b 54 24 08 mov 0x8(%esp),%edx
16d3: 89 44 24 2c mov %eax,0x2c(%esp)
16d7: 83 ec 08 sub $0x8,%esp
16da: 8b 06 mov (%esi),%eax
16dc: 89 54 24 30 mov %edx,0x30(%esp)
16e0: ff 74 24 14 pushl 0x14(%esp)
16e4: 6a 02 push $0x2
16e6: ff 90 98 12 00 00 call *0x1298(%eax)
16ec: 83 c4 10 add $0x10,%esp
16ef: 85 c0 test %eax,%eax
16f1: 0f 85 d9 00 00 00 jne 17d0 <F656c622d7069646967697473_elb_pidigits_0+0x1d0>
16f7: 8d 47 fe lea -0x2(%edi),%eax
16fa: a8 03 test $0x3,%al
16fc: 0f 84 76 ff ff ff je 1678 <F656c622d7069646967697473_elb_pidigits_0+0x78>
1702: 83 ec 0c sub $0xc,%esp
1705: 8b 06 mov (%esi),%eax
1707: 57 push %edi
1708: ff 90 5c 12 00 00 call *0x125c(%eax)
170e: 89 c7 mov %eax,%edi
1710: 83 c4 10 add $0x10,%esp
1713: e9 73 ff ff ff jmp 168b <F656c622d7069646967697473_elb_pidigits_0+0x8b>
1718: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi
171f: 90 nop
1720: 83 ec 0c sub $0xc,%esp
1723: 6a 0e push $0xe
1725: e8 36 f9 ff ff call 1060 <F656c622d657874726163742d6469676974_elb_extract_digit_0@plt>
172a: c7 04 24 12 00 00 00 movl $0x12,(%esp)
1731: 89 44 24 28 mov %eax,0x28(%esp)
1735: 89 44 24 48 mov %eax,0x48(%esp)
1739: e8 22 f9 ff ff call 1060 <F656c622d657874726163742d6469676974_elb_extract_digit_0@plt>
173e: 89 44 24 4c mov %eax,0x4c(%esp)
1742: 58 pop %eax
1743: 8b 06 mov (%esi),%eax
1745: 5a pop %edx
1746: ff 74 24 24 pushl 0x24(%esp)
174a: 6a 02 push $0x2
174c: ff 90 a8 12 00 00 call *0x12a8(%eax)
1752: 83 c4 10 add $0x10,%esp
1755: 85 c0 test %eax,%eax
1757: 0f 84 6e ff ff ff je 16cb <F656c622d7069646967697473_elb_pidigits_0+0xcb>
175d: 83 ec 08 sub $0x8,%esp
1760: 8b 06 mov (%esi),%eax
1762: ff 74 24 1c pushl 0x1c(%esp)
1766: ff 74 24 24 pushl 0x24(%esp)
176a: ff 90 b4 0f 00 00 call *0xfb4(%eax)
1770: 8b 4c 24 18 mov 0x18(%esp),%ecx
1774: 89 44 24 24 mov %eax,0x24(%esp)
1778: 8d 41 fe lea -0x2(%ecx),%eax
177b: 83 c4 10 add $0x10,%esp
177e: a8 03 test $0x3,%al
1780: 75 1e jne 17a0 <F656c622d7069646967697473_elb_pidigits_0+0x1a0>
1782: 89 c8 mov %ecx,%eax
1784: c1 f8 02 sar $0x2,%eax
1787: 3d ff ff ff 1f cmp $0x1fffffff,%eax
178c: 74 12 je 17a0 <F656c622d7069646967697473_elb_pidigits_0+0x1a0>
178e: 8d 04 85 06 00 00 00 lea 0x6(,%eax,4),%eax
1795: 89 44 24 08 mov %eax,0x8(%esp)
1799: eb 1b jmp 17b6 <F656c622d7069646967697473_elb_pidigits_0+0x1b6>
179b: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi
179f: 90 nop
17a0: 83 ec 0c sub $0xc,%esp
17a3: 8b 06 mov (%esi),%eax
17a5: ff 74 24 14 pushl 0x14(%esp)
17a9: ff 90 5c 12 00 00 call *0x125c(%eax)
17af: 89 44 24 18 mov %eax,0x18(%esp)
17b3: 83 c4 10 add $0x10,%esp
17b6: 83 ec 0c sub $0xc,%esp
17b9: ff 74 24 24 pushl 0x24(%esp)
17bd: e8 8e f8 ff ff call 1050 <F656c622d656c696d696e6174652d6469676974_elb_eliminate_digit_0@plt>
17c2: 83 c4 10 add $0x10,%esp
17c5: e9 01 ff ff ff jmp 16cb <F656c622d7069646967697473_elb_pidigits_0+0xcb>
17ca: 8d b6 00 00 00 00 lea 0x0(%esi),%esi
17d0: 8b 06 mov (%esi),%eax
17d2: 83 ec 0c sub $0xc,%esp
17d5: ff 74 24 20 pushl 0x20(%esp)
17d9: ff 90 20 11 00 00 call *0x1120(%eax)
17df: 89 c3 mov %eax,%ebx
17e1: 8b 06 mov (%esi),%eax
17e3: c7 04 24 0e 00 00 00 movl $0xe,(%esp)
17ea: ff 50 18 call *0x18(%eax)
17ed: 83 c4 5c add $0x5c,%esp
17f0: 89 d8 mov %ebx,%eax
17f2: 5b pop %ebx
17f3: 5e pop %esi
17f4: 5f pop %edi
17f5: 5d pop %ebp
17f6: c3 ret
17f7: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi
17fe: 66 90 xchg %ax,%ax
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #15: elb-pidigits-entry.s --]
[-- Type: text/x-asm, Size: 3066 bytes --]
00001800 <F656c622d70696469676974732d656e747279_elb_pidigits_entry_0>:
1800: 55 push %ebp
1801: 57 push %edi
1802: 56 push %esi
1803: 53 push %ebx
1804: e8 87 f8 ff ff call 1090 <__x86.get_pc_thunk.bx>
1809: 81 c3 f7 27 00 00 add $0x27f7,%ebx
180f: 83 ec 2c sub $0x2c,%esp
1812: 8d 44 24 18 lea 0x18(%esp),%eax
1816: 89 44 24 0c mov %eax,0xc(%esp)
181a: 8b bb f4 ff ff ff mov -0xc(%ebx),%edi
1820: 8b b3 f8 ff ff ff mov -0x8(%ebx),%esi
1826: 8b 6f 40 mov 0x40(%edi),%ebp
1829: eb 4b jmp 1876 <F656c622d70696469676974732d656e747279_elb_pidigits_entry_0+0x76>
182b: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi
182f: 90 nop
1830: 89 e8 mov %ebp,%eax
1832: c1 f8 02 sar $0x2,%eax
1835: 3d 00 00 00 e0 cmp $0xe0000000,%eax
183a: 74 41 je 187d <F656c622d70696469676974732d656e747279_elb_pidigits_entry_0+0x7d>
183c: 8d 2c 85 fe ff ff ff lea -0x2(,%eax,4),%ebp
1843: 8b 47 18 mov 0x18(%edi),%eax
1846: 89 6c 24 18 mov %ebp,0x18(%esp)
184a: 83 ec 08 sub $0x8,%esp
184d: 89 44 24 24 mov %eax,0x24(%esp)
1851: 8b 06 mov (%esi),%eax
1853: ff 74 24 14 pushl 0x14(%esp)
1857: 6a 02 push $0x2
1859: ff 90 98 12 00 00 call *0x1298(%eax)
185f: 83 c4 10 add $0x10,%esp
1862: 85 c0 test %eax,%eax
1864: 74 2a je 1890 <F656c622d70696469676974732d656e747279_elb_pidigits_entry_0+0x90>
1866: 83 ec 0c sub $0xc,%esp
1869: 68 d2 07 00 00 push $0x7d2
186e: e8 cd f7 ff ff call 1040 <F656c622d7069646967697473_elb_pidigits_0@plt>
1873: 83 c4 10 add $0x10,%esp
1876: 8d 45 fe lea -0x2(%ebp),%eax
1879: a8 03 test $0x3,%al
187b: 74 b3 je 1830 <F656c622d70696469676974732d656e747279_elb_pidigits_entry_0+0x30>
187d: 83 ec 0c sub $0xc,%esp
1880: 8b 06 mov (%esi),%eax
1882: 55 push %ebp
1883: ff 90 58 12 00 00 call *0x1258(%eax)
1889: 89 c5 mov %eax,%ebp
188b: 83 c4 10 add $0x10,%esp
188e: eb b3 jmp 1843 <F656c622d70696469676974732d656e747279_elb_pidigits_entry_0+0x43>
1890: 83 c4 2c add $0x2c,%esp
1893: 31 c0 xor %eax,%eax
1895: 5b pop %ebx
1896: 5e pop %esi
1897: 5f pop %edi
1898: 5d pop %ebp
1899: c3 ret
189a: 8d b6 00 00 00 00 lea 0x0(%esi),%esi
[-- Attachment #16: Type: text/plain, Size: 110 bytes --]
Let me know what I can do to help diagnose this further. Again, thank
you for the time spent on this issue!
^ permalink raw reply [flat|nested] 9+ messages in thread
* bug#41194: 28.0.50; [feature/native-comp] fibn benchmark exhausts memory
2020-06-14 15:19 ` Kévin Le Gouguec
@ 2020-06-14 16:19 ` Andrea Corallo
2020-06-14 20:47 ` Kévin Le Gouguec
0 siblings, 1 reply; 9+ messages in thread
From: Andrea Corallo @ 2020-06-14 16:19 UTC (permalink / raw)
To: Kévin Le Gouguec; +Cc: 41194
Kévin Le Gouguec <kevin.legouguec@gmail.com> writes:
> Andrea Corallo <akrl@sdf.org> writes:
>
>> 5a55a845a7 * Implement 'maybe_gc_or_quit' to allow correct GC in compiled Lisp
>> 34ed9d2498 * Introduce latches
>>
>> are fixing here this issue, now running fibn at speed 2 the memory
>> consuptions stays constant.
>
> Alright, feedback time!
>
> Commits:
> - master: 82a632edc8b80bf16d9b9f205474bf9724b084c0
> - feature/native-comp: 5a55a845a7c426e82e8a6a6d02bc4a39992871e3
>
>
> The Good News
> =============
>
> - I can compile the branch without adding files to the default
> blacklist,
>
> - compilation (-j1) now only takes less than 6 hours instead of 3 days
> (compared with 1.5 hour on master),
>
> - at no point during compilation did the system swap; in fact, I could
> probably have risked a -j2 build,
>
> - elisp-benchmarks doesn't show any obvious performance regression
> (… though see Bad News).
>
> For details on memory usage during compilation, see attached memory
> profile (to compare with bug#41077#28).
Hi Kévin,
this is very good new thanks! If I read correctly we are always under
about 600MB as memory consumption is this correct?
>
> Few files take more than 3 minutes to compile now:
>
> ELC+ELN emacs-lisp/comp.el 0:09:49
> ELC+ELN org/org.el 0:03:39
> ELC+ELN ../lisp/window.el 0:03:16
> ELC+ELN emacs-lisp/bytecomp.el 0:03:16
>
> For details on performance, see attached tables for master and
> feature/native-comp, respectively (to compare with bug#41077#40).
>
>
>
>
> The Bad News
> ============
>
> - fibn still exhausts memory,
> - now pidigits does too.
>
>
>
>
> I've only tried the default comp-speed (2) so far. I've attached the
> results of M-x disassemble on the functions in fibn.el and pidigits.el.
I suspect we are still looking at a speed 3 run. How comp-speed was set
for the test?
I ask that because for now speed 3 is written into the stone within
elisp-benchmarks.el, yeah... :/ and so has to be manually changed there.
Thanks!
Andrea
--
akrl@sdf.org
^ permalink raw reply [flat|nested] 9+ messages in thread
* bug#41194: 28.0.50; [feature/native-comp] fibn benchmark exhausts memory
2020-06-14 16:19 ` Andrea Corallo
@ 2020-06-14 20:47 ` Kévin Le Gouguec
2020-06-14 21:45 ` Andrea Corallo
0 siblings, 1 reply; 9+ messages in thread
From: Kévin Le Gouguec @ 2020-06-14 20:47 UTC (permalink / raw)
To: Andrea Corallo; +Cc: 41194-done
[-- Attachment #1: Type: text/plain, Size: 1516 bytes --]
Andrea Corallo <akrl@sdf.org> writes:
> this is very good new thanks! If I read correctly we are always under
> about 600MB as memory consumption is this correct?
Yep. I can post the detailed data here if that's needed; here are the
10 files that took the most virtual memory (vsz):
1. org/org.el 541.2 MB
2. gnus/gnus-sum.el 459.3 MB
3. emacs-lisp/comp.el 455.2 MB
4. net/tramp.el 408.2 MB
5. net/tramp-adb.el 390.4 MB
6. net/tramp-sh.el 371.0 MB
7. progmodes/cperl-mode.el 356.2 MB
8. ../lisp/window.el 348.9 MB
9. gnus/message.el 345.4 MB
10. net/soap-client.el 344.4 MB
And the 10 files that took the most resident memory (rss):
1. org/org.el 361.6 MB
2. emacs-lisp/comp.el 287.3 MB
3. gnus/gnus-sum.el 286.7 MB
4. net/tramp.el 236.8 MB
5. net/tramp-adb.el 218.1 MB
6. net/tramp-sh.el 199.0 MB
7. progmodes/cperl-mode.el 185.0 MB
8. ../lisp/window.el 181.6 MB
9. gnus/message.el 174.0 MB
10. erc/erc.el 173.5 MB
> I suspect we are still looking at a speed 3 run. How comp-speed was set
> for the test?
>
> I ask that because for now speed 3 is written into the stone within
> elisp-benchmarks.el, yeah... :/ and so has to be manually changed there.
Now that's just sneaky 😛 You're right, it was a speed 3 run. Setting
comp-speed to 2 in elisp-benchmarks.el, I now get the attached results.
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: perfs.org --]
[-- Type: text/x-org, Size: 4575 bytes --]
* Results
** master
#+TBLNAME: master
| test | non-gc avg (s) | gc avg (s) | gcs avg | tot avg (s) | tot avg err (s) |
|----------------+----------------+------------+---------+-------------+-----------------|
| bubble-no-cons | 118.41 | 0.23 | 3 | 118.63 | 0.36 |
| bubble | 46.29 | 29.34 | 388 | 75.63 | 0.36 |
| dhrystone | 74.82 | 0.00 | 0 | 74.82 | 0.34 |
| fibn-rec | 59.50 | 0.00 | 0 | 59.50 | 0.28 |
| fibn-tc | 147.39 | 96.86 | 1179 | 244.26 | 2.70 |
| fibn | 320.33 | 276.23 | 3442 | 596.56 | 5.31 |
| flet | 112.02 | 0.00 | 0 | 112.02 | 0.29 |
| inclist | 166.30 | 0.00 | 0 | 166.30 | 0.67 |
| listlen-tc | 76.97 | 0.00 | 0 | 76.97 | 0.53 |
| map-closure | 81.86 | 0.00 | 0 | 81.86 | 0.31 |
| nbody | 28.62 | 98.53 | 1303 | 127.14 | 0.21 |
| pcase | 110.63 | 0.00 | 0 | 110.63 | 0.29 |
| pidigits | 61.78 | 39.46 | 469 | 101.24 | 0.70 |
|----------------+----------------+------------+---------+-------------+-----------------|
| total | 1404.92 | 540.65 | 6786 | 1945.57 | 6.13 |
** feature/native-comp
#+TBLNAME: feature/native-comp
| test | non-gc avg (s) | gc avg (s) | gcs avg | tot avg (s) | tot avg err (s) |
|----------------+----------------+------------+---------+-------------+-----------------|
| bubble-no-cons | 30.12 | 0.16 | 2 | 30.28 | 0.04 |
| bubble | 18.05 | 27.91 | 352 | 45.96 | 0.33 |
| dhrystone | 34.26 | 0.00 | 0 | 34.26 | 0.05 |
| fibn-rec | 26.92 | 0.00 | 0 | 26.92 | 0.03 |
| fibn-tc | 98.66 | 93.89 | 1096 | 192.55 | 1.66 |
| fibn | 253.19 | 269.12 | 3192 | 522.31 | 2.17 |
| flet | 22.92 | 0.00 | 0 | 22.92 | 0.04 |
| inclist | 11.76 | 0.00 | 0 | 11.76 | 0.16 |
| listlen-tc | 21.44 | 0.00 | 0 | 21.44 | 0.05 |
| map-closure | 80.57 | 0.00 | 0 | 80.57 | 0.03 |
| nbody | 15.62 | 95.66 | 1212 | 111.28 | 0.10 |
| pcase | 17.64 | 0.00 | 0 | 17.64 | 0.03 |
| pidigits | 59.82 | 38.86 | 436 | 98.68 | 0.39 |
|----------------+----------------+------------+---------+-------------+-----------------|
| total | 690.98 | 525.59 | 6291 | 1216.57 | 2.79 |
** ratio
| test | non-gc avg (s) | gc avg (s) | gcs avg | tot avg (s) |
|----------------+----------------+------------+---------+-------------|
| bubble-no-cons | 3.92 | 1.44 | 1.5 | 3.93 |
| bubble | 2.56 | 1.05 | 1.1 | 1.64 |
| dhrystone | 2.18 | | | 2.18 |
| fibn-rec | 2.21 | | | 2.21 |
| fibn-tc | 1.49 | 1.03 | 1.07 | 1.26 |
| fibn | 1.26 | 1.03 | 1.08 | 1.14 |
| flet | 4.89 | | | 4.89 |
| inclist | 14.1 | | | 14.1 |
| listlen-tc | 3.6 | | | 3.6 |
| map-closure | 1.02 | | | 1.02 |
| nbody | 1.83 | 1.03 | 1.07 | 1.14 |
| pcase | 6.31 | | | 6.31 |
| pidigits | 1.03 | 1.02 | 1.08 | 1.02 |
|----------------+----------------+------------+---------+-------------|
| total | 2.03 | 1.03 | 1.08 | 1.6 |
#+TBLFM: @2$2..@>$> = if (remote(feature/native-comp,@@#$$#)!=0, remote(master,@@#$$#)/remote(feature/native-comp,@@#$$#), string("")); p3
[-- Attachment #3: Type: text/plain, Size: 153 bytes --]
Conclusion: I'm closing this report! Again, thank you for your efforts.
(And thank you for this opportunity to learn about Org spreadsheets 😉)
^ permalink raw reply [flat|nested] 9+ messages in thread
* bug#41194: 28.0.50; [feature/native-comp] fibn benchmark exhausts memory
2020-06-14 20:47 ` Kévin Le Gouguec
@ 2020-06-14 21:45 ` Andrea Corallo
0 siblings, 0 replies; 9+ messages in thread
From: Andrea Corallo @ 2020-06-14 21:45 UTC (permalink / raw)
To: Kévin Le Gouguec; +Cc: 41194
Kévin Le Gouguec <kevin.legouguec@gmail.com> writes:
> Andrea Corallo <akrl@sdf.org> writes:
>
>> this is very good new thanks! If I read correctly we are always under
>> about 600MB as memory consumption is this correct?
>
> Yep. I can post the detailed data here if that's needed; here are the
> 10 files that took the most virtual memory (vsz):
>
> 1. org/org.el 541.2 MB
> 2. gnus/gnus-sum.el 459.3 MB
> 3. emacs-lisp/comp.el 455.2 MB
> 4. net/tramp.el 408.2 MB
> 5. net/tramp-adb.el 390.4 MB
> 6. net/tramp-sh.el 371.0 MB
> 7. progmodes/cperl-mode.el 356.2 MB
> 8. ../lisp/window.el 348.9 MB
> 9. gnus/message.el 345.4 MB
> 10. net/soap-client.el 344.4 MB
Cool, I guess means should be buildable at -j3 with 2GB of ram.
> And the 10 files that took the most resident memory (rss):
>
> 1. org/org.el 361.6 MB
> 2. emacs-lisp/comp.el 287.3 MB
> 3. gnus/gnus-sum.el 286.7 MB
> 4. net/tramp.el 236.8 MB
> 5. net/tramp-adb.el 218.1 MB
> 6. net/tramp-sh.el 199.0 MB
> 7. progmodes/cperl-mode.el 185.0 MB
> 8. ../lisp/window.el 181.6 MB
> 9. gnus/message.el 174.0 MB
> 10. erc/erc.el 173.5 MB
>
>> I suspect we are still looking at a speed 3 run. How comp-speed was set
>> for the test?
>>
>> I ask that because for now speed 3 is written into the stone within
>> elisp-benchmarks.el, yeah... :/ and so has to be manually changed there.
>
> Now that's just sneaky 😛
Well... we can also just call it bad :)
> * Results
> ** master
>
> #+TBLNAME: master
> | test | non-gc avg (s) | gc avg (s) | gcs avg | tot avg (s) | tot avg err (s) |
>
> |----------------+----------------+------------+---------+-------------+-----------------|
> | bubble-no-cons | 118.41 | 0.23 | 3 | 118.63 | 0.36 |
> | bubble | 46.29 | 29.34 | 388 | 75.63 | 0.36 |
> | dhrystone | 74.82 | 0.00 | 0 | 74.82 | 0.34 |
> | fibn-rec | 59.50 | 0.00 | 0 | 59.50 | 0.28 |
> | fibn-tc | 147.39 | 96.86 | 1179 | 244.26 | 2.70 |
> | fibn | 320.33 | 276.23 | 3442 | 596.56 | 5.31 |
> | flet | 112.02 | 0.00 | 0 | 112.02 | 0.29 |
> | inclist | 166.30 | 0.00 | 0 | 166.30 | 0.67 |
> | listlen-tc | 76.97 | 0.00 | 0 | 76.97 | 0.53 |
> | map-closure | 81.86 | 0.00 | 0 | 81.86 | 0.31 |
> | nbody | 28.62 | 98.53 | 1303 | 127.14 | 0.21 |
> | pcase | 110.63 | 0.00 | 0 | 110.63 | 0.29 |
> | pidigits | 61.78 | 39.46 | 469 | 101.24 | 0.70 |
> |----------------+----------------+------------+---------+-------------+-----------------|
> | total | 1404.92 | 540.65 | 6786 | 1945.57 | 6.13 |
> ** feature/native-comp
>
> #+TBLNAME: feature/native-comp
> | test | non-gc avg (s) | gc avg (s) | gcs avg | tot avg (s) | tot avg err (s) |
>
> |----------------+----------------+------------+---------+-------------+-----------------|
> | bubble-no-cons | 30.12 | 0.16 | 2 | 30.28 | 0.04 |
> | bubble | 18.05 | 27.91 | 352 | 45.96 | 0.33 |
> | dhrystone | 34.26 | 0.00 | 0 | 34.26 | 0.05 |
> | fibn-rec | 26.92 | 0.00 | 0 | 26.92 | 0.03 |
> | fibn-tc | 98.66 | 93.89 | 1096 | 192.55 | 1.66 |
> | fibn | 253.19 | 269.12 | 3192 | 522.31 | 2.17 |
> | flet | 22.92 | 0.00 | 0 | 22.92 | 0.04 |
> | inclist | 11.76 | 0.00 | 0 | 11.76 | 0.16 |
> | listlen-tc | 21.44 | 0.00 | 0 | 21.44 | 0.05 |
> | map-closure | 80.57 | 0.00 | 0 | 80.57 | 0.03 |
> | nbody | 15.62 | 95.66 | 1212 | 111.28 | 0.10 |
> | pcase | 17.64 | 0.00 | 0 | 17.64 | 0.03 |
> | pidigits | 59.82 | 38.86 | 436 | 98.68 | 0.39 |
> |----------------+----------------+------------+---------+-------------+-----------------|
> | total | 690.98 | 525.59 | 6291 | 1216.57 | 2.79 |
> ** ratio
> | test | non-gc avg (s) | gc avg (s) | gcs avg | tot avg (s) |
> |----------------+----------------+------------+---------+-------------|
> | bubble-no-cons | 3.92 | 1.44 | 1.5 | 3.93 |
> | bubble | 2.56 | 1.05 | 1.1 | 1.64 |
> | dhrystone | 2.18 | | | 2.18 |
> | fibn-rec | 2.21 | | | 2.21 |
> | fibn-tc | 1.49 | 1.03 | 1.07 | 1.26 |
> | fibn | 1.26 | 1.03 | 1.08 | 1.14 |
> | flet | 4.89 | | | 4.89 |
> | inclist | 14.1 | | | 14.1 |
> | listlen-tc | 3.6 | | | 3.6 |
> | map-closure | 1.02 | | | 1.02 |
> | nbody | 1.83 | 1.03 | 1.07 | 1.14 |
> | pcase | 6.31 | | | 6.31 |
> | pidigits | 1.03 | 1.02 | 1.08 | 1.02 |
> |----------------+----------------+------------+---------+-------------|
> | total | 2.03 | 1.03 | 1.08 | 1.6 |
>
> #+TBLFM: @2$2..@>$> = if (remote(feature/native-comp,@@#$$#)!=0, remote(master,@@#$$#)/remote(feature/native-comp,@@#$$#), string("")); p3
That's not bad for speed 2, GC and funcall are eating part of the perf,
probably with bigger function bodies we would see more delta.
>
> Conclusion: I'm closing this report! Again, thank you for your efforts.
>
> (And thank you for this opportunity to learn about Org spreadsheets 😉)
Thanks for your inputs!
Andrea
--
akrl@sdf.org
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2020-06-14 21:45 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-05-11 20:47 bug#41194: 28.0.50; [feature/native-comp] fibn benchmark exhausts memory Kévin Le Gouguec
2020-06-09 22:24 ` Andrea Corallo
2020-06-10 7:55 ` Kévin Le Gouguec
2020-06-13 15:00 ` Andrea Corallo
2020-06-13 18:17 ` Kévin Le Gouguec
2020-06-14 15:19 ` Kévin Le Gouguec
2020-06-14 16:19 ` Andrea Corallo
2020-06-14 20:47 ` Kévin Le Gouguec
2020-06-14 21:45 ` Andrea Corallo
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.