Welcome to the main channel on the development of MoarVM, a virtual machine for NQP and Rakudo (moarvm.org). This channel is being logged for historical purposes.
Set by lizmat on 24 May 2021.
00:03 quotable6 joined, greppable6 joined, committable6 joined 00:04 shareable6 joined 00:05 linkable6 joined, nativecallable6 joined, tellable6 joined, coverable6 joined 00:16 tealecloud left 01:43 moon-child left 01:44 moon-child joined 02:03 unicodable6 joined, statisfiable6 joined 02:04 squashable6 joined 02:05 reportable6 joined
japhb How solid is MoarVM cross-compile support? I see some bits in Configure.pl for it, but I don't know how recently that's been run through its paces ... 02:06
02:13 squashable6 left 02:14 squashable6 joined
japhb Also, is anyone (lizmat perhaps?) building on MacOS on Apple M1? 02:16
03:14 evalable6 left, linkable6 left 03:18 psydroid left 03:23 psydroid joined 03:27 ggoebel left 03:28 squashable6 left 04:16 evalable6 joined 04:30 squashable6 joined
timo hm, how do you CI cross-compilation, i wonder. i would say qemu but that's slooooow 05:09
05:17 linkable6 joined 06:02 reportable6 left 06:04 reportable6 joined
japhb Requesting early feedback, to take advantage of timezone differences: gist.github.com/japhb/0c2108affd31...b3eb6a7947 06:47
PLEASE NOTE: This is not anywhere *close* to ready, and is missing a lot of detail, examples, resource links, etc. I already know this. :-)
I'm just trying to determine if there are major porting risks or task categories that I'm missing. 06:48
Nicholas good *, japhb 07:18
I've got shell acces to an M1 Mac - everything builds quite boringly there.
japhb \o/ 07:19
That's very good news.
Nicholas: Do you happen to know if the C ABI is different under MacOS/AArch64 than Linux/AAarch64? 07:20
moon-child I believe it is 07:21
at least: varargs are all passed on the stack, and you are not allowed to use x18
there may be more differences
japhb Dang, that's annoying. OK, thanks for the info, moon-child.
moon-child 'Because x64 (and x86 before it) are among the most alignment-lax architectures in common use' no need to sound so derogatory--unaligned accesses have proven themselves well worth the silicon :) 07:23
(that said I think modern arm is also fairly tolerant of unaligned accesses in most modes) 07:24
japhb moon-child: Oh hmmm, I hadn't meant that as derogatory, more just a simple statement of fact. 07:25
Nicholas Is "alignment tolerant" better? 07:26
moon-child was mostly just poking. Hence the :) :)
japhb How about "Because x64 (and x86 before it) have been the primary 07:27
MoarVM development platform so far and are very alignment-tolerant,"
moon-child: It was a totally valid concern. :-) 07:28
Nicholas you use "forgiving" later to describe the x86 memory model. I think that that's probably a better word than "lax" or "tolerant" 07:29
japhb Nicholas: šŸ‘ 07:33
07:33 patrickb joined
patrickb japhb: I also own an M1 Mac. It's currently only used for building the compiled rakudo releases. I intend to set it up to allow remote ssh access, but simply didn't manage to do so yet. 07:34
japhb patrickb: Ah, good to know, thank you
Oh, forgot to respond to one of your comments, moon-child -- It is possible that the most recent AArch64 variants have relaxed some of the alignment strictness (wouldn't surprise me, actually -- as you point out, it can be a good use of silicon), but I'm taking the view that supporting all AArch64 variants back to the original ARMv8-A introduction (but nothing that isn't a superset thereof) is a good place 07:38
to draw a line that captures most of the ARM systems we would reasonably want to JIT today.
moon-child it appears armv8-a supports unaligned accesses too. At least, stackoverflow.com/questions/457145...on-aarch64 says it does 07:41
(that said taking a longer view towards wider architecture support, it might be good to figure out how to support stricter alignment requirements. Gcc famously generates bad code when alignment requirements are high) 07:42
japhb (If anyone thinks ARMv8-A is the wrong line, please do say so -- but I figure it's way easier for us to say "We support all AArch64 variants" than confuse users with "Well, if you're running ARMv8.5-A, ARMv8.6-A, or ARMv9-A then yes, but ...") 07:43
Interesting regarding the unaligned access. Some of the instruction encodings seem to directly add trailing 0 bits based on the operand size (so it's literally not possible with those encodings to refer to unaligned data), but perhaps experienced ARM coders know how to avoid those instruction encodings efficiently. I'll have to look more into that. 07:46
patrickb japhb: I'd like to know how much work it would be to get rid of the lego JIT. I think the intention has long been to get rid of it. If it's not that far off, it might make sense to tackle that first. 07:47
japhb patrickb: Right now the expression jit depends on some of the infrastructural parts of the lego JIT (as well as being a fallback in case expression JIT cannot handle some ops). That infrastructure part probably could be disentangled first. 07:51
.tell brrt Saw your comment on the gist, thank you, will reply in the morning as my brain is currently fading a bit.
tellable6 japhb, I'll pass your message to brrt
Nicholas the only thing that I have access to that builds MoarVM that is really grumpy about alignment is sparc64 07:57
ppc64 can cope with 64 bit loads (at least at) 32 bit alignment
so if there are 64 bit ARMs that aren't happy about 64 bit integer loads (more) off-alignment than we currently do, I've not hit them 07:58
I'm not familiar with the 64 bit ARM instruction set, or what alignment you start having
moon-child why do you have a sparc?
Nicholas but even x864_64 gets grumpy (SIGsomething) if you attempt to go "off alignment" with SIMD instructions. And if you compiler vectorised a loop, working sloppy code can go boom 07:59
japhb 16-byte alignment (what x86 used to call "paragraph alignment") for the AArch64 stack was the biggest surprise I've come across so far.
Nicholas I don't. I have access to one. It's cfarm.tetaneutral.net/machines/list/
japhb OK, it's past 1 AM here; I'm going to wander off to the land of nod for now, but will backlog any further comments/suggestions when I'm back online. 08:02
Goodnight, y'all! 08:03
&
08:10 tealecloud joined 08:47 Xliff left 08:51 patrickb left 09:08 ggoebel joined 09:12 patrickb joined 09:18 patrickb left, patrickb joined 09:51 ggoebel left
jnthnwrthngtn moarning o/ 09:54
Nicholas \o
10:07 linkable6 left 10:09 linkable6 joined 10:14 patrickz joined 10:15 patrickb left 10:22 lizmat_ joined, Geth_ joined, RakuIRCLogger joined 10:23 TempIRCLogger joined 10:24 RakuIRCLogger_ left, Geth joined, TempIRCLogger__ left, lizmat left, Geth left, Geth_ left 10:25 Geth joined, lizmat_ left, lizmat joined
jnthnwrthngtn Goodness, the NQP build is master than the MoarVM build with Visual C++ / nmake... 10:31
uh, faster 10:32
lizmat
.oO( time to drop C as an implementation language :-)
10:34
jnthnwrthngtn :D 10:38
Nicholas you can fix this with ASAN 10:39
jnthnwrthngtn Anyways, the build succeeded, which is good but also bad because I failed to repro what [Coke]++ is observing and have few guesses left of what it could be 10:40
dogbert17 jnthnwrthngtn: didn't [Coke]++ mention that some nativecall tests failed on windows? 10:43
jnthnwrthngtn Only with a debug build 10:45
dogbert17 ah
10:46 sena_kun joined
jnthnwrthngtn Hm, wonder if the debug server problem I'm looking at is a regression everywhere or just a Windows-specific issue... 10:46
sena_kun jnthnwrthngtn, you mean it not connecting to the socket or something new? 10:47
jnthnwrthngtn It seems to connect but doesn't hit a breakpoint; on Linux it does hit it, but then hangs when I resume. 10:49
sena_kun ouch
good luck
jnthnwrthngtn Pretty sure that's a regression
It's the simplest possible example
ah, it's backslash vs forward slash confusion on Windows 11:10
Geth MoarVM/debug-server-fixes: ab2a3f01c2 | (Jonathan Worthington)++ | src/debug/debugserver.c
Normalize filenames for debug server

So that we can avoid missing breakpoints due to / vs. \ on Windows.
11:22
MoarVM/debug-server-fixes: 137ca8343e | (Jonathan Worthington)++ | src/instrument/line_coverage.c
Produce one breakpoint instruction per line

Some lines span multiple basic blocks, which would result in us placing multiple breakpoint instructions. This could lead to the debugger stopping many times on the same line.
11:36
12:02 reportable6 left 12:04 reportable6 joined 12:12 cognominal joined 13:04 tealecloud left
Geth MoarVM/debug-server-fixes: b5b276ffd1 | (Jonathan Worthington)++ | 2 files
Fix issues with resuming suspended threads

  * The case of being unable to GC and with an outstanding suspend
   request was not handled
  * A mutex was not acquired while using a condition variable, leading to
   lost wakeups
  * For efficiency, we also only broadcast the condition variable after
   going through all of the threads to resume them
13:22
nine Looksblight a mighty yak shaving trip 13:37
Looks like
[Coke] jnthnwrthngtn: thanks for trying to repro my windows issue;. 13:43
patrickz jnthnwrthngtn: Do these debugger fixes fix bugs new-disp brought or were they potentially present in 2021.09 as well? 13:46
Geth MoarVM/debug-server-fixes: 8f7d970aed | (Jonathan Worthington)++ | src/gc/orchestrate.c
Only produce debugger debugging output when asked
13:47
jnthnwrthngtn patrickz: These all seem to go back quite a long way
nine: The yak is "argh, we have too many bug reports about the Comma debugger", pretty much. 13:48
nine Which means that it gets used :) 13:49
patrickz OK. I haven't had much luck using the debugger until now. Seeing those fixes makes me happy. jnthnwrthngtn++ 13:50
13:52 brrt joined
Nicholas good *, brrt 13:52
patrickz o/
Nicholas brrt: I was wrong. "JIT all the things" is so last week. it's now "dispatch all the things" 13:53
brrt good * Nicholas
tellable6 2021-10-06T07:51:35Z #moarvm <japhb> brrt Saw your comment on the gist, thank you, will reply in the morning as my brain is currently fading a bit.
brrt ah
that's good
MasterDuke brrt: have you seen my recent jit-related PRs and the problems i've been having on windows? 13:54
brrt I have not 13:56
which are the ones?
though I'm vaguely aware
MasterDuke github.com/MoarVM/MoarVM/pull/1555 currently is ok 13:58
but github.com/MoarVM/MoarVM/pull/1552 has some extra ops that fail on windows 13:59
scsetobj, scsetcode, getcomp, and setdebugtypename
Geth MoarVM/debug-server-fixes: 746175bc9a | (Jonathan Worthington)++ | src/debug/debugserver.c
Fix regression in stepping
14:28
MoarVM/debug-server-fixes: cedebdbf7f | (Jonathan Worthington)++ | src/debug/debugserver.c
A little more debug output for stepping
MoarVM: jnthn++ created pull request #1559:
Assorted debug server fixes
14:33
brrt I'll have a look 14:41
[Coke] so I rebooted this morning... and I think things are now failing *differently* 15:06
doing a re-rebuild with VERBOSE_BUILD to verify
15:33 brrt left 15:34 brrt joined
Nicholas [Coke]: if you pour coffee into the computer do your problems go away? Or do you just get a whole new set of different problems? :-) 15:36
jnthnwrthngtn I've only tried this experiment with a keyboard, but it didn't make much difference. 15:40
nine Oh the coffee is supposed to go into the computer?! I've always... well better not say where I put it 15:41
timo jnthnwrthngtn: i'm having trouble coming up with a sensible solution to the argument spesh being aborted when a NativeRef is passed and it desires something that boxes an int, unless we teach spesh that Int*Ref can in fact box int 15:45
[Coke] gets past where it was. now dying on instal with: 15:46
C:\sandbox\rakudo\rakudo-m.exe" --ll-exception "C:\sandbox\rakudo\tools\build\install-core-dist.raku" "C:\raku\share\perl6\core" 15:47
... which seems super familar. :|
gist.github.com/coke/2aa9eaa797004...5a10c18893
(this is with rakudo HEAD and recommended nqp/moarvm) 15:48
jnthnwrthngtn `nmake install` did succeed for me (otherwise I'd not have had a working install to debug the debugger) 15:49
And I was doing it with a 64-bit environment so there's JIT 15:50
[Coke] it bugs me that a reboot fixed the last issue. :) 15:51
nine Ah, the error: no error again? 15:52
[Coke]: have you tried with RAKUDO_MODULE_DEBUG=1?
[Coke] nine - updated gist with that output 15:54
C:\sandbox\rakudo>set RAKUDO_MODULE_DEBUG=1 15:55
C:\sandbox\rakudo>C:\sandbox\rakudo\rakudo-m.exe --ll-exception "C:\sandbox\rakudo\tools\build\install-core-dist.raku" "C:\raku\share\perl6\core" 1 RMD: R
equested for settings CORE.d
1 RMD: Loading settings CORE.d 1 RMD: Loading bytecod
e from CORE.d.setting.moarvm 1 RMD: going to load Perl6::BOOTSTRAP::v6d 1 RMD: Requested for set
tings CORE.c 1 RMD: Loading settings CORE.c
1 RMD: Loading bytecode from CORE.c.setting.moarvm
1 RMD: going to load Perl6::BOOTSTRAP::v6c 1 RMD: Settings
CORE.c loaded
1 RMD: Settings CORE.d loaded 1 RMD: Re
quested for settings CORE.d 1 RMD: Attempting 'lib' as a pragma 1 RMD: Successfully handled 'lib' as a pragma 1 RMD: Attempting 'CompUn
it::Repository::Staging' as a pragma 1 RMD: '
CompUnit::Repository::Staging' is not a valid pragma 1 RM
D: Attempting to load 'CompUnit::Repository::Staging' 1 RMD: Late loading 'CompUnit::Repository::Staging' 1 RMD:
try-load 33A52796DB3EBB40BEF94B7696A1B0AB7A29B5C5: C:\sandbox\rakudo\lib\CompUnit\Repository\Staging.rakumod 1 RMD: Trying to load 33A52
796DB3EBB40BEF94B7696A1B0AB7A29B5C5 from C:\sandbox\rakudo\lib\.precomp 1 RMD: Trying to loa
d 33A52796DB3EBB40BEF94B7696A1B0AB7A29B5C5.repo-id from C:\sandbox\rakudo\lib\.precomp 1 RMD: Loading prec
ompiled C:\sandbox\rakudo\lib\.precomp\77F46E13F3D1DF44C7F80A37C6EF2AAED6FADE90\33\33A52796DB3EBB40BEF94B7696A1B0AB7A29B5C5 1 RMD: Requested for settin
gs CORE.d 1 RMD: Performing imports for 'CompUnit::Repository::Staging' 1 RMD: Imports for 'CompUnit::Repository::Staging' done 1 RMD: Requested for settings CORE.d 1 RMD: Precompiling C:\r 15:56
aku\share\perl6\core\sources\10E86A71646D649AE0856ACE1737E1FFACC669D6 into C:\raku\share\perl6\core\precomp\77F46E13F3D1DF44C7F80A37C6EF2AAED6FADE90\10\10E86A71646D649AE0856ACE1737E1FFACC669D6.bc (--ll-exception )
2 RMD: Requested for settings CORE.d 2 RMD: Loading settings CORE.d 2 RMD: Loading bytecode from CORE.d.setting.moarvm 2 RMD: going to load Pe
rl6::BOOTSTRAP::v6d 2 RMD: Requested for settings CORE.c 2 RMD: Loading se
ttings CORE.c 2 RMD: Loading bytecode from CORE.c.setting.moarvm 2 RMD: going to load Perl6::BOOTSTRAP::v6c 2 RMD: Settings CORE.c loaded 2 RMD: Settings CORE.d loaded 2 RMD: Attempting 'nqp' as
a pragma 2 RMD: Successfully handled 'nqp' as a pragma 1 RMD: Precomp
iled C:\raku\share\perl6\core\sources\10E86A71646D649AE0856ACE1737E1FFACC669D6 into C:\raku\share\perl6\core\precomp\77F46E13F3D1DF44C7F80A37C6EF2AAED6FADE90\10\10E86A71646D649AE0856ACE1737E1FFACC669D6.bc 1 RMD: Writing dependencies and byte cod
e to C:\raku\share\perl6\core\precomp\77F46E13F3D1DF44C7F80A37C6EF2AAED6FADE90\10\10E86A71646D649AE0856ACE1737E1FFACC669D6.tmp for source checksum: 730C935463B25D3071F7BF6251821D9504B56F99
1 RMD: Precompiling C:\raku\share\perl6\core\sources\70EBDA25F44EBFF8734F739F5779D64914083409 into C:\raku\share\perl6\core\precomp\77F46E13F3D1DF44C7F80A37C6EF2AAED6FADE90\70\70EBDA25F44EBFF8734F739F5779D64914083409.bc (--ll-exception ) 2 RMD: Requested for settings CORE.d 2 RMD: Loading settings CORE.d 2 RMD: Loading bytecode from CORE.d.setting.moarvm 2 RMD: goin
g to load Perl6::BOOTSTRAP::v6d 2 RMD: Requested for settings CORE.c 2 RMD: Loading settings CORE.c 2 RMD: Loading bytecode from CORE.c.setting.moarvm 2 RMD: going to load Perl6::BOOTSTRAP::v6c 2 RMD: Settings CORE.c load
ed 2 RMD: Settings CORE.d loaded 1 RMD: Precompi
led C:\raku\share\perl6\core\sources\70EBDA25F44EBFF8734F739F5779D64914083409 into C:\raku\share\perl6\core\precomp\77F46E13F3D1DF44C7F80A37C6EF2AAED6FADE90\70\70EBDA25F44EBFF8734F739F5779D64914083409.bc 1 RMD: Writing de
pendencies and byte code to C:\raku\share\perl6\core\precomp\77F46E13F3D1DF44C7F80A37C6EF2AAED6FADE90\70\70EBDA25F44EBFF8734F739F5779D64914083409.tmp for source checksum: 708B4F48873D9AA1D048760B4B487CD8C7427E00 1 RMD: Precompiling C:\raku\share\perl6\core\sourc
es\09AD0895983003F8BD0D4FB6C3B0212C822A7FE8 into C:\raku\share\perl6\core\precomp\77F46E13F3D1DF44C7F80A37C6EF2AAED6FADE90\09\09AD0895983003F8BD0D4FB6C3B0212C822A7FE8.bc (--ll-exception ) 2 RMD: Requested for settings CORE.d 2 RMD: Loading s
ettings CORE.d 2 RMD: Loading by
tecode from CORE.d.setting.moarvm 2 RMD: going to load Perl6::BOOTSTRAP::v6d 2 RMD: Requested for settings CORE.c 2 RMD: Loading settings CORE
.c 2 RMD: Loading bytecode from CORE.c.setting.moarvm 2 RMD: 15:57
going to load Perl6::BOOTSTRAP::v6c 2 RMD: Setti
ngs CORE.c loaded 2 RMD: Settings CORE.d loaded 2 RMD: Attempting
'nqp' as a pragma 2 RMD: Successfully handled 'nqp' as a pragma 1 RMD: Pre
compiling C:\raku\share\perl6\core\sources\09AD0895983003F8BD0D4FB6C3B0212C822A7FE8 failed: 3221225512
at SETTING::src/core.c/Exception.pm6:62 (C:\sandbox\rakudo\blib/CORE.c.setting.moarvm:throw) from SETTING::src/core.c/control.pm6:255
(C:\sandbox\rakudo\blib/CORE.c.setting.moarvm:die) from
SETTING::src/core.c/CompUnit/PrecompilationRepository.pm6:456 (C:\sandbox\rakudo\blib/CORE.c.setting.moarvm:precompile) from SETTING::src/core.c/CompUnit/Repository/Installation.pm6:301 (C:\sandbox\ra
kudo\blib/CORE.c.setting.moarvm:) from SETTING::src/core.c/CompUnit/Re
pository/Installation.pm6:291 (C:\sandbox\rakudo\blib/CORE.c.setting.moarvm:)
15:57 brrt left
[Coke] from SETTING::src/core.c/CompUnit/Repository/Installation.pm6:274 (C:\sandbox\rakudo\blib/CORE.c.setting.moarvm:) from SETTING::src/core.c/Lock.pm6:30 (C:\sandbox\ra 15:57
kudo\blib/CORE.c.setting.moarvm:protect) from
SETTING::src/core.c/CompUnit/Repository/Installation.pm6:177 (C:\sandbox\rakudo\blib/CORE.c.setting.moarvm:install) from C:\sandbox\raku
do\tools\build\install-core-dist.raku:46 (<ephemeral file>:<unit>)
from C:\sandbox\rakudo\tools\build\install-core-dist.raku:1 (<ephemeral file>:<unit-outer>) from gen\moar\stage
2\NQPHLL.nqp:1943 (C:\raku\share\nqp\lib/NQPHLL.moarvm:eval) from gen\moar\stage2\
NQPHLL.nqp:2148 (C:\raku\share\nqp\lib/NQPHLL.moarvm:evalfiles) from ge
n\moar\stage2\NQPHLL.nqp:2108 (C:\raku\share\nqp\lib/NQPHLL.moarvm:command_eval) from gen\moar\Compiler.nqp:111 (C:\sandb
ox\rakudo\blib/Perl6/Compiler.moarvm:command_eval) from gen\moar\stage2\NQPHLL.nqp:2033 (C:\raku\share\nqp\lib/NQPHLL.moarvm:command_line) from gen\moar\rakudo.nqp:127 (C:\sandbox\rakudo\rakudo.moarvm:MAIN) from gen\moar\rakudo.nqp:1 (C:\sandbox\rakudo\rakudo.moarvm:<mainline>) from
<unknown>:1 (C:\sandbox\rakudo\rakudo.moarvm:<main>)
OOF. sorry
was trying to paste the one interesting line. :| 15:58
nine The failing compilation is of MoarVM::Profiler 16:00
[Coke]: can you try something like ./rakudo-m lib/MoarVM/Profiler.rakumod? Maybe that will give us some more info 16:01
[Coke] seems to complete successfully 16:04
nine and ./rakudo-m -Ilib -e 'use MoarVM::Profiler'?
[Coke] precompile failed, error while compile -e 16:07
nine: gist.github.com/coke/7966426a43606...826948bba1 16:10
timo what if you just rakudo-m -Ilib lib/MoarVM/Profiler.rakumod?
nine What could that 3221225512 be? Seems to be always the same number 16:11
It's 0xC0000028 in hex.
[Coke] timo: that seems to complete 16:12
nine Ooooh: 16:14
nqp/MoarVM/3rdparty/libuv/src/win/winapi.h
836:# define STATUS_BAD_STACK ((NTSTATUS) 0xC0000028L)
Looking for the hexadecimal representation of that number was a really long shot but when you have nothing else at hand... :) 16:15
Now just grep through the OS source code to see in what situations this error gets reported 16:16
jnthnwrthngtn Hmm. bytepointer.com/resources/pietrek_...32_seh.htm 16:19
Does it go away with MVM_JIT_DISABLE=1?
Or at least maybe change? 16:22
[Coke] jnthnwrthngtn: yes! that gets .\rakudo-m -Ilib -e "use MoarVM::Profiler" to complete 16:28
Sorry. I should be trying that every time I have a weird error on win
(offline for a bit)
MasterDuke jnthnwrthngtn: question from #raku, "Is there a way to re-dispatch a method call to a role that the given class does? The method resolution order only includes parent classes, but not roles, so stuff like ā€˜callsameā€™ doesnā€™t work. Is anything like it available for roles, too?" 16:33
`RoleName::method-name()` gives `Could not find symbol '&method-name' in 'RoleName'`
jnthnwrthngtn self.RoleName::method-name() 16:34
It's correct that callsame doesn't visit them. Flattening composition means that a method in the class *replaces* the one that would be provided by the role.
MasterDuke ha, was just figured out over there
i didn't know it had to have `self.` before 16:36
jnthnwrthngtn Yes, otherwise it's not a method call. 16:41
MasterDuke ha, right 16:45
17:05 discord-raku-bot left
[Coke] back 17:06
17:06 discord-raku-bot joined
[Coke] guesses he can set MVM_JIT_DISABLE to get a working raku so he can run the scripts he needs for work, anyway. 17:06
17:14 patrickz left 17:17 patrickb joined
Geth MoarVM/debug-server-fixes: 86d0a05025 | (Jonathan Worthington)++ | src/debug/debugserver.c
Avoid duplicate response for suspend/resume all

The functions that do the suspension or resumption of all threads already communicate success or failure, so we don't need to do it from the message dispatch too.
17:25
lizmat And yet another Rakudo Weekly News hits the Net: rakudoweekly.blog/2021/10/06/2021-40-its-here/ 17:37
jnthnwrthngtn lizmat++ # already read it, got advance notification because of the link to my 6guts post :) 17:38
lizmat :-)
jnthnwrthngtn bbl o/ 17:47
17:47 sena_kun left 18:02 reportable6 left 18:18 [Coke]_ joined 18:20 [Coke] left
nine Turns out, the segfaults in nativcall callback tests were not actually caused by the missing handling but by the NativeCall repr's copy_to neglecting to copy arg_info (and sym_name). Why this only occurs now is anyone's guess 18:45
Next failure mode: moar: src/core/callstack.c:425: handle_end_of_dispatch_record: Assertion `(char *)disp_record == (char *)tc->stack_top' failed. 18:46
MasterDuke maybe the copy_to problem is the cause of the failed nativecall tests on windows hat [Coke]_ saw? 18:48
18:57 brrt joined
brrt .tell MasterDuke I'm not seeing anything immediately obvious 19:00
tellable6 brrt, I'll pass your message to MasterDuke
MasterDuke hm, thanks for looking 19:01
jnthnwrthngtn nine: Is it in a callback test? It may be that the nested runloop messes stuff up 19:03
dinner &
Nicholas botherit - I wanted to ask a teasing question
in the new "disp all the things" paradigm, what was next after nativecall? Was it some thoughts about type coercions? 19:04
19:22 brrt left
nine jnthnwrthngtn: yes, it is 19:28
jnthnwrthngtn: and yes, it does 19:35
Just restoring tc->stack_top to its previous state after the nested runloop gets me to the end of the test file with just 3 out of 11 failed. But of course that's a rather crude way. 19:40
20:03 reportable6 joined
jnthnwrthngtn nine: Eventually we should probably have a callstack record type for "edge of a nested runloop" 20:31
(However, that may not make sense until the larger restructuring of call/return I'm plotting) 20:32
20:32 [Coke]_ is now known as [Coke]
jnthnwrthngtn Nicholas: Integrating the specialization selection with dispatch programs is probably one more useful unification. Not quite sure how to achieve it yet. 20:33
20:44 patrickb left
nine jnthnwrthngtn: so do you consider restoring tc->stack_top to be a valid workaround till that restructuring? 20:45
jnthnwrthngtn nine: If it suffices, I think so, yes
I think it's relatively unlikely callbacks would work at all if this was the problem 20:46
[Coke] with JIT disabled I was able to install raku. But then installing zef dies. 20:54
ah. also getting lots of 'nmake test' failures, will post. 20:56
I do apologize because I feel like 50% of these are "will did something dumb." :)
21:44 linkable6 left, evalable6 left, linkable6 joined 21:45 evalable6 joined
Geth MoarVM: 627c92ccb0 | (Jonathan Worthington)++ | 3 files
Add [mono|poly|mega]morphic site counts in profile

Including which megamorphic ones ended up blowing the cache size limit, indicating there was no megamorphic handler installed to cope with the situation.
22:24
timo oh, cool 22:25
jnthnwrthngtn Wonder how best to do this in the SQL 22:30
timo can just add a new table that has the values indexed to the id from the call table 22:31
the nqp side of the code can check if any node has the mono/poly/etc keys and emit the table definition a little later or whatever 22:32
oh, wait, this isn't about call, this is about routine, isn't it 22:33
jnthnwrthngtn oh hmm...yes, it's about routine, but I've emitted it per call node, which is...
timo not optimal, eah
jnthnwrthngtn grmbl
timo shouldn't be difficult to move to the right spot
should go in the "get routine id" function that creates the routine hash if necessary 22:34
jnthnwrthngtn Is there a separate notion of routines vs calls in the data structure MoarVM builds up?
timo oh 22:35
i must have confused it with the implementation of the heap dump
every call has the name and line number and filename in the node as strings and ints 22:38
jnthnwrthngtn Yup
Though it seems there is a unique ID per static frame too
So I can clear it up into a per-routine thing on the NQP side and have a separate table without the repetition. 22:39
timo OTOH since the contents of a cache change over time, there is a little bit of a reason to have it in the call graph
jnthnwrthngtn But I don't log any info 22:40
I add the end state of the inline caches
timo ah, OK
jnthnwrthngtn But yeah, this is...rather inefficient.
timo time for a full rewrite
jnthnwrthngtn Although doing better probably means a larger reorganization.
timo i also notice we box_s the filenames over and over, so that's some memory definitely wasted there 22:41
but only RAM usage at the time you pull out the profile data
jnthnwrthngtn The profiler as it is today is mostly quite recognizable from the Conference Driven Development implementation I wrote years ago :) 22:42
timo that's because you did it good :D
jnthnwrthngtn I guess we have a decent amount of freedom if we want to tidy up, because the only thing that we absolutely cannot change without causing big problems is the SQL 22:44
Which is already sensible enough to have a separate routines table
MasterDuke when i started using raku (perl 6 at the time) i thought one of the coolest features was that it came with a profiler
timo having it output a html file that just gives you all the data is damn nice 22:45
22:45 linkable6 left, evalable6 left
jnthnwrthngtn While the `--profile` at the command line spitting out a HTML single page app only scales so far, it's delightfully easy to use 22:45
timo sadly, browsers don't like when html files go past a couple megabytes
jnthnwrthngtn I suspect we could get it to go a little further with a more compact representation. 22:46
MasterDuke i think it's really just the size of the json that's a problem, not of the page in total
22:46 evalable6 joined
jnthnwrthngtn For sure, though we can probably get it more compact too 22:47
MasterDuke wins all around
timo toss out key/value, replace it with arrays with fixed indices, for example
jnthnwrthngtn Things like this, yes
timo oh, can possibly gzip or whatever it before writing to the html file, then ungzip it on the fly in javascript
jnthnwrthngtn o.O
timo may have to base64 it in the middle tho 22:48
jnthnwrthngtn Oh, talking of that...about heap profiles: what is used to compress them, and what is its license?
MasterDuke probably even faster to stick a webasm zstd implementation in and use that
timo zstd, the library has a compatible license, i checked
a moment please
3 clause bsd 22:49
jnthnwrthngtn OK, so there'd be no problem with us having it as a 3rdparty/ dep to ensure it's present on systems that don't have a package for it?
timo that would be all right i think
MasterDuke the linux kernel is just about to upgrade their zstd implementation, it's something like 4 years out of date
jnthnwrthngtn I'm looking at Comma heap profile support and it's a bit annoying that many folks will have MoarVM versions that don't support version 3 of the heap profile (I think it's version 3) 22:50
timo do you think it's worth dynamically loading libzstd when it's first needed, so that moarvm's memory footprint doesn't increase much?
i would be in favor of making zstd available for all users
jnthnwrthngtn Is it such a big library? 22:51
Ah, maybe some big tables that drive compression?
timo libzstd.so.1.5.0 is 988K big on my system
jnthnwrthngtn Wowser, that's more than I'd expect
timo i don't think i have bloaty installed
jnthnwrthngtn Presumably any heap allocations can be delayed until it's initialized and we can do that lazily, and we can leave demand paging and memory mapping to keep the cost down 22:52
timo the dynamic loader is pretty fast, that's true 22:53
MasterDuke timo: gist.github.com/MasterDuke17/7a1aa...27f2bf922d
jnthnwrthngtn Well, if I understand that output correctly, not a bunch of big static tables then 22:54
timo [13] .text PROGBITS 00003ec0 003ec0 0dfbd8 00 AX 0 0 16
[15] .rodata PROGBITS 000e4000 0e4000 005745 00 A 0 0 32
[17] .eh_frame PROGBITS 000ea4d4 0ea4d4 009f24 00 A 0 0 4
these are the big sections
jnthnwrthngtn Yeah but 22:55
90.5% 975Ki 91.1% 975Ki .text
That dominates
timo oof.
jnthnwrthngtn And that's the machine code section, iiuc?
timo yeah
could potentially build a libzstd that can only compress not decompress
no clue how much that can save
jnthnwrthngtn I've no idea what eh_frame is, I figure rodata is where any of the tables I was imagining would be 22:56
timo exception handlers? 22:57
jnthnwrthngtn Oh...but it looks like it's in C? Or is it so a C++ program using it can throw over it? 22:58
At least if number of files is anything to go on, compress is heavier than decompress
MasterDuke github.com/facebook/zstd/blob/dev/...ING.md#c90 22:59
timo Languages
C 84.2%
C++ 6.4%
Shell 2.9%
Python 2.2%
Makefile 2.0%
CMake 0.7%
Other 1.6%
presumably a cpp compatible interface in the same .so file 23:00
jnthnwrthngtn ah, maybe there's a configure option to avoid that since we won't need it 23:01
For when we build it ourselves at least
timo there's also the zlib wrapper which lets you drop in zstd as replacement and switch back and forth with a define
no clue how much that contributes
the functionality to support and create pre-trained shared dictionaries may be useless to us as well 23:02
otherwise, static linking and dead code elimination could be an option 23:04
jnthnwrthngtn I guess the other view on this is that wider access to heap snapshots may well lead to more memory being saved than zstd costs :) 23:06
timo :D
MasterDuke there doesn't really appear to be any configuring options when building it (at least as far as leaving out features and such) 23:11
23:46 linkable6 joined