TimToady admits to a certain amount of design aphasia in the area of IO... | 00:01 | ||
Zoffix | Hmmm... Was stresstesting on this box all day and on this run t/spec/S32-io/IO-Socket-INET.t started taking ages. So I killed the stresstest, tried to run the file alone, it complained about adress in use. I killed the process using the address, run the file again, it got a bunch of failures, now after 10 minutes went back to that terminal, and the test passes normally :| | 00:02 | |
ugexe | its nice like how its nice push doesnt return boolean | ||
not that i really care strongly about this | |||
TimToady | with mkdir, it does fit a little more strongly into the category of "you really oughta be checking that the OS didn't fail you" | 00:04 | |
timotimo | so why not have it fail when it fails? | ||
Zoffix | ATM sub and method mkdirs work exactly the same, and IO::Path.mkdir return value is consistent with other... "making"... methods, like .link, .symlink: True on success; Failure on failure | ||
TimToady | with push, one kind of expects it to work till you run out of memory | ||
Zoffix | And all IO subs are same as methods, except for &chmod, &unlink, and &rmdir that do take a list of things to work on and return stuff that succeeded; the change for mkdir was mostly due to it taking a $mode arg, so the sig was: ($path, $mode) + ($mode, *@paths) | 00:06 | |
TimToady | well, that never bothered P5 :) | 00:07 | |
but showing failure by leaving things out of a list is not a great interface | |||
Zoffix reads perldoc -f mkdir | 00:08 | ||
TimToady | interspersing failures would just end up pushing failures into the @delete-me array for later | ||
Zoffix | Doesn't look like it can create multiple dirs at a time | ||
TimToady | I could be misremembering | ||
anyway, if zef is the only casualty (and that's a big "if"), I'm probably okay with a little more accountabiilty out of mkdir | 00:09 | ||
as in, encouraging people to assume it might return failure as easily as success | 00:10 | ||
not that Laziness is a bad thing, but maybe here's a spot to encourage a bit more Cleanliness | 00:11 | ||
mst | TimToady: it might not have bothered *you* | ||
I would suggest if we're going to default to 'works like perl5' then it should be 'works like the stuff perl5 devs use to avoid the core routines' | 00:12 | ||
TimToady | well, certainly Cleanliness is sort of an acquired skill for some of us :) | ||
mst | which probably means Path::Tiny atm | ||
yes, well, for me cleanliness isn't so much a skill at all as a thing my default configurations (strictures.pm etc.) enforce to save me from myself ;) | 00:13 | ||
TimToady also maintains a great deal of CPAN aphasia :) | |||
Zoffix | looks like samcns/uzu/lib/Uzu.pm6 is another causaulti | ||
TimToady | well, "" is an invalid(ish) filename, and the file "0" is no longer false, so if you just something that can evaluate to true, rather than True, a filename still works, though encourages the sort of shortcuts we see | 00:15 | |
Zoffix | maybe ugexe/Perl6-PathTools/lib/PathTools.pm6 too | ||
TimToady | and presumably they'd still catch the Failure when they try to delete it... | 00:16 | |
so I do think it would be okay to return the filename for True, at the expense of a bit of hobgoblinness | 00:17 | ||
Zoffix | OK, I'll do that | ||
TimToady | I'm also fine with return Failure when it ain't true :) | 00:18 | |
*ing | |||
Zoffix | ugexe: so leave it then. It'll unbreak once I make it return the filename again. Note: it'll be an IO::Path object tho | ||
TimToady | and we can talk about clamping down a bit more for 6.d, if there's a groundswell of support for that position :) | 00:19 | |
ugexe | too late! :P Its just cleanup code for tests anyway | ||
TimToady | I love it when everyone shoots past each other trying to be accomodating... :) | 00:20 | |
*accommo | |||
TimToady never could accomodate to the correct spelling of that word... | 00:21 | ||
Geth | nqp/uncurse: a44e6dedc5 | TimToady++ | src/QRegex/Cursor.nqp reduce old match object to a singleton Still can't get it quite down to a boolean, but at least we can avoid allocating every time MATCH is called. |
00:27 | |
rakudo/uncurse: 63e76d7afe | TimToady++ | 2 files reuse NQP's singleton "did match" type (though for the moment we allocate our own singleton) |
00:28 | ||
rakudo/uncurse: 13 commits pushed by MasterDuke17++, (Zoffix Znet)++, TimToady++ review: github.com/rakudo/rakudo/compare/6...fbf19d88da |
|||
rakudo/nom: d46e8df4cb | (Zoffix Znet)++ | src/core/IO/Pipe.pm [io grant] Add IO::Pipe .path and .IO methods That return an IO::Path type object. This fixes LTA error of .IO/.path crashing, since the inherited methods from IO::Handle try to instantiate an IO::Path from an empty string. |
00:34 | ||
roast: 637500da24 | (Zoffix Znet)++ | S32-io/pipe.t [io grant] Spec IO::Pipe.path/.IO returns IO::Path type object Rakudo impl: github.com/rakudo/rakudo/commit/d46e8df4cb |
|||
rakudo/nom: c01ebea0a0 | (Zoffix Znet)++ | src/core/IO/Path.pm [io grant] Make IO::Path.mkdir return invocant on success Per discussion[^1], to ameliorate possible fallout from changes to &mkdir[^2], make the method return the invocant instead of True. Since all IO::Path:Ds are True, the method's success can still be judged in boolean context, and this way &mkdir returns its old ... (5 more lines) |
00:47 | ||
rakudo/uncurse: d46e8df4cb | (Zoffix Znet)++ | src/core/IO/Pipe.pm [io grant] Add IO::Pipe .path and .IO methods That return an IO::Path type object. This fixes LTA error of .IO/.path crashing, since the inherited methods from IO::Handle try to instantiate an IO::Path from an empty string. |
01:16 | ||
rakudo/uncurse: c01ebea0a0 | (Zoffix Znet)++ | src/core/IO/Path.pm [io grant] Make IO::Path.mkdir return invocant on success Per discussion[^1], to ameliorate possible fallout from changes to &mkdir[^2], make the method return the invocant instead of True. Since all IO::Path:Ds are True, the method's success can still be judged in boolean context, and this way &mkdir returns its old ... (5 more lines) |
|||
rakudo/uncurse: 762c63ce64 | TimToady++ | 2 files Merge branch 'nom' into uncurse |
|||
rakudo/nom: 1f689a94e1 | (Zoffix Znet)++ | src/core/IO/Handle.pm [io grant] Fix up IO::Handle.Str Ensure we coerce $!path to .Str before returning it, since it can be a bunch of different things. Also use $.path, so that IO::Pipe uses its `method path` instead of the :path arg given to new. The :path attr in IO::Pipe might need more thinking; should it be just ignored by .new and set to empty string? |
01:55 | ||
roast: 64ff572916 | (Zoffix Znet)++ | 2 files [io grant] Cover IO::Path/IO::Pipe's .Str/.path/.IO |
01:58 | ||
ugexe | mkdir("lib").child("MyModule.pm6").spurt(q|class MyModule { say 1; }|); # i like this better than the previous "lib".IO.mkdir.IO.child..... | ||
Zoffix | The previous looks broken; .mkdir used to return True on success until 2 hours ago | 02:01 | |
ugexe | then it was even worse | 02:03 | |
i probably did "lib".IO.mkdir andthen {...} | |||
Zoffix | Have been getting 8s longer stresstests the last few hours :/ I'm hoping that's Google ripping me off with my VM rather than something I added today :\ | 02:17 | |
Geth | rakudo/nom: 490ffd1562 | (Zoffix Znet)++ | src/core/IO/Path.pm [io grant] Do not use self.Str in IO::Path errors Use $!abspath instead. Since .Str does not take $!CWD into account, we might be producing very confusing error messages for paths that were created with CWDs that aren't the current $*CWD |
02:19 | |
rakudo/nom: 40217edfb1 | (Zoffix Znet)++ | 8 files [io grant] Swap .child to .concat-with in all the guts We want the old .child's behaviour that .concat-with now provides, instead of the much more expensive and throwy new .child that's about to be implemented. |
02:41 | ||
Zoffix | s/throwy/faily/; | ||
oh boy... | 02:53 | ||
method resolve (IO::Path:D: :$completely) { | |||
# XXXX: Not portable yet; assumes POSIX semantics | |||
And I need it for .child(). Wonder what's broken in .resolve()... | 02:54 | ||
At least 184 instances of .child() in ecosystem... | 02:56 | ||
I think I'll leave it as is for release, and make it "secure" after it, to give it a chance to boil a bit in bleed code, and maybe submit some PRs to ecosystem to swap .child to .concat-with or something. | 02:57 | ||
Kinda having second thoughts about changing it with so much usage... | |||
Is there some better short name for .child() ? | 02:58 | ||
biggest problem: swapping existing code to .concat-with means forcing users to have 2017.04 compiler. So it's kinda crappy | |||
Zoffix calls it a day for today | 03:02 | ||
BenGoldberg wonders when is a day not a day? | 04:23 | ||
Zoffix | When it isn't full :) | 04:57 | |
BenGoldberg was kinda thinking of, "when it's tomorrow" | 05:03 | ||
m: say "today" ~~ "day" | 05:04 | ||
camelia | False | ||
BenGoldberg | m: say "today" ~~ /day/ | ||
camelia | ļ½¢dayļ½£ | ||
BenGoldberg | m: say "tomorrow" ~~ /day/ | ||
camelia | Nil | ||
samcv cracks knuckles and decideds to try and fix the s:g { } issue with atom-language-perl6 which has been around a while | 05:10 | ||
Zoffix | \o/ | 05:14 | |
samcv | another part of the codebase i've been planning on automatically generating | ||
but have not gotten around to that yet | |||
since that really creates consistency between delimiters and such like it did for the different kinds of quotes. much less bugs | |||
there's like... way way too many regex definitions in here | 05:22 | ||
which is why i have not automated this part yet becuase usually if remove one something breaks :P | |||
geekosaur | also re when is a day not a day? when it's a night | 05:23 | |
hm, why "also". furrfu. speaking of night... | |||
(only awake because sinuses) | |||
samcv | ok i fixed it yay | 05:33 | |
Zoffix, will release as soon as travis/appveyor complete for Atom + Atom Beta | 05:43 | ||
Zoffix | No rush. | 05:55 | |
I'm going to bed as soon as this commit passes stresstest... | |||
samcv | well it's released. i have hated this bug for a while | 05:56 | |
glad it's fixed finally | |||
Zoffix | *phew* and it finally does | 06:05 | |
Geth | rakudo/nom: 0e36bb26ba | (Zoffix Znet)++ | src/core/IO/Spec/Win32.pm [io grant] Make IO::Spec::Win32!canon-cat 2.3x faster Should make a bunch of IO::Path stuff faster on Windows |
06:06 | |
Zoffix | NOW I can sleep | ||
Zoffix drops to bed | |||
samcv | canon cat | 06:13 | |
samcv envisions a cat next to a cannon | 06:14 | ||
nice. it exists resources0.news.com.au/images/2012/...cannon.jpg | |||
lizmat | Files=1190, Tests=56701, 199 wallclock secs (12.03 usr 4.75 sys + 1184.86 cusr 115.21 csys = 1316.85 CPU) | 06:48 | |
[Tux] | This is Rakudo version 2017.03-254-g0e36bb26b built on MoarVM version 2017.03-128-gc9ab59c6 | 06:50 | |
csv-ip5xs 3.234 | |||
test 13.329 | |||
test-t 5.269 - 5.456 | |||
csv-parser 13.146 | |||
samcv | i should bump nqp so that the m:i speedup gets in | 06:51 | |
RabidGravy | Zoffix++ cheers for the PR on XDG::BaseDirectory - I've not been testing everything frequently enough recently (boo to day job,) | 06:57 | |
Geth | rakudo/nom: 822566f1ad | (Samantha McVey)++ | tools/build/NQP_REVISION Bump NQP for case insensitive regex 2x speed boost 1b3f6cf4 Merge pull request #350 from samcv/foldcase 7d9f43c9 Make sure to push in the sval node before the indexic_s op fbd18cc6 Merge pull request #352 from MasterDuke17/make_errors_in_QASTCompilerMAST_more_awesome 66dfddd2 Make errors in QASTCompilerMAST more awesome a70dabf2 s/two/2/ 7194ff46 Merge pull request #351 from MasterDuke17/make_errors_in_QASTOperationsMAST_more_awesome 513d4ebf Make errors in QASTOperationsMAST more awesome ec856126 [moar] Use foldcase in QASTRegexCompilier |
06:58 | |
samcv | [Tux], can you try re-running the test after this nqp bump? | ||
Ā¦ rakudo/nom: version bump brought these changes: github.com/perl6/nqp/compare/2017....-g1b3f6cf4 | |||
samcv | as long as it's not burdensome | 06:59 | |
[Tux] | $ rakud | 07:01 | |
(alias for running all of it. takes a while to finish) | |||
samcv | i'm fearful that we've reached a plataue in the test-t timings | 07:03 | |
[Tux] | samcv: we'll make time-travel-blasting speedup's if "next" is optimized to not being an exception where possible | 07:06 | |
This is Rakudo version 2017.03-255-g822566f1a built on MoarVM version 2017.03-128-gc9ab59c6 | 07:09 | ||
csv-ip5xs 3.068 | |||
test 12.810 | |||
test-t 4.994 - 5.037 | |||
csv-parser 12.812 | |||
2017.03-254 ā 2017.03-255 | 07:10 | ||
samcv | it's smaller right | 07:13 | |
it look ssmaller | |||
RabidGravy | it's smaller :) | 07:25 | |
the range was all above five the other day | |||
samcv | yey | 07:26 | |
cause i saw it does use m:i in the module | |||
so hoped it would make it faster | |||
since 1.8x to 3x speedup worst vs best case | |||
Geth | nqp/master: 11 commits pushed by (Pawel Murias)++ review: github.com/perl6/nqp/compare/1b3f6...7b7e2c1a16 |
10:20 | |
jnthn | Hm, I'm guessing uncurse didn't get merged yet? | 10:27 | |
I was going to pin the regression in github.com/jnthn/grammar-debugger/issues/34 on it | |||
But if uncurse ain't merged it must be something else :S | 10:28 | ||
nine | jnthn: could it be that an EVAL's computation unit references the dynamic call chain somehow? That would explain why with the compile time EVAL, the Staging repo gets referenced in the byte code. | 10:29 | |
jnthn: and no, I don't think uncurse is merged | 10:30 | ||
jnthn | OK | 10:31 | |
I'm liable to have to fix that module once it is, so I'll look at the two together. | 10:32 | ||
References the dynmaic callchain - it could be happening | 10:33 | ||
nine | I guess the more important question is: can I somehow prevent it from happening? | ||
jnthn | Though I can't think of where it might happen purposefully | ||
So I'm suspecting "accident" | |||
Well, find out what's doing it and stop it doing so, I guess :) | 10:34 | ||
nine | Nothing a couple 100 hours of work can't fix :D | 10:35 | |
jnthn | :P | ||
Having hunted many of our concurrency bugs, I can empathize :) | |||
Did you try instrumenting the serialization code in Moar that adds dependencies? | 10:36 | ||
nine | I have started on that | 10:37 | |
jnthn | github.com/MoarVM/MoarVM/blob/mast...ion.c#L275 | ||
That can at least tell you the kind of object indirectly referencing the parent | |||
gah, that was all the wrong words | |||
nine | Ok, will continue in that direction. Thanks! :) | 10:38 | |
jnthn | That can at least tell you the kind of object that's being serialized and the type of the referring object | ||
You can use debug_name in gdb to get the names | |||
That may be enough of a clue | |||
nine | Yeah, debug_name can be a life safer :) | 10:39 | |
jnthn | I guess if that isn't a powerful enough debugging approach, the next step would be to try and make something that can data-dump an SC | 11:03 | |
So we can see what's in it | 11:04 | ||
Zoffix | No, uncurse wasn't merged. | 12:07 | |
"test-t 5.269 - 5.456"... so it wasn't just my VM running the stresstest 8s slower :/ something I commited last night sucks. | 12:08 | ||
dogbert17 | jnthn: a good example to showcase the progress made by 'better-fsa' is the example code in RT #129779 | 12:40 | |
synopsebot6 | Link: rt.perl.org/rt3/Public/Bug/Display...?id=129779 | ||
timotimo | how much better is it? | 12:42 | |
dogbert17 | on my system, with two cores available I get: | ||
(bad-fsa): Counting to 2000000; Non-promise iteration: 1.3932086; One iteration: 3.0489264 (setup: 0.0030221); 16 iterations: 86.9051643 (setup: 0.008308) | 12:43 | ||
(better-fsa): Counting to 2000000; Non-promise iteration: 1.35415227; One iteration: 2.9348096 (setup: 0.0033342); 16 iterations: 31.4008981 (setup: 0.0030857) | 12:44 | ||
timotimo | what does "one iteration" mean? | 12:45 | |
dogbert17 | looks as if the author is using a Promise do to the same calc as the non-promise iteration | 12:47 | |
dogbert17 could of course be totally wrong | |||
timotimo | i'm not sure i understand these measurements. with 16 iterations it takes 15x as much time? | ||
hm, no, more like 10x as much | 12:48 | ||
dogbert17 | which is better than the 86 it took before | 12:49 | |
timotimo | it is, yeah | ||
dogbert17 | m: say 86.9 / 3.05 | ||
camelia | 28.491803 | ||
dogbert17 | m: say 31.4 / 2.93 | ||
camelia | 10.716724 | ||
jnthn | That's a pretty dramatic improvement :) | 12:50 | |
m: say 16 * 2.93 | 12:51 | ||
camelia | 46.88 | ||
timotimo | ah, it doesn't divide work, it does as much work in each thread as it would do in a single thread | ||
jnthn | Right | ||
m: say 16 * 1.35 | |||
camelia | 21.6 | ||
jnthn | I suspect it's still hugely over-subscribing the CPU though | ||
And even then probably the GC sync-up is killing it | |||
Will need to work some at that now the much larger FSA issue is out of the way | 12:52 | ||
timotimo | it'd be nice to graph it for every n between 1 and 16 | ||
jnthn | The fibonaci one looks much nicer now | 12:55 | |
No thread: 12.2610092 | |||
Parallel: 4.05580449 | |||
Single: 12.6727114 | |||
No thread: 12.760576269 | |||
timotimo | cool | 12:56 | |
dogbert17 | nice | ||
jnthn | That's on a quad-core box | ||
dogbert17 must upgrade soon, system is from 2010 | |||
jnthn | Also note the slow-down for simply having threads even if you're only actually using one of them is also down to very little now | 12:57 | |
In theory I get new hardware next week :) | |||
dogbert17 | please elaborate :) | ||
jnthn | Will go 4 core -> 6 core (so, 8 virtual to 12 virtual) | ||
Plus 32 GB RAM, and far faster/larger SSD | 12:58 | ||
dogbert17 | ohh, you'll be able to run spectests and compiles in seconds | ||
dogbert17 have been eyeing the recently released Ryzen CPU's | 12:59 | ||
timotimo | huh. i must be doing something wrong | 13:00 | |
dogbert17 | ? | ||
timotimo | because here i get 0.6005177, 1.6591586, 63.5066597 | ||
m: say 63.5066597 / 1.6591586 | |||
camelia | 38.27642499 | ||
timotimo | and like 80% spent in fixed_size_allocator | 13:01 | |
Zoffix updates perl6.vip/ to not promise deliverables today | |||
eek... that was overoptimistic to say the least :} | |||
timotimo | but i did rebase my stuff on top of the new_fsa branch (because i rebased it on top of origin/master) | ||
dogbert17 | you didn't turn on FSA_DEBUG (or whatever its name is) by any chance | ||
timotimo | nah, it spends all its time in some atomic op in there | 13:02 | |
that wouldn't exist if fsa_debug was turned on | |||
jnthn | Also double the amount of CPU cache, and from Sandy Bridge (32nm) to Broadwell (14nm) | ||
So hopefully I'll be getting faster builds and spectests :) | 13:03 | ||
dogbert17 | you definitely will, am stuck on Westmere if I remember the name correctly | ||
timotimo | for 8 iterations: 0.5527264 , 1.7122354 , 17.5421605 | 13:04 | |
for 4 iterations: 0.553683 , 1.68850254 , 4.67553810 | |||
dogbert17 | timotimo: maybe you're running the 'bad-fsa' branch :) | 13:07 | |
timotimo | i'm running whatever's in master | ||
timotimo tries re-configuring, realclean, rebuild | |||
have to rebuild rakudo, also | 13:09 | ||
dogbert17 my machine has served me well, still remember the immense boost my system got when I switched a my boot drive (5400 rpm HDD) for an SSD (Intel 80 Gig) | 13:10 | ||
I had to rebould Rakudo | |||
*rebuild rather | 13:11 | ||
timotimo | um | ||
yeah, that changed things | |||
dramatically | |||
16 iterations: 0.5407265, 1.4378239, 7.6077481 | 13:12 | ||
m: say 7.607 / 1.438 | |||
camelia | 5.289986 | ||
timotimo | i have 4 logical cores | ||
so it's basically just 25% to 30% overhead on top of that | |||
Zoffix wonders which part of IO work caused this commit github.com/jonathanstowe/p6-Linux-...90dd168aaa | 13:13 | ||
Zoffix looks at RabidGravy inquisitly | |||
timotimo | you mean IO wprk | ||
dogbert17 | timotimo: those are nice numbers | 13:14 | |
timotimo tries a plot | 13:16 | ||
it's kind of hard to get a good result when it already switches directions at 4 | 13:18 | ||
RabidGravy | YOU LOOKING AT ME! | 13:19 | |
timotimo | hmm, hack also has only 4 cores available | 13:20 | |
it'd be interesting to test this on 6-core and 8-core machines | |||
hm, so if i have 4 cores, and i do 16x as much work, it should take 4x as long, right? | 13:21 | ||
that was my idea behind the 5.289 number being "25% to 30% overhead" | 13:22 | ||
Zoffix | RabidGravy: and yeah, it's now $target.symlink: $linkname. | ||
Target is the target the link points to. I don't know why so many people call the link target :/ | 13:23 | ||
RabidGravy | yeah it makes more sense | ||
timotimo | dogbert17: do you want to post an update on the bug? i'll be afk for a bit, if you don't want to, i'll do it later on | ||
robertle | timotimo: if you want something run on a many-core machine and on't have one around, let me know... | ||
timotimo | can you get an absolutely-up-to-date rakudo with very-newest nqp and very-newest moarvm? | 13:24 | |
Zoffix | RabidGravy: what was the problem in github.com/jonathanstowe/p6-Linux-...90dd168aaa ? Doesn't look like any of the IO changes I made. | ||
timotimo | gist.github.com/timo/a3a405f977840...34715e9cd4 - it'd be cool if you could run this and give me the output :) | 13:25 | |
RabidGravy | Zoffix, it appears to be the .append didn't like an Int | ||
Zoffix | RabidGravy: also, you're coercing a Str basename to Int here, just to coerce it back to Str on the next line: github.com/jonathanstowe/p6-Linux-...a8d3817R50 | ||
timotimo | robertle: ^ | ||
robertle | timotimo: if you tell me how to build it! I have only used rakudobrew so far... | 13:26 | |
Zoffix | m: my $x = "foo".IO; $x.append: 'X' | 13:27 | |
camelia | Cannot resolve caller append(IO::Path: Str); none of these signatures match: (Any:U \SELF: |values is raw) in block <unit> at <tmp> line 1 |
||
Zoffix | m: my $x = "foo".IO; $x.append: 42 | ||
camelia | Cannot resolve caller append(IO::Path: Int); none of these signatures match: (Any:U \SELF: |values is raw) in block <unit> at <tmp> line 1 |
||
Zoffix | Doesn't look like there's append for it? | ||
Above is just the autoviv candidate | 13:28 | ||
RabidGravy | er, it was throwing something about unboxing | 13:29 | |
Zoffix shrugs | |||
RabidGravy | up to my armpits in OpenSSL right now | ||
Zoffix | :) | ||
timotimo: the first 6 iterations on my 24-core box: gist.github.com/zoffixznet/4e0fd3e...6d5dc47340 | 13:34 | ||
(got bored with it and aborted it) | |||
MasterDuke_ | timotimo: results from my "quad" core laptop gist.github.com/MasterDuke17/bf5c0...a126957bb7 | 13:45 | |
Zoffix | m: say 43.4275427/7.0786173 | 13:46 | |
camelia | 6.135031866 | ||
Zoffix | Interesting that it's 6x faster on your box :| | ||
MasterDuke_ | and this is just a dell xps 13, also gonna run it on my older, but "eight" core desktop | 13:47 | |
the laptop does have a haswell gen cpu, while the desktop is nehalem gen, so the beefier desktop isn't always faster | 13:49 | ||
Zoffix: were your numbers from a laptop or desktop? if laptop, on battery or ac? | 13:50 | ||
Zoffix | MasterDuke_: Google Compute Engine VM | 13:51 | |
timotimo | Zoffix: your moarvm is before the better-fsa branch got merged | ||
Zoffix | Oh :) | ||
timotimo | .tell robertle you can use "rakudobrew triple nom master master" | 13:52 | |
yoleaux | timotimo: I'll pass your message to robertle. | ||
timotimo | Zoffix: would you re-run it with a more up-to-date moar? | 13:53 | |
MasterDuke_ | desktop results gist.github.com/MasterDuke17/7e261...c78144f709 | 13:56 | |
Zoffix | In a bit. Trying to hunt down the commit that brought the slowness last night. | ||
timotimo | OK! | ||
Zoffix | Well, that was pointless. | 13:58 | |
MasterDuke_ | it was rounded instead? | ||
Zoffix | Built as far as Apr 11th rakudo and checkout that time's roast and still getting 121s stresstest runs. Even though I had 111s runs about 24hrs ago, as posted in #MoarVM | ||
timotimo | MasterDuke_: that has a really strange bump near the beginning | 13:59 | |
Zoffix | ZofBot: must be solar flares! | ||
ZofBot | Zoffix, These are used to initialize superclasses | ||
timotimo always initializes superclasses with solar flares | |||
Zoffix | timotimo: was the merge version bumped or do I need to build moar master myself? | ||
MasterDuke_ | i usually use supernovas for superclasses | ||
robertle | timotimo: gist.github.com/anonymous/755aea8c...5ffdc74bb8 | ||
yoleaux | 13:52Z <timotimo> robertle: you can use "rakudobrew triple nom master master" | ||
robertle | timotimo: will trt that, back in a sec | 14:00 | |
Zoffix | guess not | 14:01 | |
timotimo | the before/after will be interesting to see here. | ||
nope, the last bumped moar_revision was right before the better-fsa brahc | |||
branch | |||
MasterDuke_ | (timotimo: what do you mean strange bump? looks kind of linear to me (assuming you're referring to my desktop results) | ||
timotimo | the eight-core one | 14:02 | |
imgur.com/a/ItCBX | |||
MasterDuke_ | hm, yeah | 14:03 | |
Zoffix | wtf | 14:05 | |
How is this even possible? gist.github.com/zoffixznet/7c7728e...138d786ce3 | 14:06 | ||
MasterDuke_ | just ran it again and added those to the gist, but they look pretty similar | ||
Zoffix | Built HEAD rakudo after nuking nqp/MoarVM... and it's missing nqp/MoarVM :S yet works | ||
timotimo | why would nqp/MoarVM missing be a problem? | 14:07 | |
i'm pretty sure it'd take its stuff from the install/ folder | |||
robertle | timotimo: rakudobrew triple ... seems broken for me, need to head to the playground. guess it's sorted anyway, let me know if you need more later | ||
Zoffix | I dunno, because it was there for me every time for the past year? | ||
timotimo | robertle: can you tell me in what way triple is broken? | ||
Zoffix | guess as good a time as any to nuke my rakudo dir: cpan@perlbuild2~/CPANPRC/rakudo (nom)$ du -sh | 14:08 | |
1.3G . | |||
robertle | timotimo: first like this: github.com/tadzik/rakudobrew/issues/63 | 14:09 | |
with the patch it gets a bit further, but does not finish | 14:10 | ||
will look into it when I get back | |||
timotimo mumbles something about rakudobrew not being recommended | |||
robertle | is there an alternative | 14:11 | |
timotimo | yeah, just checkout rakudo and perl Configure.pl --gen-moar=master or what it is | ||
Zoffix | No? | ||
Why do people recommend others to use random dev commits -_- | |||
timotimo | Zoffix: i want robertle to run moarvm master | 14:12 | |
Zoffix | I see | ||
timotimo | that's why i recommend using moar master, so they can get moar master? | ||
:\ | |||
rakudobrew is useful if you want to switch between 10 different versions of rakudo installed at the same time and have your bin scripts easily switchable | |||
Zoffix | Well, I also see Ulti recommending rakudobrew to users today: irclog.perlgeek.de/perl6/2017-04-15#i_14431467 | ||
timotimo | yeah, i was surprised by that | ||
maybe ulti's a bit out of the loop, or i'm just hallucinating the demise of rakudobrew | 14:13 | ||
timotimo sees perl6.org/downloads recommending rakudobrew | 14:14 | ||
i suppose it'd be best to just bump moar and nqp | 14:17 | ||
Geth | nqp: 6432a25e6e | (Timo Paulssen)++ | tools/build/MOAR_REVISION bump moarvm for better multithreading performance |
14:19 | |
Ā¦ nqp: version bump brought these changes: github.com/MoarVM/MoarVM/compare/2...8-g40881cd | |||
rakudo/nom: 20af51fef9 | (Timo Paulssen)++ | tools/build/NQP_REVISION bump nqp and moarvm for better multithreading performance |
|||
Ā¦ rakudo/nom: version bump brought these changes: github.com/perl6/nqp/compare/2017....2-g6432a25 | |||
Zoffix | wow, what a difference | 14:23 | |
timotimo: gist.github.com/zoffixznet/783f029...1f24e5ea6a | |||
that's my 24core box | |||
timotimo | nice | 14:24 | |
MasterDuke_ | hot damn! | ||
timotimo | could you turn the number up to 32 perchance? | ||
so we can see the point where it starts going up? | |||
once it goes past the core count? | |||
Zoffix | Which number? the number of cores? | 14:25 | |
timotimo | there's a for loop that goes from 2 to 16 | ||
Zoffix | Ah | ||
1 sec. I nuked everything and building the new HEAD | |||
timotimo | might also have to tell the scheduler that it's okay to make that many threads | ||
MasterDuke_ | timotimo: btw, what sort of information could one get out of your telemeh_try branch? | 14:33 | |
timotimo | good question | ||
nobody knows for sure | |||
BBIAB | 14:34 | ||
Zoffix | timotimo: gist.github.com/zoffixznet/b4dcb14...cf68399aee | 14:38 | |
timotimo | Zoffix: two runs for improved precision? | 14:42 | |
Zoffix | timotimo: one had the default 16 max threads, the other 40 | 14:43 | |
timotimo | oh of course | ||
thank you, i shall put that into a gnuplot soon-ish | 14:44 | ||
MasterDuke_: it ought to be able to tell you what kind of stuff moarvm spends its time with | |||
MasterDuke_ | in a different way than perf? | ||
timotimo | yeah | 14:45 | |
Zoffix | ZOFVM: Files=1240, Tests=133707, 115 wallclock secs (22.60 usr 3.15 sys + 2387.36 cusr 130.95 csys = 2544.06 CPU) | ||
MasterDuke_ | how so? | ||
timotimo | perf is probabilistic, whereas telemeh is precise | ||
MasterDuke_ | ah | 14:46 | |
Geth | roast: 925e6f03fe | (Zoffix Znet)++ | S05-modifier/ignorecase.t Un-todo now-passing tests The ligatures in the haystack of case insensensitive regex don't work ones |
14:47 | |
timotimo | perf is based around telling you what exact instruction it hit when it randomly sampled | ||
telemeh has a concept of "intervals" | |||
and it'll also give you specific info about which thread is doing what | |||
because i added output for stuff like "trying to take a lock" you can see how lock-ownership passes on between different threads, for example | |||
though of course you can't "see" it until i build a visualizer for all this | 14:48 | ||
MasterDuke_ | so would help understand the difference in the benchmark we've just been trying, especially before better-fsa and after? | ||
timotimo | the fsa doesn't have any telemeh commands yet | 14:49 | |
so it's unlikely that we'd be able to point at the fsa for our issues | 14:50 | ||
MasterDuke_ | btw, with all the recent benchmarking and chatting with tadzik about viewing profiles, i realized i still haven't implemented those changes to the sql output you suggested | 14:53 | |
maybe can find some time to chat about what could be done to make it better? | 14:54 | ||
timotimo | yeah | 14:55 | |
i should have some time right now, for example | |||
MasterDuke_ | i have time now as well | 14:56 | |
timotimo | cool | 14:57 | |
MasterDuke_ | so i think the one thing was putting 0s instead of NULLs? | 14:58 | |
timotimo | yeah, that should be easy | 15:01 | |
MasterDuke_ | it looks like right now NULLs can end up in the 'gcs', 'callee's, and 'allocations' tables | ||
they can all be 0s? | |||
timotimo | i think we only had NULL because i optimized the profiler output to not have anything if the value is 0 | 15:02 | |
so we should be able to just output 0 instead | |||
MasterDuke_ | timotimo: github.com/MasterDuke17/nqp/commit...5e446d5ddb | 15:06 | |
timotimo | hm, maybe push "0" instead of 0 | 15:07 | |
that might save us a tiny bit of stringification later on | |||
wanna have a look at a telemetry log from the threading thingie? | 15:11 | ||
Geth | rakudo/nom: fd503f89ed | (Zoffix Znet)++ | 5 files Revert "[io grant] Remove `role IO` and its .umask method" This reverts commit 87987c2dcbe6ca607ef623c4eb4b1a9f40d6af78. |
15:13 | |
rakudo/nom: c95c4a75d1 | (Zoffix Znet)++ | 5 files [io grant] Make IO::Path/IO::Special do IO role - Brought back the removed role in previous commit - Make IO::Path and IO::Special do it - It don't got no methods; we do it so that when we make our coercers type-check the return values all our IO() coercers that coerce to IO::Path don't explode. |
|||
MasterDuke_ | timotimo: yeah, have a gist or something? | 15:15 | |
timotimo | i just uploaded it to the whateverable server | 15:16 | |
it's a .txt.gz file in the home folder | |||
MasterDuke_ | heh, the third column looks like the vines in the original marios | 15:18 | |
what was the perl6 code run? | 15:19 | ||
timotimo | that's the script we've been using but instead of 2..16 it's 2, 4, 8, 16 | 15:20 | |
MasterDuke_ | i thought maybe so, i didn't see any moarvm functions that looked like anything interesting was happening | 15:22 | |
timotimo | you can see it spawn the additional threads | ||
MasterDuke_ | is `~($gc{$f} // "0")` faster than `~($gc{$f} // 0)`? | 15:23 | |
timotimo | i think stringifying a string is cheaper than stringifying an int, even though it's one in the intification cache | ||
it's probably a micro-optimization that doesn't contribute much to overall profile enerating performance | 15:24 | ||
i find it a little strange that after each thread gets created it'll do a gc run first | 15:26 | ||
MasterDuke_ | 0s stringified | 15:30 | |
timotimo: is that done deliberately? | 15:32 | ||
timotimo | what exactly? | 15:33 | |
the gc thing? | 15:34 | ||
MasterDuke_ | yeah | 15:35 | |
timotimo | btw, using native ints here makes the whole thing a boatload faster | 15:36 | |
Non-promise iteration: 0.023987, One iteration: 0.10999810, 16 iterations: 0.8526233 | 15:37 | ||
MasterDuke_ | did you change to `$i = $i + 1` also? | 15:38 | |
timotimo | yes | ||
makes only a small difference, it seems | 15:39 | ||
could also be thermal throttling kicking in | 15:41 | ||
MasterDuke_ | not as much as switching to natives, no. but noticeable | ||
timotimo | right | ||
we still don't recognize the variable as being native in the optimizer ,i think | |||
hm, no, we do that | 15:42 | ||
MasterDuke_ | we were chatting with jnthn about that a little while ago. i don't remember the exact reason $i++ couldn't be turned in to $i=$i+1, but i think it had something to do with outer blocks | 15:45 | |
and if they had a variable with the same name. i dunno | 15:46 | ||
timotimo | huh | 15:47 | |
MasterDuke_ | maybe here irclog.perlgeek.de/perl6/2017-03-25#i_14322350 | 15:55 | |
timotimo | that's about automatically turning a for loop into a while loop | 15:56 | |
well, a loop loop | |||
m: loop (my $i = 0; $i < 10; $i++) { }; say $i | 15:57 | ||
camelia | 10 | ||
timotimo | mhh, the scoping is different from a for loop, yeah | 15:58 | |
MasterDuke_ | m: loop (my int $i = 0; $i < 10_000_000; ++$i) { }; say now - INIT now | 16:07 | |
camelia | 0.0637503 | ||
MasterDuke_ | m: loop (my int $i = 0; $i < 100_000_000; ++$i) { }; say now - INIT now | ||
camelia | 0.6624194 | ||
MasterDuke_ | m: loop (my int $i = 0; $i < 100_000_000; $i = $i + 1) { }; say now - INIT now | ||
camelia | 0.6310619 | ||
MasterDuke_ | not a huge difference there | ||
m: loop (my $i = 0; $i < 100_000_000; ++$i) { }; say now - INIT now | |||
camelia | 15.92080205 | 16:08 | |
MasterDuke_ | m: loop (my $i = 0; $i < 100_000_000; $i = $i + 1) { }; say now - INIT now | ||
camelia | 15.13526735 | ||
MasterDuke_ | or there. nice, i remembered it being larger than that | 16:09 | |
TimToady | jnthn: I had not planned on merging uncurse till after the release, since the IO work is already a fairly big perturbation, but I could probably be argued into merging it for this release | 16:10 | |
I suspect nine's serialization deps are coming through the language braid, because braids are trying to be fairly agressive in what participates in the "current language" | |||
so we might need to break a language braid dep somewhere strategically to get things not to serialize | 16:11 | ||
though, in fact, EVAL is still using %?LANG, not $?LANG, so maybe that's not what's really happening | 16:14 | ||
timotimo | MasterDuke_: sorry, i don't seem to have been actually helping with the profiler stuff? | 16:17 | |
jnthn | TimToady: Ah, OK. I'm not in a hurry, just tied for time as usual so trying to be efficient. ;) | ||
MasterDuke_ | heh, well i'm down to one hand right now anyway | ||
timotimo | oh, you got a cat? :D | 16:18 | |
MasterDuke_ | but what were your other ideas? | ||
timotimo | the sql version of the profiler still doesn't give us enough data to construct the full call graph | 16:19 | |
MasterDuke_ | heh, tiny humans are just as hand-consuming | ||
timotimo | oh, hah | ||
i totally forgot you mentioned that recently | |||
Geth | nqp/uncurse: 14 commits pushed by (Pawel Murias)++, (Timo Paulssen)++, TimToady++ review: github.com/perl6/nqp/compare/a44e6...005a2b7a20 |
||
MasterDuke_ | hm, i thought it had all the data the json version did? | ||
Geth | rakudo/uncurse: 9 commits pushed by (Zoffix Znet)++, (Samantha McVey)++, (Timo Paulssen)++, TimToady++
|
16:20 | |
timotimo | MasterDuke_: it has all the data, but a sql table is flat, the json data is nested | 16:44 | |
if you don't put in something to represent how the json data was nested, you'll lose data even though all the fields are still there | |||
MasterDuke_ | aren't there ids that refer to each other? | 16:45 | |
timotimo | yeah, but something about them was wrong | ||
i had a hard time figuring out exactly how it was wrong | |||
didn't help that the id fields were all rather nebulously named | |||
MasterDuke_ | hm..i tested with a tiny profile and thought it was right, but it's not easy | 16:46 | |
timotimo | yeah, it's rather difficult to make sense of the whole thing | 16:47 | |
nine | I've got my Ryzen CPU + board + 32 GB RAM at home since Tuesday. But I'm short a CPU cooler, Delivery problems :/ | ||
Ironically the cooler is the only part built in Austria and the only part that's hard to get in Austria... | 16:48 | ||
MasterDuke_ | nine: nice, i've been lusting after one of those. which cpu? | ||
timotimo: suggestions for the id names? | |||
nine | R7 1800X | 16:49 | |
MasterDuke_ | or some code that will generate a good (small!) test profile? | ||
TimToady | uncurse does seem to be 1-2% faster compiling the setting, and it does seem to be in a stable state, or at least a metastable state, and it does pass one TODO for Match.perl, so maybe it's worth merging earlier | 16:50 | |
MasterDuke_ | nine: good deal. will probably go 1700 myself. want to reduce the heat generated in my office | 16:51 | |
RabidGravy | speaking of new computers what's the biggest bang for the buck I can get in a microATX/NUC form factor? I'm thinking of getting a bunch more Gigabyte Brix to run continuous testing of my modules on | ||
but don't know what the state of the art of that stuff is | |||
dogbert17 | nine: interesting, what MB and memory did you get? | 16:54 | |
nine | MasterDuke_: the 1700 is also much more cost efficient. I just figured it's time for AMD to earn some real cash and I can afford it | ||
dogbert17 is pondering the 1600 or 1700 | 16:55 | ||
ugexe | you can build some mean 32+ thread systems pretty cheap from used v2/v3 xeons | 16:56 | |
timotimo | MasterDuke_: ideally it'd point out what the "target" table and field are | ||
no clue what code would give a good profile :\ maybe something from rosettacode as examples? there was a github repository that had rosettacode data in it for easy running | 16:57 | ||
dogbert17 | 32+ threads, impressive, that would crush Zoffix puny 24 core setup :) | 16:59 | |
the cooler nine is mentioning sounds suspiciously like some Noctua model | 17:00 | ||
robertle | timotimo: gist.github.com/anonymous/650ff6b0...8992e572b4 | 17:14 | |
looks quite flat even after it matches the number of cores | 17:15 | ||
timotimo | there's also a variable that limits the number of threads the thread pool scheduler will even create | ||
Int :$!max_threads = (%*ENV<RAKUDO_MAX_THREADS> // 16).Int | 17:17 | ||
so we'd expect the graph to become steeper after 16 | |||
Zoffix | dogbert17: 32 cores is a click away for me. I'm just not seeing the benefit from them on stresstest. Also google recently added 64-core boxes :) if only I could figure out how to launch them | ||
nine | dogbert17: Gigabyte AX370-Gaming 5 and Corsair Vengance LPX CMK32GX4M2B3000C15 | 17:19 | |
dogbert17: and yes, the cooler is supposed to be a Noctua NH-D15 SE-AM4 | 17:20 | ||
robertle | timotimo: I don't think that limits to 16 threads! and thge graph doesn't look it either... | 17:22 | |
timotimo: imgur.com/a/2d7q4 | 17:25 | ||
timotimo | huh, interesting | ||
robertle | doesn't // just say "if not defined use the other"? | 17:26 | |
timotimo | yup | ||
MasterDuke_ | robertle: what if you set MAX_THREADS to a small number? e.g., 4 | 17:27 | |
robertle | a moment | 17:29 | |
MasterDuke_ | timotimo: in `"allocations": [ { "id": "11", count": 1 } ]` from a json profile, what is that id? | 17:30 | |
there are a bunch of those, all with id=11 (and some with other ids) | 17:31 | ||
for this code: sub a($b) { say $b }; a($_) for ^2 | 17:32 | ||
ugh, and the regular profile allocations tab is busted so i don't have anything to compare with | 17:39 | ||
maybe need to fix that first | 17:40 | ||
is it a problem with the raw data? or the html/js that's meant to display the data? | 17:41 | ||
robertle | MasterDuke_: gist.github.com/anonymous/f0afc000...ba3fbd898d imgur.com/a/PKl7n | 17:49 | |
lighter blue is with RAKUDO_MAX_THREADS=4 | 17:50 | ||
timotimo | MasterDuke_: i think that points at the name of the thing allocated | ||
MasterDuke_ | `"11": "List"` so maybe this? from the very beginning of the json | 17:51 | |
robertle: 4 definitely makes it worse | 17:52 | ||
timotimo | yup | ||
tthat ought to be the one | |||
MasterDuke_ | oh ha, i stick those in the 'allocators' table already | 17:53 | |
timotimo | another id-to-thing connection is the way we re-use filename and line number | ||
can that table be called "types" or "classes" maybe? | 17:54 | ||
MasterDuke_ | sure | ||
re-use filename and line number? | |||
timotimo | yeah, instead of putting those into every json object we just refer to a big list at the beginning | 17:55 | |
MasterDuke_ | right, same list i get the allocators from | 17:56 | |
if hash, filename and line number, else allocator | 17:57 | ||
timotimo | oh, ok | ||
MasterDuke_ | filename and line number go in the routines table | 17:58 | |
which i join with the callees table to replicate the info in the routines tab of the regular profile (and the qt viewer) | 18:00 | ||
timotimo | right, the routines tab is a join and aggregate of all routines with the same filename/line number/routine name | ||
MasterDuke_ | select case when r.name = "" then "<anon>" else r.name end as name, r.file, r.line, sum(entries) as entries, sum(case when rec_depth = 0 then inclusive_time else 0 end) as inclusive_time, sum(exclusive_time) as exclusive_time from callees c, routines r where c.id = r.id group by c.id order by exclusive_time desc; | 18:01 | |
timotimo | hm | 18:03 | |
i'm not sure i really understand how rec_depth works | |||
i'm not sure we can just write the inclusive time thing as sql | 18:05 | ||
as we have to take times from any routine we find in the call graph below this | |||
and every given routine can occur as many times as it wants | |||
AlexDaniel | Zoffix: remember I told you that I use my laptop on my long bus rides? | 18:06 | |
Zoffix: turns out somebody took a picture of me a few months ago | |||
MasterDuke_ | i think that's what rec_depth is supposed to do | ||
AlexDaniel | Zoffix: and by pure luck that picture got to meā¦ | ||
Zoffix: files.progarm.org/bus.jpg | |||
timotimo | hah | 18:08 | |
ugexe | hmm zef's testers.p6c.org reporter should work (it sends the same data as panda reporter). but panda doesnt send reports properly now either | 18:10 | |
timotimo | ah, interesting | 18:15 | |
i think i should be able to find something out by going to www.p6c.org | |||
is FlightRecorder what gathers the data up? | 18:16 | ||
ugexe | im not sure what happens after the data gets posted lol | ||
MasterDuke_ | timotimo: i believe, but couldn't swear to, that i hacked nqp to write both json and sql profiles and that query gave the same numbers for inclusive and exclusive as the qt viewer showed | ||
timotimo | do the reports reach the server at a specific port? | 18:17 | |
ugexe | 80 | ||
timotimo | hm, ok, then i'll have to look at the apache conf | 18:18 | |
what's the hostname and path? | |||
ugexe | gist.github.com/ugexe/f69ba589ef20...54feea9309 | 18:19 | |
timotimo | OK, that's port 3000 | ||
ugexe | my $sock = IO::Socket::INET.new(:host<213.95.82.53>, :port(80)); | ||
timotimo | i mean it gets proxied to port 3000 | ||
nothing in the apache errors log | 18:21 | ||
unsurprisingly | |||
ugexe | (HTTP/1.1 400 Bad Request Date: Sat, 15 Apr 2017 18:20:37 GMT Server: Apache/2.4.10 (Debian) Content-Length: 301 Connection: close Content-Type: text/html; charset=iso-8859-1 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>400 Bad Request</title> </head><body> <h1>Bad Request</h1> <p>Your browser sent a request that this server could not understand.<br /> </p> <hr> | 18:23 | |
<address>Apache/2.4.10 (Debian) Server at perl6.org Port 80</address> </body></html>) | |||
timotimo | Apr 15 06:10:02 www starman[474]: Use of uninitialized value in subroutine entry at /usr/local/share/perl/5.20.1/Dancer | ||
/FileUtils.pm line 34 | |||
ugexe | hmm | 18:24 | |
timotimo | could that have anything to do with anything? | ||
ugexe | long ago things like how you representing null would break it | 18:25 | |
timotimo | gist.github.com/timo/d321ee22531c2...9b03bf6b72 - this is the execution part of the report thingie | ||
MasterDuke_: i don't actually really know how recdepth works :) | 18:34 | ||
MasterDuke_ | neither do i anymore. but if it gives correct results... | 18:35 | |
timotimo | heh. | 18:36 | |
AlexDaniel | s: 'sprintf', \('<%#B>', 12) | 18:42 | |
SourceBaby | AlexDaniel, Something's wrong: ā¤ERR: Cannot resolve caller sourcery(Str, Capture); none of these signatures match:ā¤ ($thing, Str:D $method, Capture $c)ā¤ ($thing, Str:D $method)ā¤ (&code)ā¤ (&code, Capture $c)ā¤ in block <unit> at -e line 6ā¤ā¤ | ||
AlexDaniel | s: 'sprintf', '<%#B>', 12 | ||
SourceBaby | AlexDaniel, Something's wrong: ā¤ERR: Cannot resolve caller sourcery(Str, Str, Int); none of these signatures match:ā¤ ($thing, Str:D $method, Capture $c)ā¤ ($thing, Str:D $method)ā¤ (&code)ā¤ (&code, Capture $c)ā¤ in block <unit> at -e line 6ā¤ā¤ | ||
timotimo | hm? sourcery can only do methods? | 18:43 | |
MasterDuke_ | s: &sprintf, \('<%#B>', 12) | ||
SourceBaby | MasterDuke_, Sauce is at github.com/rakudo/rakudo/blob/c95c...ol.pm#L291 | ||
timotimo | ah, yes | ||
AlexDaniel | right!! | ||
timotimo | was about to try that | ||
AlexDaniel | dammit, I'll never learn that. I guess I have to fix the bot itself insteadā¦ | 18:44 | |
MasterDuke_ | timotimo: does this look like reasonable allocation numbers for a random profile i had lying around? gist.github.com/MasterDuke17/b2145...8fb5ea4eaa | 18:48 | |
timotimo | hmm, perhaps | 18:50 | |
MasterDuke_ | gist updated with results from the profile of `sub a($b) { say $b }; a($_) for ^2` | 18:52 | |
timotimo | dinner now | 19:03 | |
Geth | roast: 71034737d1 | (Pawel Murias)++ | S02-lexical-conventions/unicode-whitespace.t [js] Fudge around EN QUAD/EM QUAD vertical white-space matching weirdness |
19:16 | |
rakudo/js: 5 commits pushed by (Pawel Murias)++ | 19:19 | ||
MasterDuke_ | pmurias: as someone who obviously knows more JS than nothing i know, are you familiar with angular.js at all? | 19:23 | |
pmurias | I have used the version 1 angular.js before | 19:24 | |
MasterDuke_ | pretty sure that's what our profile output uses | 19:25 | |
how easy is it to debug? our profiles currently have some empty sections, even though the raw data is present | 19:26 | ||
pmurias | I could give a try at fixing that, what should I checkout/look into? | 19:27 | |
timotimo | if you don't have the angular batarang installed, you can forget about debugging it | ||
MasterDuke_ | the "Allocations" section is definitely wrong (nothing shown, raw data present) | 19:29 | |
pmurias is looking into it | 19:40 | ||
MasterDuke_ | pmurias++ | 19:41 | |
pmurias | it seems to be bitrot from an dependency upgrade, I'll take a shower to freshen up and look into fixing it | 19:47 | |
MasterDuke_ | nice, that's been broken for a while now, it'll be good to get it working again (and will let me verify my sql numbers) | 19:51 | |
Geth | nqp: 211b0f2ba3 | (Pawel Murias)++ | src/vm/moar/profiler/template.html Fix bitrot in moarvm profiler |
20:18 | |
nqp: 30a965887f | (Pawel Murias)++ | src/vm/js/Compiler.nqp [js] Stuff to fix nqp::p6initied |
|||
pmurias | MasterDuke_: I fixed that | ||
MasterDuke_ | pmurias: cool, trying now | 20:26 | |
pmurias++ working for me. nice to get that in before the release | 20:30 | ||
.tell lizmat fyi, since i think you've mentioned this before, pmurias just fixed the allocations tab in the profiler output | 20:31 | ||
yoleaux | MasterDuke_: I'll pass your message to lizmat. | ||
MasterDuke_ | timotimo: the allocation names and numbers match between my sql output and the allocations tab on a regular profile (now that pmurias fixed it) | 20:48 | |
over in #perl6 Xliff is trying to compile script that's just a large (the whole file is 191k lines) hash of hashes, but gets `===SORRY!=== Frame 2 local access out of range` during the mbc stage | 20:58 | ||
anybody have any idea? | |||
jnthn | Yes. A hash constructor is just a call, and there's an upper limit of allowed arguments | 21:06 | |
lizmat | mbc stage? | ||
yoleaux | 20:31Z <MasterDuke_> lizmat: fyi, since i think you've mentioned this before, pmurias just fixed the allocations tab in the profiler output | ||
jnthn | It's actually waaay higher on MoarVM than on the JVM | ||
By a factor 256 or so :) | |||
lizmat | but but mbc, isn't that Parrot ? | ||
jnthn | mbc = MoarVM Bytecode | 21:07 | |
The Parrot one was pbc :) | |||
lizmat | ah | ||
ok :-) | |||
ah, yes | |||
MasterDuke_ | jnthn: src/mast/compiler.c:627: `if (l->index < 0 || l->index > 32768) DIE(vm, "Frame %u local access out of range", ws->current_frame_idx);` | ||
lizmat | *phew* | ||
jnthn | Yup, that code's just correctly doing its job | ||
The generated code really did spit out an out-of-range index | |||
It's probably the case that there's some kind of code-generator tweak we can do | 21:08 | ||
But I suspect that only makes the problem happen later | 21:09 | ||
MasterDuke_ | splitting it up into a hash create and then add? | ||
jnthn | That would work...but seriously, why not just use something that's designed to be a serialization format? | 21:10 | |
timotimo | pmurias: how on earth did you figure out that change was needed? | 21:11 | |
MasterDuke_ | well, it's not my code or use case, so i don't really care. if it's expected behavior that's fine | ||
jnthn | MasterDuke_: It's an implementation limitation, and it's certainly not something with an easy fix. | 21:14 | |
There may be semi-easy ways of making it not blow up until the data gets even bigger | 21:15 | ||
MasterDuke_ | think it's worth mentioning the max size of type literals in the docs ? | ||
jnthn | May be worth a note, yeah | 21:16 | |
And point people to things like %?RESOURCES | |||
MasterDuke_ | or fail faster/earlier? took almost 4min to die for him | ||
jnthn | o.O | ||
MasterDuke_ | though most of that was parsing | 21:17 | |
timotimo | pmurias++ | 21:19 | |
lizmat | does pmurias++ fix need a bump, or should I see the result in HEAD already ? | ||
MasterDuke_ | jnthn: what exactly is the limitation on hash literals? number of top level keys? total number of keys? | 21:26 | |
timotimo | each hash gets its own limited number of entries it can have | ||
nested hashes count as just one entry | 21:27 | ||
jnthn | This is true, but it may also be the case that the whole hash counts as a single expression, meaning any temporary registers may not be freed up | 21:28 | |
Since that happens at statement level in some cases | |||
So it may run into exhaustion there also | |||
timotimo | oh, oof | ||
MasterDuke_ | lizmat: his fix is in nqp HEAD, but not rakudo | ||
jnthn | Anyways, I don't actually know, and we'd need to look at the code we're producing | 21:29 | |
MasterDuke_ | well, is there a limit to the top level of entries? i could add that info and say literals can't be that big | 21:30 | |
s/entries/keys/ | |||
lizmat | whee.... pmurias++ | 21:40 | |
running a spectest now, if clean will bump nqp | |||
Geth | rakudo/nom: c16cdb2ce7 | (Elizabeth Mattijsen)++ | tools/build/NQP_REVISION Bump NQP version for Allocations tab in profile fix pmurias++ |
21:44 | |
rakudo/nom: version bump brought these changes: github.com/perl6/nqp/compare/2017....4-g30a9658 354a4dbbda | (Elizabeth Mattijsen)++ | docs/ChangeLog |
|||
lizmat | good night, #perl6-dev! | 21:48 | |
timotimo | good night lizmat! | 21:49 | |
jnthn | 'night, lizmat | 21:55 | |
timotimo | it's really not necessary for an enum value to check for isnanorinf when trying to ACCEPTS another enum value ā¦ | 21:56 | |
i wonder when and how that changed | |||
benchable6: releases enum Foo <Bar Baz Quux>; my int $foo; for Foo.roll(10_000) { when Quux { $foo = $foo + 1 } }; | 21:59 | ||
benchable6 | timotimo, starting to benchmark the 17 given commits | ||
timotimo, benchmarked the given commits, now zooming in on performance differences | 22:00 | ||
timotimo, gist.github.com/2f470878dd2668e383...11bcc3d67a | |||
AlexDaniel | benchable6: 94780d7,2c552d9 enum Foo <Bar Baz Quux>; my int $foo; for Foo.roll(10_000) { when Quux { $foo = $foo + 1 } }; | 22:03 | |
benchable6 | AlexDaniel, starting to benchmark the 2 given commits | ||
AlexDaniel, benchmarked the given commits, now zooming in on performance differences | |||
AlexDaniel, Ā¦94780d7: Ā«0.2110Ā» Ā¦2c552d9: Ā«0.1821Ā» | |||
Geth | rakudo/nom: 17d34cdc91 | (Timo Paulssen)++ | src/core/Enumeration.pm allow for faster Enum ~~ Enum it used to go through Numeric's ACCEPTS, which first checks isnanorinf, and also has a nested scope in it. |
||
AlexDaniel | notice how it actually found which commit caused the speedup | 22:04 | |
amazingā¦ | |||
benchable6 is probably more reliable than I thought | |||
(although the graphs suck) | |||
timotimo | wow, this accepts i made in there is a whole bunch faster | 22:05 | |
i don't see how those commits it's got there are actually relevant here?! | 22:07 | ||
AlexDaniel | timotimo: benchable is effectively bisectable | 22:08 | |
timotimo | right | ||
but how do these commits have anything to do with my code? :D | |||
AlexDaniel | timotimo: Ā¦2016.02: Ā«0.2214Ā» Ā¦2016.03: Ā«0.1780Ā» | ||
timotimo: you asked for releases, that's what it got ā | |||
timotimo: then it realized that the difference is actually significant | |||
timotimo: so it tried one more commit between 2016.02 and 2016.03 | 22:09 | ||
timotimo | yeah | ||
i realize that much | |||
but the commits it pointed out | |||
AlexDaniel | and again and again, until it actually figured which commit caused the speedup | ||
timotimo | they are for eqv on signature and parameter | ||
don't think i use either of those in my code? | |||
AlexDaniel | ah | ||
timotimo | anyway | ||
this new accepts method is super fantastic | |||
AlexDaniel | benchable6: 94780d7,2c552d9,HEAD enum Foo <Bar Baz Quux>; my int $foo; for Foo.roll(10_000) { when Quux { $foo = $foo + 1 } }; | ||
benchable6 | AlexDaniel, starting to benchmark the 3 given commits | ||
AlexDaniel, benchmarked the given commits, now zooming in on performance differences | 22:10 | ||
AlexDaniel | come on benchable, I know which commit it is :) | ||
benchable6 | AlexDaniel, gist.github.com/1e21854ada69394ea7...25c0b233ea | ||
AlexDaniel | timotimo: actuallyā¦ yesā¦ | 22:11 | |
timotimo: looks like noise :| | |||
benchable6: 94780d7,2c552d9 enum Foo <Bar Baz Quux>; my int $foo; for Foo.roll(10_000) { when Quux { $foo = $foo + 1 } }; | |||
benchable6 | AlexDaniel, starting to benchmark the 2 given commits | ||
AlexDaniel, benchmarked the given commits, now zooming in on performance differences | |||
AlexDaniel, Ā¦94780d7: Ā«0.2092Ā» Ā¦2c552d9: Ā«0.1793Ā» | |||
timotimo | it's probably not the best idea to use roll there | ||
AlexDaniel | benchable6: 94780d7,2c552d9 enum Foo <Bar Baz Quux>; my int $foo; for Foo.roll(10_000) { when Quux { $foo = $foo + 1 } }; | ||
benchable6 | AlexDaniel, starting to benchmark the 2 given commits | ||
AlexDaniel, benchmarked the given commits, now zooming in on performance differences | |||
AlexDaniel, Ā¦94780d7: Ā«0.2122Ā» Ā¦2c552d9: Ā«0.1785Ā» | |||
AlexDaniel | benchable6: 94780d7^,2c552d9^ enum Foo <Bar Baz Quux>; my int $foo; for Foo.roll(10_000) { when Quux { $foo = $foo + 1 } }; | ||
benchable6 | AlexDaniel, starting to benchmark the 2 given commits | ||
AlexDaniel, benchmarked the given commits, now zooming in on performance differences | |||
AlexDaniel, Ā¦94780d7^: Ā«0.2119Ā» Ā¦2c552d9^: Ā«0.2114Ā» | |||
AlexDaniel | whateverā¦ | 22:12 | |
timotimo | benchable6: releases: enum Foo <Bar Baz Quux>; my int $foo; for ^100_000 { $_ = Baz; when Quux { $foo = $foo + 1 } } | ||
benchable6 | timotimo, Ā¦releases:: Ā«Cannot find this revision (did you mean āreleasesā?)Ā» | ||
timotimo | benchable6: releases enum Foo <Bar Baz Quux>; my int $foo; for ^100_000 { $_ = Baz; when Quux { $foo = $foo + 1 } } | ||
benchable6 | timotimo, starting to benchmark the 17 given commits | ||
timotimo, benchmarked the given commits, now zooming in on performance differences | |||
AlexDaniel slaps benchable6 | 22:13 | ||
Cannot coerce NaN to an Int in method y-ticks at /home/bisectable/.rakudobrew/moar-nom/install/share/perl6/site/sources/F589ED5005168E0E2A09F070DB83A3AB0EAA38BC (SVG::Plot) line 436 | 22:15 | ||
/o\ | |||
timotimo | o_O | ||
yikes | |||
AlexDaniel | benchable6: releases enum Foo <Bar Baz Quux>; my int $foo; for ^100_000 { $_ = Baz; when Quux { $foo = $foo + 1 } } | ||
benchable6 | AlexDaniel, starting to benchmark the 17 given commits | ||
AlexDaniel, benchmarked the given commits, now zooming in on performance differences | 22:16 | ||
AlexDaniel | same thing again | ||
benchable6: HEAD^,HEAD enum Foo <Bar Baz Quux>; my int $foo; for ^100_000 { $_ = Baz; when Quux { $foo = $foo + 1 } } | |||
benchable6 | AlexDaniel, starting to benchmark the 2 given commits | ||
AlexDaniel, benchmarked the given commits, now zooming in on performance differences | |||
AlexDaniel, Ā¦HEAD^: Ā«Ā«run failed, exit code = 1, exit signal = 0Ā»Ā» Ā¦HEAD: Ā«Ā«run failed, exit code = 1, exit signal = 0Ā»Ā» | |||
AlexDaniel | timotimo: āCannot assign to an immutable valueā? | 22:17 | |
benchable6: releases enum Foo <Bar Baz Quux>; my int $foo; for ^100_000 { given Baz { when Quux { $foo = $foo + 1 } } } | 22:18 | ||
benchable6 | AlexDaniel, starting to benchmark the 17 given commits | ||
AlexDaniel, benchmarked the given commits, now zooming in on performance differences | 22:19 | ||
timotimo | oh | 22:20 | |
benchable6 | AlexDaniel, gist.github.com/997b48f9b614f23634...6f736e93e5 | ||
timotimo | is that HEAD the right-now-HEAD? | 22:21 | |
AlexDaniel | say 42 | ||
timotimo | like, the commit i just pushed a minute or two ago? | ||
evalable6 | 42 | ||
AlexDaniel | yes | 22:22 | |
timotimo | nice | ||
you see how it's a little faster than it used to be? | |||
but it also was faster a while ago | |||
right, that commit where it does the pretty big spike upwards .. | 22:23 | ||
that's when Numeric.ACCEPTS got a nested scope | |||
i might want to also make Numeric.ACCEPTS faster now | 22:25 | ||
AlexDaniel | Unhandled exception in code scheduled on thread 27 | 22:32 | |
Unhandled exception in code scheduled on thread 30 | |||
too many open files | |||
:| | |||
timotimo | ;( | 22:34 | |
m: say 4.7 / 5.5 | 22:37 | ||
camelia | 0.854545 | ||
timotimo | an acceptable improvement. | ||
the new accepts method won't get jitted it seems, let's see why | 22:43 | ||
huh. it claims it can jit it | 22:45 | ||
perhaps only when it's profiling? :\ | |||
Geth | rakudo/nom: 89457f8d57 | (Timo Paulssen)++ | src/core/Numeric.pm make Numeric.ACCEPTS(Any) about 15% faster |
22:50 | |
rakudo/nom: e0e0800897 | (Timo Paulssen)++ | src/core/Numeric.pm accidentally committed wrong version |
|||
timotimo | maybe there's another few percent to be had by rewriting in nqp, or by adding a new candidate that's tighter | 23:28 |