03:54 MasterDuke left 04:31 lucasb left 07:21 sena_kun joined 07:59 domidumont joined 08:08 Altai-man joined 08:11 sena_kun left 08:53 zakharyas joined 09:18 MasterDuke joined 10:01 zakharyas left
MasterDuke timotimo, et al.: think github.com/MoarVM/MoarVM/pull/1376 needs a visual (output) cleanup before merging? 10:11
10:14 zakharyas joined 10:58 brrt joined
brrt \o 10:58
nwc10 o/
two fun parts frmo that pyston blog post. One -- it is currently closed-source while we iron out our business model. 10:59
OK, going to be interesting to see how they plan to make money. And whether that plan can be re-used 11:00
and two - first time I've seen someone benchmark PyPy JIT warmup time.
Usually PyPy results are "ooh, it's nice and fast*" "* numbers are once the JIT warmed up" 11:01
but 85 seconds or 105 seconds are, um, 1.5 to 2 minutes
"your webserver takes over a minute to serve requests quickly after a restart" - bit annoying. 11:02
contrasts with all I read about JS JITs where they try really hard to start "as fast as possible with an interpreter" so that however long you run the code for, it's still faster with the (same tiers of) JIT than not 11:03
lizmat nwc10: mind you, on big server setups having a server at startup to be effectively useless for 2 minutes, may not be such a big issue 11:09
I think the bigger issue is how to have the JIT warmup *without* diverting traffic to it, and *that* traffic will be sloooow
so that's a bit of a catch-22
nwc10 yes. I guess you'd need to create infrastructure to send some requests to the warming up machine (too) and discard the results. Or just send itnernal "Fake" results. 11:11
It adds complexity
The more basic thing that I'd not realised was "PyPy is not a drop in replacement for many cases. Pyston aims to be"
do-able, but more complex. 11:12
lizmat yeah, and that becomes pretty messy pretty quickly
nwc10 and I'd never even realised this/thought about this until reading that blog post with its table
MasterDuke you may already have the infrastructure in place to send duplicate traffic to a subset of your machines to do testing. roll out a new version of your software and send a portion of the traffic and compare 11:18
brrt I think getting the infrastructure done for pypy 'warmup' in a server farm is probably a good scaling/architecture problem but for a large organization very solvable 11:26
for smaller ones, not so much 11:27
MasterDuke depends on how much smaller. AWS, etc. can do a lot of that kind of stuff for you (i.e., automatically/easily segmenting your machines for testing) 11:30
brrt true 11:46
nine Turns out, the biggest remaining issue causing unwanted dependencies was MoarVM's int cache - again. I've disabled it already but didn't know that spesh ops and JITed code will access the const_int_cache directly 11:49
int_const_cache rather 11:50
I wonder what the real solution will be there. That int const cache is a useful optimization but also rather invasive: 12:04
m: my $a = 1; my $b = 1; $a does role { method Str() { "foo" } }; $b.Str.say
camelia foo
lizmat yikes 12:07
but also: cool :-)
maybe a fromI_I is missing there ?
12:09 sena_kun joined
nine No, that's on purpose. The int const cache contains HLL objects for integers from -1 to 15 to speed up boxing of those (and avoid the memory and deserialization overhead) 12:09
To do that it's special cased in several places that would normally return new objects 12:10
nwc10 So, I was going to say "sort of feels like the object that the cache gives you needs a flag or soemthing saying 'if you try to "does" me you'll need to copy me first'" 12:11
12:11 Altai-man left
nwc10 and then I thought "oh, but if something else has a reference to the same object..." 12:11
and that gets me to "does the cache need to move into spesh?"
nine How would that change anything? 12:12
nwc10 I sort of assumed that spesh would know whether the object ever had "does" done to it.
but I figure that that doesn't work out either.
nine No, because with my $a = 1; my $b = 1; my $c = $a; $a does role { ... }; you'd want $c to carry the mixed into object but not $b 12:13
nwc10 really for `my $c = $a` ? Isn't that a value copy? ie `my $c := $a` is the problem? 12:14
and yes that was where I got to with the " I figure that that doesn't work out either" and I wasn't clear 12:15
12:15 Kaiepi left
nwc10 you need some level of escape analysis. Because if you want the cache, you have to know when to take the two "Different" objects and stop them actually being the same (and the same as the hidden needs-to-be-immutable in the cache) 12:16
nine No, that's confusingly still a reference copy. $c will have a different container (Scalar), but the value $a and $c contain is the same object.
That usually just isn't an issue since we rarely modify Int objects in place (mixing into being the exception), so you don't notice the reference copy 12:17
12:17 Kaiepi joined 12:19 Kaeipi joined 12:20 Kaiepi left
nine Makes me wonder how much we actually gain from that cache 12:28
12:34 brrt left 12:36 zakharyas left 12:40 Kaeipi left 12:50 Kaiepi joined
[Coke] might be worth an experiment to rip it out and see what happens to performance. 12:57
tellable6 2020-11-03T03:27:47Z #raku <melezhik> [Coke] - "why is there a sparrowdo reference in there?" Rakudist uses sparrowdo to run zef test on docker container, that is it
2020-11-03T03:30:11Z #raku <melezhik2> [Coke] as for the error mentioned, I see this "t enough positional arguments; needed at least 2" type of errors on and off for some Rakudist builds, I could even grep all the reports having the one, if it helps
MasterDuke well, a fully rigorous experiment of sticking a `return NULL` at the top of MVM_intcache_get didn't lead to any noticeable changes in two runs of compiling CORE.c 13:00
nine MasterDuke: that's not enough to disable the cache (as I've found out the hard way). You also need to change sp_fastbox_i_ic, sp_fastbox_bi_ic, sp_add_I, sp_sub_I, sp_mul_I and their JIT implementations 13:04
MasterDuke ah, fun 13:05
13:05 brrt joined
nine gist.github.com/niner/09d149b398fc...10b3938563 13:05
Btw. just a teaser to show why all this work is worth it: loading Inline::Perl5 (which consists of just 15 modules) from a cold precomp cache takes 11.5s on rakudo master vs. 8.6s with in-process-precompilation. Code bases consisting of lots of small modules will benefit all the more. 13:08
MasterDuke Xliff might book a ticket to europe just to kiss you 13:09
brrt you're saying the int cache isn't worth it always? hmm 13:10
nine brrt: well we are pretty good at creating objects fast. And the int cache requires branches in several ops. 13:11
MasterDuke after applying nine++'s patch, another rigorous experiment of compiling CORE.c twice seems like it might have ~0.5s slower parse times
lizmat and memory usage ?
MasterDuke didn't measure 13:12
gist.github.com/MasterDuke17/0ca3f...14e8c5437e has some hit info before i disabled it 13:13
that was from sticking a print right before github.com/MoarVM/MoarVM/blob/mast...ache.c#L52 13:14
brrt that does make sense actually
13:18 lucasb joined
MasterDuke another two runs with the patch + two without does seem to show a slowdown plus increased mem usage with intcache disabled 13:20
~20mb more 13:21
according to /usr/bin/time 13:22
nine So...now we know :) It's not much, but clearly measurable. I may be able to get around that by special casing in the serialization code, adding a flag, or something like that. Of course that won't solve the mixin issue though. 13:24
MasterDuke m: my $a = 1; my $b = Int.new(1); $a does role { method Str() { "foo" } }; $b.Str.say 13:29
camelia 1
MasterDuke ^^^ is 'cause Int.new uses fromI_I
13:44 zakharyas joined 13:48 zakharyas left
timotimo did you give the <span title=blah> thing a try yet? 13:52
MasterDuke timotimo: not yet. need to work around github.com/MasterDuke17/MoarVM/blo...rt.p6#L119 somehow 13:55
oh wait. where does the <span ...> go? 13:56
timotimo ah, does the lines array at that point already have the entirety of the output in it, so we can't just change it easily?
MasterDuke yeah
github.com/MasterDuke17/MoarVM/blo...ort.p6#L27
timotimo so the lines.push line wants changed i guess 13:57
MasterDuke guess i could do the escaping there, then add the span later if needed 13:59
timotimo at the moment we're pushing just the c, u, or i in there along with the line
MasterDuke c|u|i => line
timotimo like $_ => $line gets us the letter
yeah 14:00
we could do $_ => %covered-lines{...}{...}.keys => $line, or use an array, or whatever
MasterDuke but there isn't always a %covered-lines{...}{...} entry for each line 14:03
14:04 brrt left
timotimo then we'll use Any for example 14:06
14:08 zakharyas joined 15:01 zakharyas left 15:22 zakharyas joined
MasterDuke timotimo: what do you think of github.com/MoarVM/MoarVM/files/548...2.html.txt ? 15:48
timotimo i think i would like it to say how many the rest are, is that difficult with your current code? 15:51
timotimo checks
ah, not yet in the PR? 15:52
MasterDuke right 15:53
timotimo we can throw out the | from the string and turn the "covered from" text into a span of its own, then styling with css can let us differentiate it visually in more craetive ways 15:56
like border around, or different background colors, and such
16:08 Altai-man joined 16:10 sena_kun left, sxmx left 16:11 sxmx joined
MasterDuke github.com/MoarVM/MoarVM/files/548...e.html.txt 16:13
16:16 sxmx left 16:17 Altai-man left
MasterDuke timotimo: ^^^ just puts the number in the span text 16:17
16:17 sxmx joined, sena_kun joined
timotimo that's good 16:18
MasterDuke the code isn't particularly pretty 16:20
i don't know css. how about i push what i have and you pretty it up? 16:27
timotimo: github.com/MoarVM/MoarVM/pull/1376...f3df249447 is how it's done right now 16:40
17:05 Geth_ joined, Geth left
timotimo right 17:57
18:30 BinGOs left, domidumont left 18:43 bingos joined 18:46 bingos is now known as BinGOs 19:04 zakharyas left 19:38 brrt joined 20:08 MasterDuke left, Altai-man joined 20:11 sena_kun left 20:18 MasterDuke joined 20:34 japhb left 20:53 zakharyas joined 21:26 ChanServ left 21:32 ChanServ joined, tepper.freenode.net sets mode: +o ChanServ 21:42 dumarchie joined 21:43 MasterDuke left
dumarchie I tried to build Rakudo Star 2020.10 for Windows, but got the following error when compiling: 21:46
MVM_panic(1, "Debugserver: WSAStartup failed with error: %n", error); 21:47
21:47 vrurg left 21:48 vrurg joined
dumarchie Ah, never mind, that was just a compiler warning. 21:51
22:00 zakharyas left, raku-bridge joined
timotimo does it suggest what would be correct? i imagine the %n is what it's warning about? 22:05
dumarchie format '%n' expects argument of type 'int *', but argument 3 has type 'int' [-Wformat=] 22:10
I think it suggests %d would be correct 22:11
timotimo now why did i put a %n there 22:15
dumarchie Would you like a github issue with all the compiler warnings on Windows? There appear to be less than in the past. 22:16
timotimo maybe a gist first %) 22:17
22:23 sena_kun joined 22:24 Altai-man left
dumarchie Here you are: gist.github.com/dumarchie/e891f318...712ab2d751 22:27
22:34 brrt left
timotimo oof... 22:35
why that pthread stuff broke ... 22:37
did the configuration probe get it wrong? 22:38
dumarchie Not sure what you mean. 22:39
timotimo so the compilation failed?
dumarchie I'm not sure. It printed the following to the console: 22:40
gmake: *** [Makefile:679: src\debug\debugserver.o] Error 1
And then said: 22:41
Command failed (status 512): C:\Strawberry\perl\bin\perl.exe Configure.pl --cc=gcc --make=gmake --optimize --relocatable --prefix=C:\rakudo --make-install 22:42
Got to get some sleep now. I'll check in tomorrow. 22:45
22:46 dumarchie left 22:52 Altai-man joined 22:55 sena_kun left 23:06 japhb joined 23:09 sena_kun joined 23:11 Altai-man left 23:45 sena_kun left