smoke string_gc_encapsulate branch | Parrot 2.7.0 "Australian King" Released! | parrot.org Log: irclog.perlgeek.de/parrot/today | Nopaste: nopaste.snit.ch:8001 | close 25 tickets; remove deprecated items (especially CodeString); record deprecations; polish for 2.8 release
Set by moderator on 16 September 2010.
Paul_the_Greek If we trust the sizes, then we ought to be able to define the casting macros and complain if we can't. 00:00
00:00 mikehh left
NotFound Paul_the_Greek: the non uppercase names at one point was the recommended way for extenders. 00:01
Paul_the_Greek Yes, they look official. 00:02
NotFound Then people started to worry about why some header files looked different and were not headerized, and all changed. 00:03
00:04 whiteknight left 00:15 mikehh_ is now known as mikehh
mikehh opbots, names 00:15
00:22 nwellnhof joined 00:23 Paul_the_Greek left
nwellnhof the stress strings performance "regression" was probably caused by r48585. it changed the GC threshold back to a more conservative value. 00:28
pmichaud git bisect says that rakudo's unicode failures started with r49018 00:29
nwellnhof pmichaud: then it's my fault :(
chromatic The loss of encoding information, or an off by one error? 00:30
nwellnhof what are the failures exactly?
pmichaud I don't know what the actual problem is.
nwellnhof: some utf8 strings aren't being managed properly.
here's an example:
gist.github.com/583439 # example failure with r49018 00:31
note the o+diaeresis at the end of the variable name
if that variable name is made longer, it works
nwellnhof i think i found the problem. 00:32
pmichaud so it sounds like a length calculation error somewhere
nwellnhof strings from concat get the wrong encoding.
fix is coming up... 00:33
00:34 theory left
nwellnhof pmichaud: since a week or so, i get an infinite loop in Rakudo's make spectest 00:34
somewhere in S03 00:35
pmichaud can you narrow it down a bit further than that?
are you running tests in parallel?
nwellnhof i have to retest, wait a little... 00:36
pmichaud btw, this comment:
+ /* PObj is a copy of a string that doesn't own the string buffer */
+ PObj_is_string_copy_FLAG = POBJ_FLAG(10),
worries me a lot.
nwellnhof why?
pmichaud does one string "own" a string buffer? Is there something to prevent the string buffer from being reclaimed when the owner disappears and the copy still exists? 00:37
nwellnhof yes, there's exactly one string that owns a buffer. but it's not tied into the GC. 00:38
pmichaud when does the buffer get reclaimed?
nwellnhof by the GC. but that has nothing to do with the new string flag. 00:39
pmichaud okay.
nwellnhof the new string "ownership" only means that one string is allowed to extend its content into preallocated space. 00:40
pmichaud (not "okay, I understand and agree" but "okay, I'll take your word for it")
00:41 ruoso joined
mikehh All tests PASS (pre/post-config, make corevm/make coretest, smoke (#66), fulltest) at r49073 - Ubuntu 10.10 beta {g++-4.5 with --optimize) 00:41
dalek rrot: r49074 | nwellnhof++ | trunk/src/string/api.c:
[str] Set correct encoding in Parrot_str_concat
00:49
nwellnhof pmichaud: i get an infinite loop when i evaluate (10 R... 1, 3) 00:51
test 33 in t/spec/S03-metaops/reverse.t 00:53
bacek_at_work nwellnhof, "rm -rf t/spec" 00:56
Perl6 spectest was migrated to github.
You probably have stale copy from Pugs svn 00:57
00:57 kid51 joined
nwellnhof that's it, bacek++ 00:58
kid51 ~~
kid51 studies Parrot Foundation documents 00:59
01:03 eternaleye_ is now known as eternaleye 01:31 dngor left 01:33 dngor joined
pmichaud r49074 needs a test, perhaps. 01:41
nwellnhof i just finished Rakudo's spectest
chromatic A test case in Parrot's suite. What would trigger it? 01:42
nwellnhof t/spec/S05-mass/properties-derived.rakudo failed, but that always fails for me. seems to be related to the ICU library.
and the gray code test in t/spec/integration/99problems-41-to-50.rakudo failed. 01:43
# got: '000 001 011 010 111 110 100 101'
# expected: '000 001 011 010 110 111 101 100'
ah yeah, a test case for r49074 01:44
i write one 01:45
pmichaud the 41-to-50 failure is a known failure 01:53
I'll either fix or fudge it here in a bit.
r49074 looks good here so far (up to S32-* tests) 01:54
kid51 r 49073 make fulltest PASS on Linux/i386 01:55
chromatic 49074 should be a little faster on the spectests, too. Faster than 49000 anyhow. 01:56
02:20 Andy joined, kid51 left 02:24 davidfetter left
dalek rrot: r49075 | nwellnhof++ | trunk/t/op/string_cs.t:
[str] Add test for r49074
02:30
02:35 janus left
dalek TT #1535 closed by cotto++: trac+git demo site 02:51
TT #1535: trac.parrot.org/parrot/ticket/1535
kudo: 2c8bb89 | pmichaud++ | build/PARROT_REVISION:
Bump PARROT_REVISION.
02:52 bluescreen left 03:32 contingencyplan left 03:38 theory joined, gottreu joined 03:40 jsut_ joined 03:45 jsut left 03:56 janus joined
dalek TT #1477 closed by plobsing++: [embed] expose non-vararg-based sub/method call-ins 03:59
TT #1477: trac.parrot.org/parrot/ticket/1477
plobsing roadmap? 04:03
purl rumour has it roadmap is to see parrot roadmap
plobsing parrot roadmap?
purl hmmm... parrot roadmap is icanhaz.com/parrotroadmap or trac.parrot.org/parrot/roadmap
plobsing where is that googledocs roadmap? 04:06
btw, the icanhaz.com link is 404 04:07
04:12 nwellnhof left 04:58 Khisanth left 05:01 Khisanth joined 05:04 jsut joined 05:08 jsut_ left 05:14 rurban_ joined 05:16 rurban left, rurban_ is now known as rurban 05:50 davidfetter joined 05:55 Andy left 06:05 plobsing left 06:13 gottreu left 06:16 chromatic left 06:34 uniejo joined 06:49 esskar left 06:52 esskar joined
pmichaud rakudo spectest times on r48933: 22m23s (real) 43m13 (user) 06:58
rakudo spectest times on r49074: 20m06s (real) 38m46 (user)
Excellent work, everyone.
cotto is becoming more convinced that stealing speed.pypy.org would be a really good idea, if possible 07:38
or speedcenter, as the software behind it is called
Tene pmichaud: rakudo.org/status hasn't been updated cince early July, looks like? 07:41
07:49 contingencyplan joined, fperrad joined 07:52 contingencyplan left 07:54 contingencyplan joined
mikehh All tests PASS (pre/post-config, make corevm/make coretest, smoke (#74), fulltest) at r49075 - Ubuntu 10.10 beta (gcc-4.5) 07:55
07:55 contingencyplan left 08:01 contingencyplan joined 08:04 contingencyplan left 08:08 contingencyplan joined 08:09 contingencyplan left 08:12 contingencyplan joined
dalek rrot: r49076 | gerd++ | trunk/docs/project/release_manager_guide.pod:
indicate to have run "make" with the old version number
09:14
lscript: 86a4ba4 | fperrad++ | dynext/pmc/wmls (5 files):
logical VTABLES are gone, see trac.parrot.org/parrot/changeset/49012
09:42
rrot: r49077 | fperrad++ | trunk/src/pmc (2 files):
[pmc] honors HLL type
09:48
10:35 ruoso left 11:04 fperrad left 12:02 whiteknight joined 12:06 lucian joined, uniejo left 12:10 contingencyplan left 12:22 ruoso joined 12:27 bluescreen joined 12:32 uniejo joined
dalek TT #1432 closed by whiteknight++: Remove 2-argument math ops 12:43
TT #1432: trac.parrot.org/parrot/ticket/1432
rrot: r49078 | whiteknight++ | branches/stdhandle_meths:
Creating a branch to work on the issues raised in TT #264
12:52
12:56 uniejo_ joined, uniejo left 12:58 patspam joined 13:14 rurban_ joined 13:16 rurban left, rurban_ is now known as rurban 13:18 Psyche^ joined, Patterner left, Psyche^ is now known as Patterner
dalek rrot: r49079 | whiteknight++ | branches/stdhandle_meths/src/pmc/parrotinterpreter.pmc:
delete the stdhandles method and add new stdin_handle, stdout_handle, stderr_handle methods
13:26
rrot: r49080 | whiteknight++ | branches/stdhandle_meths/compilers/pct/src/PCT/HLLCompiler.pir:
update uses of stdhandle method in HLLCompiler.pir
rrot: r49081 | whiteknight++ | branches/stdhandle_meths/tools/dev/nci_thunk_gen.pir:
update uses in nci_thunk_gen.pir
p-rx: 8009d57 | pmichaud++ | build/PARROT_REVISION:
Bump PARROT_REVISION.
13:38
p-rx: c9a989b | pmichaud++ | / (2 files):
Fix negated zero-width enumcharlist at end of string (fixes issue #9 on github). Discovered by moritz++.
p-rx: ccc2e3f | pmichaud++ | src/stage0/ (4 files):
Update bootstrap.
13:39 bluescreen left 13:41 uniejo_ left
NotFound whiteknight: ping 13:43
High frequency sonar
dalek rrot: r49082 | pmichaud++ | failed to fetch changeset:
[nqp-rx]: Update bootstrap with fix for negated charclass at end of string.
13:44
13:45 davidfetter left
NotFound msg whiteknight See my last comment on TT #264 before investing more time and effort 13:46
purl Message for whiteknight stored.
aloha OK. I'll deliver the message.
dalek kudo: ca4a1d6 | pmichaud++ | build/PARROT_REVISION:
Bump PARROT_REVISION.
13:53 bluescreen joined
whiteknight NotFound: I'm almost done anyway. It wasn't much effort. 13:57
I would prefer methods on the interpreter object instead of the opcodes, so I'm going to argue for that. I can take the fight to the list if necessary
13:59 fperrad joined
atrodo If I do a search on trac for 264, ticket #264 is on the third page of three 14:00
NotFound whiteknight: please wait after the release. 14:11
14:14 davidfetter joined
dalek rrot: r49083 | fperrad++ | trunk/t/dynpmc/rational.t:
[t] refactor with skip_all
14:17
14:51 plobsing joined 14:53 jan left
mikehh atrodo: you need to specify #264 in the trac search and it goes straight there 15:08
atrodo Didn't realize the # was significant... 15:09
mikehh me either - until someone suiggested it 15:10
15:12 nwellnhof joined
moritz typically tipes tt #264 on IRC, and follows the link in the IRC logs :-) 15:14
*types
15:24 Andy joined
dalek rrot: r49084 | fperrad++ | trunk (2 files):
[osutils] add rindex()
15:25
rrot: r49085 | fperrad++ | trunk/runtime/parrot/library/distutils.pir:
[distutils] refactor mk_path_gen_dynpmc with rindex
15:38 nwellnhof left
dalek ast: c19ab2c | KodiB++ | S02-builtin_data_types/set.t:
[set.t] Marked some tests as relevant to RT #77760.
15:40
kudo: da7c7f9 | KodiB++ | / (2 files):
Tweaked Set enough to let us pass set.t.
15:42
TT #103 closed by whiteknight++: No self in PIR invoke VTABLE 15:50
TT #103: trac.parrot.org/parrot/ticket/103
mikehh pmichaud: ping 15:51
16:10 jan joined
dukeleto hola hola hola 16:22
cotto ~~~ 16:25
moritz rakudo: print ~('hola' xx 5)
p6eval rakudo ca4a1d: OUTPUT«hola hola hola hola hola»
pmichaud mikehh: pong 16:28
cotto nice to see some sparc smolder reports 16:29
16:29 lucian left
dukeleto cotto: indeed 16:30
whiteknight it's nice to see some passing sparc smolder reports 16:31
dukeleto touche!
davidfetter hands dukeleto a few acute accents 16:32
16:37 rurban left
mikehh pmichaud: I am getting a codetest failure with ext/nqp-rx/src/stage0/HLL-s0.pir - pod syntax - I can fix it but that doesn't propogate 16:44
pmichaud ext/nqp-rx is supposed to be excluded from codetest, I thought.
HLL-s0.pir is generated code.
mikehh it seems to have removed a =over 4 and a =back from the pod 16:46
pmichaud: I also thought we were going to remove stuff in ext/ from testing, but it seems to just take files from MANIFEST 16:47
pmichaud can you show a diff or context around the =over 4 and =back that are missing? 16:48
pmichaud runs 'make codetest' locally to seek enlightenment
nopaste "mikehh" at 192.168.1.3 pasted "svn diff to get ext/nqp-rx/src/stage0/HLL-s0.pir to pass codetest" (22 lines) at nopaste.snit.ch/23414 16:50
dukeleto mikehh: that is generated code 16:51
mikehh: it shouldn't have to pass codetest
16:52 chromatic joined
dukeleto mikehh: but, methinks it should have valid POD. 16:52
chromatic: greetings
mikehh dukeleto: I agree, but the pod_syntax test seems to take files from MANIFEST
dukeleto mikehh: i can understand checking generated files for valid POD, but not any other code tests. 16:53
mikehh doesn't seem to fail or be run through any other tests 16:54
in fact it doesn;t run through some of the others 16:55
dalek p-rx: df8c49d | pmichaud++ | src/HLL.pir:
Add some pod directives to help out Parrot's "make codetest" target.
chromatic aloha 16:56
I wonder of a very strict C or strict-ish C++ compiler would consider the PL/parrot "I haven't seen this function header!" warnings as errors. 16:57
s/of/if/
dalek TT #1755 closed by fperrad++: Include arbitrary .c and .h files in distutils dynpmc build 16:58
TT #1755: trac.parrot.org/parrot/ticket/1755
dukeleto chromatic: possibly. 17:00
chromatic: i am still working on getting you some more useful benchmark data 17:01
chromatic Thanks. 17:02
dalek rrot: r49086 | fperrad++ | trunk/runtime/parrot/library/distutils.pir:
[distutils] allows .c & .h in dynpmc item, see TT#1755
17:06
whiteknight fperrad++ 17:07
that's going to make some of the PLA configure code much much nicer
pmichaud Idle thought (as I head off to lunch): Would there be some way to get Parrot to tell me how many references there are to a given PMC...? 17:08
(could be calculated)
whiteknight at the moment: no 17:09
17:09 nwellnhof joined
pmichaud it could help in finding large data structures that would otherwise be release-able 17:09
moritz would that be useful?
whiteknight something that might be able to be instrumented with the instrumentation PMCs
jnthn pmichaud: I guess if the gc could be co-opted it could work.
pmichaud: Since it's essentially the same kind of walking 17:10
pmichaud moritz: sure. For example, after we finish compilation, we don't need the parse tree or ast any longer. But right now there's not any way to know what might be holding on to it.
moritz do you know if the parse tree is GC'ed? 17:11
whiteknight the problem is that right now we don't have any where to hold the count of incoming references
pmichaud moritz: I suspect it isn't being GC'ed. 17:12
whiteknight finding a way to add that information without adding an integer per PMC header is the challenge
moritz if we have custom destroy vtables, you maybe could find out
pmichaud whiteknight: I was thinking an opcode
whiteknight: i.e., "count_refs $P0"
jnthn whiteknight: Maybe it should do something like the GC does, but not actually use the GC.
pmichaud which does a mark run, and keeps track of the number of times that $P0 was encountered
and returns that value
chromatic How about stuffing fprintf() in the source code and post-processing the results? 17:13
whiteknight I think they want it on every run, in production
not just as a benchmark
chromatic ... before anyone goes all crazy designing a framework for this sort of thing.
pmichaud I'm thinking as benchmark/debugging aid
jnthn whiteknight: It's more a debugging aid.
pmichaud not production
whiteknight oh, then I misunderstood
pmichaud or, perhaps even better -- a way to trace a mark run
nwellnhof some kind of general GC logging framework would be really useful 17:14
pmichaud yes
nwellnhof also for bug hunting
pmichaud it could be a dynop -- but something that runs through a mark phase and reports back the references/steps
that could be *really* useful.
anyway, time for lunch. 17:15
whiteknight Khairul's instrumentation PMCs could easily do a job like that 17:17
moritz are they merged to trunk?
whiteknight no, not yet.
chromatic Hang on, tracking mark isn't nearly that easy.
whiteknight When I suggested merging, I still thought that his GSoC project involved changes to trunk' 17:18
instead, all his logic is neatly encapsulated into PMCs
moritz that's nice 17:19
whiteknight it is extremely impressive
unfortunately, his project doesn't build at the moment 17:20
dukeleto whiteknight: what error do you get? 17:38
chromatic msg plobsing Some very careful inlining of code in Parrot_hash_thaw() could give Rakudo a ~8-10% startup performance improvement. 17:41
purl Message for plobsing stored.
aloha OK. I'll deliver the message.
dalek rrot: r49087 | nwellnhof++ | trunk/src/string/api.c:
[str] Missing checks for end of string in Parrot_str_unescape_string
17:56
rrot: r49088 | nwellnhof++ | trunk (16 files):
[str] Remove unneeded encoding header files
chromatic Wow, 2.591%. 18:00
nopaste "chromatic" at 192.168.1.3 pasted "Refactoring parrot_hash_put improves hash thawing performance" (187 lines) at nopaste.snit.ch/23416 18:07
chromatic Needs documentation, but that's a sizable improvement of Rakudo startup.
dukeleto nice work! 18:08
chromatic It probably generalizes throughout hash.c.
whiteknight chromatic: that refactor nets 2.59%? 18:12
that's pretty impressive
18:13 contingencyplan joined
chromatic When you work *with* C's type system and not against it, the optimizer kicks in. 18:13
nwellnhof i must be missing something. where are the type related changes in your patch? 18:16
chromatic Mostly in Parrot_hash_thaw.
Avoiding the "Is this a STRING key?" checks pays off.
nwellnhof ah, i didn't look there. i thought it had to do with splitting code out of parrot_hash_put. 18:17
chromatic Step one and step two. 18:18
nwellnhof yes, i see.
chromatic I'll write docs for the new static functions, then commit in two steps. 18:19
Anybody seeing failures in t/spec/S32-num/rat.rakudo, by the way?
nwellnhof and it even cleans up code, IMO
couldn't we use parrot_hash_get_bucket_string in parrot_hash_get_bucket, too?
18:20 fperrad left
chromatic Probably, and it probably is an improvement there too. 18:21
nwellnhof btw, parrot_hash_get_bucket_string *can* return NULL 18:30
chromatic Right.
dukeleto chromatic: what failures are you seetin in rat.rakudo ? 18:32
chromatic: are you running it through fudgeall ? 18:33
chromatic I have an older Rakudo checkout. I'll upgrade in a bit.
moritz remember to rm -rf t/spec/ to allow it to be replaced by a git checkout 18:40
chromatic That I had, fortunately. 18:41
So far so good, as the sanity tests all pass. 18:48
If I'd broken hashes, Rakudo probably wouldn't start correctly. 18:49
whiteknight I definitely think we can still squeeze more performance out of our hashes 19:00
maybe not a hell of a lot more, but there's still some gold to mine 19:01
chromatic We're getting to the type-safe hash functions on the performance list. 19:03
plobsing ~~ 19:05
chromatic moritz, dukeleto, the only failure I saw is t/spec/integration/99problems-41-to-50.rakudo 19:09
pmichaud 41-to-50 is a known failure. 19:22
We should fudge it out for now.
pmichaud does that.
chromatic Excellent. 19:23
pmichaud Done. 19:24
chromatic t/spec/S05-metasyntax/repeat.rakudo #14 was a passing TODO for me too
dalek ast: 39de0eb | pmichaud++ | integration/99problems-41-to-50.t:
Fudge out 41-to-50 gray code test until .reverse is settled.
moritz pmichaud: actually it's a regression... you should file a ticket if you just fudge the test 19:30
pmichaud moritz: I wasn't convinced the original test was correct. 19:34
moritz pmichaud: I asked TimToady
pmichaud feel free to file a ticket then :)
moritz irclog.perlgeek.de/perl6/2010-09-17#i_2837846 19:35
dalek rrot: r49089 | chromatic++ | trunk/src/hash.c:
[Hash] Extracted two funcs from parrot_hash_put.

given a STRING. parrot_hash_store_value_in_bucket() is a reusable way to store a value in a bucket after you've already fetched it. Both of these functions are static. If you ever use them outside of this file, you will incur the wrath of premature optimization.
19:37
rrot: r49090 | chromatic++ | trunk/src/hash.c:
[hash] Optimized Parrot_hash_thaw().

what?" functions from the previous commit in this hot path improves hash thawing for the most common case dramatically and Rakudo startup by some 2.5%.
moritz is pir's inc $I0 in-place? 19:39
whiteknight chromatic: I agree with you about the "pre-alpha" nonsense. What I suppose they meant to say was something along the lines of "preview" or "pre-release" 19:42
or "first public display of code"
chromatic We already have good words for all of those things though. 19:43
"release"
purl "release" is probably pretty moot when only you and people that hack on it are using it
whiteknight chromatic: it's not really a release though
not as I understand it
they're just making their code public for the first time
chromatic Sure, but my argument is why bother? 19:44
whiteknight well, if it's an open-source project, the source needs to go "open" eventually
that doesn't make it a release
the whole statement on their part of it being a "pre-alpha" release was screwey. They used a weird buzzword when they should have said something completely different 19:45
chromatic If people can't use your code, there's no point in releasing-it-but-not-really.
That's pretty much a marketing game to prove that your code exists.
"Our code is worthless, but it does exist! Hooray! Punch line starts over there."
whiteknight they definitely should not have used the word "release". That is obviously a falsehood 19:46
but you can't blame some over-eager, under-experienced college kids to get all the PR terminology right
especially not on their first pre-alpha press release :) 19:47
chromatic No, they're just copying the prevailing... what's the opposite of wisdom?
whiteknight "Windows"
purl "Windows" is a trademark. /.*windows.*/ is not
chromatic The sound and fury of crowds.
whiteknight cacaphony?
cacophony* 19:48
chromatic I like the alliteration.
20:04 whiteknight left
dalek kudo: a90ae93 | pmichaud++ | src/Perl6/Compiler.pir:
Restore '-c' option to check a program's syntax without executing it.
20:33
kudo: 9e46fe0 | pmichaud++ | src/core/Any-list.pm:
Set Any.reverse to flatten the invocant before reversing.
ast: 1210d8f | pmichaud++ | integration/99problems-41-to-50.t:
Unfudge gray() test in 99problems-41-to-50.t .
kudo: a204ba8 | moritz++ | src/core/Str.pm:
avoid calling .subst in str2num-rat
20:39
ast: 5b48fa0 | moritz++ | S05-metasyntax/repeat.t:
unfudge test for catching p5 style general quantifiers in regexes
plobsing chromatic: Parrot_hash_thaw, as an optimization opportunity rakudo, is mostly mined out. Most hashes thawed have 2 or fewer entries, and therefore, the loop behaviour is not that which dominates. Only deciding what is to be done matters there. 20:43
I even cheated and cached the vtable entry to call to no avail
jnthn plobsing: ooc, what's in those thawed hashes? 20:44
plobsing String => Int for lexpads.
a non-obvious optimization PCT could do is to lift lexicals to higher scopes where legal to bunch lexicals together more 20:45
that would create fewer hashes with more content, which should be faster
chromatic plobsing, the function calling overhead is actually significant there.
plobsing chromatic: which function calls? 20:46
chromatic Parrot_ImageIO_shift_integer and Parrot_ImageIO_shift_string.
plobsing that's how I cheated 20:47
fetch_entry = info->vtable->shift_{integer,string,pmc}
jnthn plobsing: ah, OK, makes sense.
chromatic Did you mark it const? 20:48
plobsing no. I could try. but it only gets assigned at the top, and the assembly doesn't appear to be reloading it.
chromatic My thought was to put all of these functions in their own source file and let a smart compiler figure it all out. 20:49
That'd make a huge mess though.
plobsing can't mark it const. apparently assigning in different branches of a switch don't count as single assignment only 20:50
chromatic You could make a fetch_string, fetch_integer, etc. 20:52
Even only optimizing for the STRING/int case is significant.
That's ~12% of startup time for Rakudo. 20:53
10.75% now 20:54
nopaste "plobsing" at 192.168.1.3 pasted "[PATCH] vtable cheating" (79 lines) at nopaste.snit.ch/23419 20:55
chromatic To make it const, cheat: make a static function which returns the right value. 20:57
dalek rrot: r49091 | mikehh++ | trunk/ext/nqp-rx/src/stage0/HLL-s0.pir:
fix codetest failure - tidy up pod syntax (this has been pushed upstream)
21:02
21:04 bluescreen left
jnthn chromatic: 10.75% of our startup time is on hash thawing? 21:06
21:08 whiteknight joined
plobsing chromatic: did the const thing. didn't help much. 21:16
chromatic yes. 21:20
pmichaud this morning I discovered that rakudo startup accounts for 22.6% of "make spectest" 21:26
chromatic It's less now. 21:28
pmichaud starts another set of measurement runs to find out. 21:29
21:34 davidfetter left
mikehh All tests PASS (pre/post-config, make corevm/make coretest, smoke (#85), fulltest) at r49091 - Ubuntu 10.10 beta {g++-4.5 with --optimize) 21:42
21:42 davidfetter joined 21:45 hercynium joined
luben good evening people 21:53
whiteknight hello luben
luben chromatic++ # for hash thaw optimizations 21:55
21:55 patspam left
luben I do not think that our main problem now are hashes - we could squeeze max 5-10% perfirmance improvement from optimizations in hashes 21:59
If we make a better GC we could improve our performance orders of magnitude
plobsing ImageIO sucks. it converts between pointer into buffer and index within buffer and back for every item thawed. 22:01
luben may be this is too optimistic, gut working on the GC will pay better in terms of performance
plobsing that's why it shows up so high in the callgrind costs 22:02
luben plobsing, you are right 22:03
22:04 ruoso left
plobsing it needs rewriting. either to play nice with strings and be dog slow, or to cheat more with strings and be much faster. 22:05
22:09 pjcj left, preflex left, pjcj joined 22:10 cosimo left, cosimo joined, bluescreen joined 22:12 contingencyplan left
luben plobsing, about this dilema - there are talks, that we are going to refactor STRING storage, so cheating will be very temporal solution 22:14
We will need to change that again afres STRING storage refactor
now 75% of the hash_that is in ImageIO_shift_string/integer 22:16
22:16 bluescreen left 22:17 preflex joined
chromatic If a couple of hours of cheating now gives us a couple of percent of performance, that's worth it. 22:19
plobsing luben: ultimately, I want to get thawing packfiles completely away from strings. they're a PITA.
luben plobsing, I have same idea
jnthn I did some packfile stuff int he past and never really liked the use of strings there either, fwiw.
luben couldn't we rewrite it in terms of ByteBuffer
plobsing luben: um no. maybe a custom OpcodeTBuffer 22:20
jnthn I think the important thing is that whatever it's accessed as, it should be able to be pointed at a chunk of mmaped memory.
plobsing but another layer is another layer. it will be slower.
luben jnthn, +1 about mmaping 22:21
nwellnhof yeah, we have to cut down on layers.
what parts of the string API does packfile thawing use? 22:22
plobsing it just kinda begrudgingly uses the Buffer/STRING struct
it gets no benefit from strings 22:23
nwellnhof but that shouldn't be a performance problem
plobsing it is when they can be relocated under you and you have to keep checking against that 22:24
I'm rewriting to use pinned strings
the common case is the strings being external, which never move
22:27 baest_ joined
dalek rrot: r49092 | nwellnhof++ | trunk (9 files):
[gc] Command line option for dynamic GC threshold

could be freed but are not yet collected to a percentage of total memory that is actually needed. Default is 25, maximum is 1000. Increasing the dynamic threshold results in fewer GC runs and more memory consumption. Usage: parrot --gc-threshold=50 parrot --gc-threshold=200
22:27
22:27 bluescreen joined
whiteknight nwellnhof: There was a ticket somewhere that requested that 22:28
nwellnhof was there?
dukeleto aloha, msg chromatic the stress_strings.pir slowdown happens after 2.7.0 and before r49088 22:29
aloha dukeleto: OK. I'll deliver the message.
cotto and parseflags_minimal becomes less so
22:30 preflex left
nwellnhof cotto: yeah, this is all a bit ad-hoc 22:30
but i can fix it if someone tells me how
dukeleto aloha, msg chromatic smaller range : the stress_strings.pir slowdown happens after 2.7.0 and before r48758
22:30 cosimo left
aloha dukeleto: OK. I'll deliver the message. 22:30
22:30 baest left, cosimo joined
sorear aloha, tell p6eval this is a test of cross-chatnet messaging 22:31
aloha, msg p6eval this is a test of cross-chatnet messaging
aloha sorear: OK. I'll deliver the message.
sorear: Okay.
sorear: OK. I'll deliver the message.
sorear: Okay.
nwellnhof dukeleto: try stress_strings.pir with r49092 and the new --gc-threshold option
dukeleto nwellnhof: what is --gc-threshold ? 22:32
whiteknight nwellnhof: TT #827
I think --gc-threshold that you just implemented may satisfy that 22:33
sorear nqp: say(2+2)
p6eval nqp: OUTPUT«4␤»
whiteknight (or, come close)
nwellnhof it's a new command line options. r48585 changed that value from 50 to 25.
22:33 preflex joined
dukeleto nwellnhof: interesting 22:33
nwellnhof whiteknight: i think #827 is a bit different. it's about the total amount memory ever allocated. 22:34
gc-threshold is more like the relative amount of memory wasted
time ./parrot --gc-threshold 25 examples/benchmarks/stress_strings.pir 22:35
real 0m6.912s 22:36
time ./parrot --gc-threshold 100 examples/benchmarks/stress_strings.pir
real 0m5.352s
luben nwellnhof, ./parrot /usr/src/rakudo/perl6.pbc -e '' segfaults here after gc-treshild commit 22:38
sorear I am thinking that tell does not work at all ...
luben amd64,gcc-4.5 (now compiling with gcc-4.4) 22:39
nwellnhof luben: can you tell where it segfaults?
luben nopaste comming 22:40
pmichaud with r49091, rakudo startup takes 22.8% of total spectest time (a greater percentage, but less overall time than r49074 took)
nopaste "luben" at 192.168.1.3 pasted "segfault" (34 lines) at nopaste.snit.ch/23421
luben this is on linux amd64, gcc-4.4 22:41
pmichaud overall spectests are 1.4% faster (17 seconds) with r49091 than r49074.
(comparison between r49074 and r49091 could be different due to other factors.) 22:42
(so might not be terribly meaningful at this level)
nwellnhof luben: that's strange. did you rebuild rakudo?
luben yes
I'll try again
ops, my fault... rakudo was reading installed files 22:43
sorry for the false alarm
nwellnhof no problem
22:46 patspam joined, patspam left
luben my fast tests here showed that default gc-threshold of 25 is too conservative 23:02
here is a quick chart luben.spnet.net/gc-threshold.png 23:04
measured is rakudo startup time
nwellnhof luben++ # for his fast charting skills 23:05
a more GC-heavy benchmark would be more interesting though 23:06
luben what i could test ?
nwellnhof maybe examples/benchmarks/stress_strings.pir 23:07
luben ok. coming in a minute 23:08
plobsing luben: is that benchmark time? how does memory consumption go?
luben plobsing, yes, this is time... not measured mem consumption
nwellnhof is there an easy way to measure maximum memory consumption?
plobsing it's a memory consumption/cpu time tradeoff. knowing both curves is important 23:09
dukeleto nwellnhof: my benchmarking script doesn't allow for passing command line args to some but not others, so gc-threshold itsn't going to help me :( 23:10
plobsing nwellnhof: probably read from somewhere under /proc (linux only) 23:11
nwellnhof plobsing: yes, but ideally you would have to poll that somehow before every GC. 23:13
luben luben.spnet.net/gc-threshold-string.png
here is the new benchmark
fothe new benchmark is time for execution of examples/benchmarks/stress_strings.pir 23:14
plobsing nwellnhof: why? can't we simply check that at the end? 23:17
sure GC *can* release memory back to the system, but it rarely does. especially in a simple benchmark that just checks memory consumption of startup 23:18
nwellnhof plobsing: accurately measuring memory usage is really tricky. the GC does release string memory all the time, for example. and i'm not really interested in startup benchmarks here. 23:19
i could simply use the internal GC stats, of course. but it would be nice if i could compare them to real statistics from the kernel. 23:21
plobsing nwellnhof: write a kernel module? 23:24
luben ok, another quick and naĆÆve stats measuring speed/mem usage of simple perl6 program - "sleep 10" is comming in a minte 23:25
nwellnhof plobsing: the data in /proc/self/smaps should be enough. especially the "dirty" values. 23:26
bacek aloha, humans 23:28
23:29 kid51 joined
luben here is the new chart - the blue time is execution time in ms, the red line in resident size (RSS) MB * 6 (in order to plot them on the same meaningfull chart) 23:33
luben.spnet.net/gc-time-mem.png
whiteknight aloha, bacek 23:37
nwellnhof luben: is the last one for rakudo startup or stress_strings? 23:38
luben rakudo startup
bacek hi whiteknight 23:39
luben I could not find how to measure process max mem consumption
whiteknight bacek: hat string_gc_encapsulate branch did get merged to trunk? 23:40
bacek whiteknight, yes
23:40 Paul_the_Greek joined
whiteknight okay, it looked like there was some confusion 23:40
Paul_the_Greek Good evening, folks-for-whom-it-is-evening.
whiteknight good work on that, by the way
hello Paul_the_Greek
Paul_the_Greek Hey whiteknight.
purl whiteknight is mailto:wknight8111@gmail.com or the grand master funk or wknight8111.blogspot.com/
Paul_the_Greek whiteknight: What do you think about testing for Inf/NaN when converting floats to integers? 23:42
bacek meh... Bloody svn...
whiteknight Paul_the_Greek: I have to believe that the particular operation of converting the two happens sufficiently rarely that we can add an extra check there without kiling performance 23:43
Paul_the_Greek Probably true. I think it might be tricky to find every place we do it.
luben bacek, indeed 23:44
23:46 zostay left
Paul_the_Greek 179 occurrences of (FLOATVAL) in the system. 23:46
mikehh bacek: ...not for very much longer ... :-} 23:48
23:49 davidfetter left
bacek holy shit... git-svn committing merge as set of individual commits from trunk... 23:51
dalek rrot: r49113 | bacek++ | branches/gc_massacre/runtime/parrot/library/pcre.pir:
[pcre] Add library name genned by install of pcre 8.10 from source.
23:52
bacek oookey. I'll fix it later. Time to go.
rrot: r49114 | bacek++ | branches/gc_massacre/DEPRECATED.pod:
Add deprecation notice for fixed_8 encoding.
rrot: r49115 | bacek++ | branches/gc_massacre/src/packfile/pf_items.c:
Fix r48994
rrot: r49116 | bacek++ | branches/gc_massacre/src/pmc (2 files):
implement Boolean init_int vtable and use it in FixedBooleanArray
rrot: r49117 | bacek++ | branches/gc_massacre/config/init/hints/mswin32.pm:
When using MSVC, always use lib.exe for static libraries
rrot: r49118 | bacek++ | branches/gc_massacre (2 files):
Use fixed size allocator for small hashes
rrot: r49119 | bacek++ | branches/gc_massacre/src/pmc/bytebuffer.pmc:
reintroduce ByteBuffer string result validation deleted in r48889, the catching tests were passing for wrong reasons
rrot: r49120 | bacek++ | branches/gc_massacre/runtime/parrot/library/URI/Escape.pir:
Use find_encoding instead of find_charset in URI::Escape
23:53
rrot: r49121 | bacek++ | branches/gc_massacre/src (2 files):
Don't use STRING_equal yet
rrot: r49122 | bacek++ | branches/gc_massacre/docs/project/release_manager_guide.pod:
pencil in mikehh for the Feb release. He volunteered and didn't specify. 3.0 is going to be a biggy, so I'm hoping somebody specifically requests it
mikehh hey what happened to r49093 - r49112 23:56
sorear dalek didn't report them, but they exist in the repo 23:59