|
00:41
tgt joined
00:54
tgt joined
01:05
colomon joined
01:28
benabik joined
01:55
tgt joined
02:05
FROGGS_ joined
02:56
tgt joined
04:59
tgt joined
05:44
ingy joined
06:00
tgt joined
07:01
tgt joined
08:01
tgt joined
08:48
odc joined
09:30
tgt joined
09:42
tgt joined
10:56
donaldh joined
|
|||
| dalek | arVM: 3ef533d | (Timo Paulssen)++ | src/strings/ops.c: a more general fastpath for flattening ropes. |
12:12 | |
| timotimo | jnthn: does it seem like a bad idea to put the string allocation counter next to nursery_fromspace and nursery_tospace? | 12:13 | |
| struct memory layout wise? | |||
| and cache lines and stuff? | |||
| jnthn | timotimo: I doubt they'll be accessed that close in time | 12:14 | |
| timotimo: So I think it doesn't overly matter here. | |||
| timotimo | should i put it at the end of the struct? | ||
| jnthn | Well, maybe put it near other memory management related bits, for the sake of humans :) | 12:15 | |
| timotimo | mhhh sake | 12:16 | |
| i should try that some time | |||
| what's a good place to put the constant i should compare to? allocate.h has the function to add pressure | 12:17 | ||
| jnthn | I tried it once and can't wine against the experience... | ||
| timotimo: Near the function that adds pressure :) | |||
| timotimo: uh, in the .h though :) | |||
| So, that same one | |||
| timotimo | aye. | 12:18 | |
| jnthn | kingjamesprogramming.tumblr.com/pos...end-of-the :) | 12:20 | |
| timotimo | %) | ||
| it seems like i should store MVMGCStatus_INTERRUPT to tc->gc_status | 12:21 | ||
| is that what i use MVM_STORE for? | 12:22 | ||
| or do i CAS that? | |||
| jnthn | Well, you know it's your own, which simplifies things since you don't race with yourself. | 12:23 | |
| So MVM_store will do it | |||
| timotimo | ah | 12:24 | |
| good | |||
| jnthn: are we certain that enter_from_interrupt actually works? | 12:37 | ||
| jnthn | timotimo: Umm | 12:38 | |
| timotimo: It may make an assumption... | |||
| (That another thread set the flag.) | 12:39 | ||
| timotimo | oh | ||
| jnthn | It certainly works as in we wouldn't be able to pass the concurrency tests we do if it didn't. | ||
| timotimo | hold on. | 12:40 | |
| i may have done something dumb .. .again :) | |||
| jnthn: so, MVMGCStatus_SHOULD, or something like that? | 12:48 | ||
| or _INTERRUPTED_SELF? | |||
| jnthn | Maybe the latter... | 12:51 | |
| timotimo | done | 12:52 | |
| jnthn | Do make sure you didn't regress threads.t and locks.t in moar-conc with these changes. | ||
| timotimo | ah. i check that only in GC_SYNC_POINT, which might be wrong. | 12:53 | |
| jnthn | Yeah, this may cause issues...hm. | ||
| timotimo | yeah | 12:54 | |
| does rerouting enter_from_interrupt directly to enter_from_allocator seem like a bad idea to you, too? :) | |||
| jnthn | We may be better off allowing self-interupting. But not sure. And can't be now. | ||
| timotimo | allocate_nursery checks for !=0, so at a normal allocation, it'll enter_from_interrupt | 12:57 | |
| ... do we even reset the gc status? o_O | 12:59 | ||
| i may have just reproduced nwc10++'s torture tester by accident %) | 13:00 | ||
| ah, we CAS it from INTERRUPT to NONE | 13:03 | ||
|
13:03
Ven joined
|
|||
| timotimo | but if it's INTERRUPTED_SELF, the cas will infiniloop instead | 13:03 | |
| jnthn | Right | 13:04 | |
| I think adding an extra status will mess things up | 13:05 | ||
| timotimo | it doesn't infiniloop, it just doesn't swap and returns immediately | ||
| while the code doing it doesn't expect that | |||
| should i if(cas(try to change INTERRUPT to NONE) == INTERRUPTED_SELF) { cas(try to change INTERRUPTED_SELF to NONE) }; ? | 13:06 | ||
| that's ... not really atomic %) | |||
| it does, however, now gc a bunch of times | |||
| jnthn | Nok don't screw with csa stuff unless yo're good enough. | ||
| *as | 13:07 | ||
| *cas, even | |||
| If you're asking, you're going to get it wrong. | |||
| timotimo | aye :) | ||
| i put a second cas below the INTERRUPT to NONE change that changes INTERRUPTED_SELF to NONE, but it really does seem terribly fragile | |||
| jnthn | (I'm doing too many other things at the moemnt to work it out...this stuff is too hard to multi-task on...) | ||
| timotimo | what i could do is set the state to INTERRUPT as soon as we've seen it's INTERRUPTED_SELF and *then* enter_from_allocator | 13:08 | |
| jnthn | It may be we can fuse enter_from_allocator and enter_from_interupt into a single enter that does the right thing. | ||
| timotimo | i've changed the manual check + invocation in gc_allocate_nursery to a SYNC_POINT instead | ||
| whoops, integer overflow %) | 13:09 | ||
| moritz | .oO( us an Int ) |
13:10 | |
| timotimo | now it gets up to 3 gigabytes of ram used and then collects pretty often | 13:11 | |
| dinner time :) | 13:12 | ||
| 270.30user 11.18system 4:42.56elapsed 99%CPU (0avgtext+0avgdata 3378420maxresident)k | 13:51 | ||
| perl6-m -e 'my $s = ""; for (1 .. 1000000) { $s ~= "x" }; 1' | |||
| as soon as it hits the set value for the threshold, it'll start collecting very often for this very test. | 13:52 | ||
| in this case 3 gb is the threshold for string allocations | |||
| (for string allocations to trigger a gc run) | 13:53 | ||
| but since it would try to allocate 3gb of string directly after the collection anyway, it's the choice between getting killed by memory pressure or becoming very slow :P | |||
| if there was a way to signal "do a minor collection only" so it would skip major collections, that might be nice. | 13:54 | ||
|
16:25
rurban_ joined
17:45
rurban joined
18:41
tgt joined
19:38
lizmat_ joined
19:44
__rnddim__ joined
19:48
synopsebot joined
19:58
_sri joined
20:00
lue joined
20:01
japhb joined
20:05
_sri joined
20:13
japhb__ joined,
colomon_ joined
20:26
tgt joined
20:54
benabik joined
21:23
lizmat joined
21:24
ggoebel1118 joined
21:32
colomon_ joined
23:29
tgt joined
|
|||