github.com/moarvm/moarvm | IRC logs at colabti.org/irclogger/irclogger_logs/moarvm Set by AlexDaniel on 12 June 2018. |
|||
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
|