- 21 Jan, 2016 1 commit
-
-
mlippautz authored
Also restrict how many pages are swept during slow path allocation. BUG=chromium:524425 LOG=N Review URL: https://codereview.chromium.org/1596343004 Cr-Commit-Position: refs/heads/master@{#33435}
-
- 12 Jan, 2016 1 commit
-
-
mlippautz authored
We use a scratchpad to remember visited allocation sites for post processing (making tenure decisions). The previous implementation used a rooted FixedArray with constant length (256) to remember all sites. Updating the scratchpad is a bottleneck in any parallel/concurrent implementation of newspace evacuation. The new implementation uses a HashMap with allocation sites as keys and temporary counts as values. During evacuation we collect a local hashmap of visited allocation sites. Upon merging the local hashmap back into a global one we update potential forward pointers of compacted allocation sites. The scavenger can directly enter its entries into the global hashmap. Note that the actual memento found count is still kept on the AllocationSite as it needs to survive scavenges and full GCs. BUG=chromium:524425 LOG=N R=hpayer@chromium.org Review URL: https://codereview.chromium.org/1535723002 Cr-Commit-Position: refs/heads/master@{#33233}
-
- 08 Jan, 2016 1 commit
-
-
hpayer authored
BUG=chromium:574953 LOG=n Review URL: https://codereview.chromium.org/1570443004 Cr-Commit-Position: refs/heads/master@{#33179}
-
- 18 Dec, 2015 1 commit
-
-
mlippautz authored
This CL prepare newspace evacuation for parallel execution wrt. to actual allocations. The priority for allocations is: * Try to allocate from LAB if objects are below kMaxLabObjectSize * Allocate directly (synchronized) from newspace for larger objects. * Fall back to old space allocation (which will be backed by a local compaction space in future). Semantical change: Previously we did fall back to regular new space promotion if we are OOM in old space. With this CL we fall back to new space promotion, which could fail because of fragmentation, again leading to an old space allocation that finally bails into OOM. Newspace evacuation is still single threaded and requires further changes to allocation site tracking. BUG=chromium:524425 LOG=N Review URL: https://codereview.chromium.org/1487853002 Cr-Commit-Position: refs/heads/master@{#32970}
-
- 16 Dec, 2015 1 commit
-
-
mlippautz authored
Tests for * aborting a full page. * partially aborting a page. * partially aborting a page with pointers between aborted pages. * partially aborting a page with store buffer entries. Also introduces force_oom() which prohibits a old space to expand BUG=chromium:524425 LOG=N CQ_EXTRA_TRYBOTS=tryserver.v8:v8_linux_nosnap_rel,v8_linux_nosnap_dbg,v8_win_nosnap_shared_rel,v8_win_nosnap_shared_compile_rel Review URL: https://codereview.chromium.org/1518803005 Cr-Commit-Position: refs/heads/master@{#32899}
-
- 03 Dec, 2015 1 commit
-
-
ofrobots authored
Inline allocations performed during mark compact aren't real allocations. They should not trigger inline-allocation-observer notifications. R=hpayer@chromium.org, ulan@chromium.org BUG= Review URL: https://codereview.chromium.org/1465223009 Cr-Commit-Position: refs/heads/master@{#32566}
-
- 02 Dec, 2015 1 commit
-
-
hpayer authored
Reland of [heap] Cleanup mark bit usage. (patchset #1 id:1 of https://codereview.chromium.org/1490753003/ ) Reason for revert: Reland after fixing the potential root cause of the canary crasher. Original issue's description: > Revert of [heap] Cleanup mark bit usage. (patchset #1 id:1 of https://codereview.chromium.org/1474203003/ ) > > Reason for revert: > Still investigating bad canary. > > Original issue's description: > > [heap] Cleanup mark bit usage. > > > > BUG= > > > > Committed: https://crrev.com/5874ac783ff9bc4bb4b2fda81f5077f06619f96c > > Cr-Commit-Position: refs/heads/master@{#32362} > > TBR=mlippautz@chromium.org > NOPRESUBMIT=true > NOTREECHECKS=true > NOTRY=true > BUG= > > Committed: https://crrev.com/d3faef8658598e68331208b5a1846ac1c250cb49 > Cr-Commit-Position: refs/heads/master@{#32461} TBR=mlippautz@chromium.org NOPRESUBMIT=true NOTREECHECKS=true NOTRY=true BUG= Review URL: https://codereview.chromium.org/1488393003 Cr-Commit-Position: refs/heads/master@{#32502}
-
- 01 Dec, 2015 1 commit
-
-
hpayer authored
Revert of [heap] Cleanup mark bit usage. (patchset #1 id:1 of https://codereview.chromium.org/1474203003/ ) Reason for revert: Still investigating bad canary. Original issue's description: > [heap] Cleanup mark bit usage. > > BUG= > > Committed: https://crrev.com/5874ac783ff9bc4bb4b2fda81f5077f06619f96c > Cr-Commit-Position: refs/heads/master@{#32362} TBR=mlippautz@chromium.org NOPRESUBMIT=true NOTREECHECKS=true NOTRY=true BUG= Review URL: https://codereview.chromium.org/1490753003 Cr-Commit-Position: refs/heads/master@{#32461}
-
- 27 Nov, 2015 1 commit
-
-
hpayer authored
BUG= Review URL: https://codereview.chromium.org/1474203003 Cr-Commit-Position: refs/heads/master@{#32362}
-
- 24 Nov, 2015 1 commit
-
-
ofrobots authored
Makes it possible for the the inline allocation observers to be sample the actual object allocation on which the notification triggers. R=hpayer@chromium.org BUG= Review URL: https://codereview.chromium.org/1460063006 Cr-Commit-Position: refs/heads/master@{#32209}
-
- 20 Nov, 2015 1 commit
-
-
ofrobots authored
We should not be counting the bump pointer allocations done during scavenge as the objects are copied. The inline allocation observers were getting unnecessary notifications. R=hpayer@chromium.org, ulan@chromium.org BUG= Review URL: https://codereview.chromium.org/1465633002 Cr-Commit-Position: refs/heads/master@{#32153}
-
- 19 Nov, 2015 1 commit
-
-
hpayer authored
This CL should be reverted after investigating the size chrasher. BUG=chromium:556912 LOG=n Review URL: https://codereview.chromium.org/1455273003 Cr-Commit-Position: refs/heads/master@{#32119}
-
- 18 Nov, 2015 1 commit
-
-
ofrobots authored
Now that we no longer require AllocationInfo::limit to be aligned [1], we can do more accurate inline-allocation-observation. This lets us get notified when the next allocation that crosses the step-size boundary is allocated. Fixed the test-cases. They make significantly more sense now given the step sizes and the number of times we get notifications. For example, with a step size of 512, an allocation of 16kb results in 32 notifications instead of 30 now. [1] https://codereview.chromium.org/1444883003 R=hpayer@chromium.org BUG= Review URL: https://codereview.chromium.org/1448913003 Cr-Commit-Position: refs/heads/master@{#32091}
-
- 13 Nov, 2015 1 commit
-
-
ishell authored
This CL introduces the following visitors: 1) RecordMigratedSlotVisitor which simplifies MarkCompactCollector::MigrateObject(). 2) IteratePointersToFromSpaceVisitor which simplifies Heap::IteratePointersToFromSpace(). 3) FindPointersToNewSpaceVisitor which simplifies StoreBuffer::IteratePointersToNewSpace(). These changes make the object's body descriptors the one and only place that knows how to traverse the object. Review URL: https://codereview.chromium.org/1441453002 Cr-Commit-Position: refs/heads/master@{#31992}
-
- 11 Nov, 2015 1 commit
-
-
ofrobots authored
Presently the inline allocation step is a static value defined to be the minimum of the step sizes over all the observers. The step occur every (approx.) step byte. This is unfair to observers whose steps are not evenly divisible by the min step size. For example, consider two observers with steps sizes of 512 and 576 bytes. Across 16kb allocated, you would expect the first observer to be hit approximately 32 times, and the second observer to be hit approximately 28 times. In reality, the observers get notified 30 and 15 times respectively. The reason is that each step is 512 bytes, and since 576 is not evenly divisible by 512, it gets notified much less frequently. This CL fixes the problem by making the next step size be the minimum (over all observers) of the remaining bytes to get to the step, making the steps fair. BUG= R=hpayer@chromium.org,ulan@chromium.org Review URL: https://codereview.chromium.org/1427973006 Cr-Commit-Position: refs/heads/master@{#31948}
-
- 05 Nov, 2015 1 commit
-
-
ofrobots authored
Expose the steps for incremental marking and idle scavenge more directly in NewSpace. Adjust the NewSpace and Heap interfaces to allow callers to be more clear about how they are interacting with inline allocation steps. This refactor prepares the ground for more consumers of inline allocation steps (e.g. sampling heap profiler.) R=hpayer@chromium.org BUG= Review URL: https://codereview.chromium.org/1404523002 Cr-Commit-Position: refs/heads/master@{#31814}
-
- 04 Nov, 2015 1 commit
-
-
ishell authored
Review URL: https://codereview.chromium.org/1412223018 Cr-Commit-Position: refs/heads/master@{#31785}
-
- 02 Nov, 2015 1 commit
-
-
mlippautz authored
R=hpayer@chromium.org BUG=chromium:524425 LOG=N Review URL: https://codereview.chromium.org/1413223011 Cr-Commit-Position: refs/heads/master@{#31724}
-
- 23 Oct, 2015 1 commit
-
-
mlippautz authored
BUG=chromium:524425 LOG=N Review URL: https://codereview.chromium.org/1409363003 Cr-Commit-Position: refs/heads/master@{#31508}
-
- 22 Oct, 2015 1 commit
-
-
mlippautz authored
BUG= Review URL: https://codereview.chromium.org/1416003003 Cr-Commit-Position: refs/heads/master@{#31463}
-
- 21 Oct, 2015 3 commits
-
-
mlippautz authored
This reverts commit a31cef44. Original message: [heap] Divide available memory upon compaction tasks - Fairly (round-robin) divide available memory upon compaction tasks. - Ensure an upper limit (of memory) since dividing is O(n) for n free-space nodes. - Refill from free lists managed by sweeper once a compaction space becomes empty. Assumption for dividing memory: Memory in the free lists is sparse upon starting compaction (which means that only few nodes are available), except for memory reducer GCs, which happen in idle time though (so it's less of a problem). BUG=chromium:524425 LOG=N Review URL: https://codereview.chromium.org/1421583002 Cr-Commit-Position: refs/heads/master@{#31443}
-
mlippautz authored
Revert of "[heap] Divide available memory upon compaction tasks" (patchset #5 id:90008 of https://codereview.chromium.org/1415733004/ ) Reason for revert: Failing again: http://build.chromium.org/p/client.v8/builders/V8%20Linux64%20GC%20Stress%20-%20custom%20snapshot/builds/2183 Original issue's description: > Reland of "[heap] Divide available memory upon compaction tasks" > > This reverts commit cf71c28f. > > Original message: > > [heap] Divide available memory upon compaction tasks > - Fairly (round-robin) divide available memory upon compaction tasks. > - Ensure an upper limit (of memory) since dividing is O(n) for n free-space > nodes. > - Refill from free lists managed by sweeper once a compaction space becomes > empty. > > Assumption for dividing memory: Memory in the free lists is sparse upon starting > compaction (which means that only few nodes are available), except for memory > reducer GCs, which happen in idle time though (so it's less of a problem). > > BUG=chromium:524425 > LOG=N > > Committed: https://crrev.com/63f42ecb965d04877f45043c1416170b6f79b962 > Cr-Commit-Position: refs/heads/master@{#31436} TBR=hpayer@chromium.org NOPRESUBMIT=true NOTREECHECKS=true NOTRY=true BUG=chromium:524425 Review URL: https://codereview.chromium.org/1405273003 Cr-Commit-Position: refs/heads/master@{#31439}
-
mlippautz authored
This reverts commit cf71c28f. Original message: [heap] Divide available memory upon compaction tasks - Fairly (round-robin) divide available memory upon compaction tasks. - Ensure an upper limit (of memory) since dividing is O(n) for n free-space nodes. - Refill from free lists managed by sweeper once a compaction space becomes empty. Assumption for dividing memory: Memory in the free lists is sparse upon starting compaction (which means that only few nodes are available), except for memory reducer GCs, which happen in idle time though (so it's less of a problem). BUG=chromium:524425 LOG=N Review URL: https://codereview.chromium.org/1415733004 Cr-Commit-Position: refs/heads/master@{#31436}
-
- 19 Oct, 2015 1 commit
-
-
mlippautz authored
During eviction of FreeSpace nodes that reside on eviction pages we iterate throug the list node-by-node, unlinking only those that reside on eviction pages. We failed to properly update end_ if nodes were evicted are encountering nodes that that are left as is. BUG=chromium:539356 LOG=N R=hpayer@chromium.org Review URL: https://codereview.chromium.org/1411263002 Cr-Commit-Position: refs/heads/master@{#31383}
-
- 16 Oct, 2015 2 commits
-
-
mlippautz authored
Revert of "[heap] Divide available memory upon compaction tasks" (patchset #2 id:20001 of https://codereview.chromium.org/1399403002/ ) Reason for revert: Failing: https://chromegw.corp.google.com/i/client.v8/builders/V8%20Linux64%20GC%20Stress%20-%20custom%20snapshot/builds/2115 Original issue's description: > Reland of "[heap] Divide available memory upon compaction tasks" > > This reverts commit ec1046f9. > > Original message: > > [heap] Divide available memory upon compaction tasks > - Fairly (round-robin) divide available memory upon compaction tasks. > - Ensure an upper limit (of memory) since dividing is O(n) for n free-space > nodes. > - Refill from free lists managed by sweeper once a compaction space becomes > empty. > > Assumption for dividing memory: Memory in the free lists is sparse upon starting > compaction (which means that only few nodes are available), except for memory > reducer GCs, which happen in idle time though (so it's less of a problem). > > BUG=chromium:524425 > LOG=N > > Committed: https://crrev.com/a805be73f6f97645450124f75c0f7417ec7b3e70 > Cr-Commit-Position: refs/heads/master@{#31329} TBR=hpayer@chromium.org NOPRESUBMIT=true NOTREECHECKS=true NOTRY=true BUG=chromium:524425 Review URL: https://codereview.chromium.org/1412643002 Cr-Commit-Position: refs/heads/master@{#31332}
-
mlippautz authored
This reverts commit ec1046f9. Original message: [heap] Divide available memory upon compaction tasks - Fairly (round-robin) divide available memory upon compaction tasks. - Ensure an upper limit (of memory) since dividing is O(n) for n free-space nodes. - Refill from free lists managed by sweeper once a compaction space becomes empty. Assumption for dividing memory: Memory in the free lists is sparse upon starting compaction (which means that only few nodes are available), except for memory reducer GCs, which happen in idle time though (so it's less of a problem). BUG=chromium:524425 LOG=N Review URL: https://codereview.chromium.org/1399403002 Cr-Commit-Position: refs/heads/master@{#31329}
-
- 15 Oct, 2015 2 commits
-
-
mlippautz authored
- The bug is that we did not handle end_ properly in SearchForNodeInList. - We now consistently account for sizes on page level in FreeList, except when filtering evacuation candidates (those are accounted for in FreeListCategory) BUG=chromium:524425 LOG=N Review URL: https://codereview.chromium.org/1389293005 Cr-Commit-Position: refs/heads/master@{#31307}
-
mlippautz authored
Also update comments. BUG= Review URL: https://codereview.chromium.org/1392343004 Cr-Commit-Position: refs/heads/master@{#31301}
-
- 13 Oct, 2015 2 commits
-
-
mlippautz authored
Revert of [heap] Divide available memory upon compaction tasks (patchset #9 id:340001 of https://codereview.chromium.org/1382003002/ ) Reason for revert: Failing tests: https://chromegw.corp.google.com/i/client.v8/builders/V8%20Linux%20-%20arm64%20-%20sim%20-%20nosnap%20-%20debug%20-%202/builds/3804/steps/Check/logs/DontLeakGlobalObjects Original issue's description: > [heap] Divide available memory upon compaction tasks > > - Fairly (round-robin) divide available memory upon compaction tasks. > - Ensure an upper limit (of memory) since dividing is O(n) for n free-space > nodes. > - Refill from free lists managed by sweeper once a compaction space becomes > empty. > > Assumption for dividing memory: Memory in the free lists is sparse upon starting > compaction (which means that only few nodes are available), except for memory > reducer GCs, which happen in idle time though (so it's less of a problem). > > BUG=chromium:524425 > LOG=N > > Committed: https://crrev.com/30236c052ba9266fc55412a8fd63b17f683ff40b > Cr-Commit-Position: refs/heads/master@{#31234} TBR=ulan@chromium.org,hpayer@chromium.org NOPRESUBMIT=true NOTREECHECKS=true NOTRY=true BUG=chromium:524425 Review URL: https://codereview.chromium.org/1406533002 Cr-Commit-Position: refs/heads/master@{#31235}
-
mlippautz authored
- Fairly (round-robin) divide available memory upon compaction tasks. - Ensure an upper limit (of memory) since dividing is O(n) for n free-space nodes. - Refill from free lists managed by sweeper once a compaction space becomes empty. Assumption for dividing memory: Memory in the free lists is sparse upon starting compaction (which means that only few nodes are available), except for memory reducer GCs, which happen in idle time though (so it's less of a problem). BUG=chromium:524425 LOG=N Review URL: https://codereview.chromium.org/1382003002 Cr-Commit-Position: refs/heads/master@{#31234}
-
- 08 Oct, 2015 2 commits
-
-
mlippautz authored
R=ulan@chromium.org BUG=chromium:524425 LOG=N Review URL: https://codereview.chromium.org/1394863002 Cr-Commit-Position: refs/heads/master@{#31183}
-
mlippautz authored
This change removes the unswept free bytes counter. The new approach - directly decrements allocated memory and capacity before sweeping (using live bytes from the marker), and - adds back capacity during refilling a free list. This is another pre-work for moving around free lists while keeping the counters in a sane state. The previous approach allowed us to nail down how much memory is to-be-swept. However, there were no users of this as we only used it do decrement it from allocated memory (which still accounted for dead objects). If we want to keep track of unswept free bytes in a space during compaction we can introduce a separate new concurrent counter for this purpose. BUG=chromium:524425 LOG=N Review URL: https://codereview.chromium.org/1380723002 Cr-Commit-Position: refs/heads/master@{#31175}
-
- 07 Oct, 2015 1 commit
-
-
mlippautz authored
Untangles committed memory from capacity in a given space and unifies accounting for all spaces. Pre-work for parallel compaction. R=hpayer@chromium.org BUG=chromium:524425 LOG=N Review URL: https://codereview.chromium.org/1388383002 Cr-Commit-Position: refs/heads/master@{#31149}
-
- 01 Oct, 2015 2 commits
-
-
mlippautz authored
BUG= Review URL: https://codereview.chromium.org/1377723003 Cr-Commit-Position: refs/heads/master@{#31048}
-
mlippautz authored
- Wasted bytes are now accounted where they accrue, i.e., the corresponding free list. The amount of waste is transferred by concatenating free lists. - During concatenation, free lists are no longer locked on FreeListCategory level, but in the FreeList itself, simplifying the sync between contained nodes and wasted bytes (which are effectively dropped nodes). This is pre-work for properly moving memory to compaction spaces, which requires correct accounting of wasted memory. BUG=chromium:524425 LOG=N Review URL: https://codereview.chromium.org/1379833002 Cr-Commit-Position: refs/heads/master@{#31040}
-
- 25 Sep, 2015 4 commits
-
-
mlippautz authored
Revert of "[heap] Add more tasks for parallel compaction" (patchset #4 id:100001 of https://codereview.chromium.org/1365743003/ ) Reason for revert: failing again: https://chromegw.corp.google.com/i/client.v8/builders/V8%20Mac/builds/4505/steps/Mozilla%20%28flakes%29/logs/regress-416628 Original issue's description: > Reland of "[heap] Add more tasks for parallel compaction" > > - We now compute the number of parallel compaction tasks, depending on the > evacuation candidate list, the number of cores, and some hard limit. > - Free memory is moved over to compaction tasks (up to some limit) > - Moving over memory is done by dividing the free list of a given space up among > other free lists. Since this is potentially slow we limit the maximum amount > of moved memory. > > This reverts commit bfccd518. > > BUG=chromium:524425 > LOG=N > > Committed: https://crrev.com/7e283d746a194ceaaca114e2ba17504653d6a109 > Cr-Commit-Position: refs/heads/master@{#30945} TBR=hpayer@chromium.org NOPRESUBMIT=true NOTREECHECKS=true NOTRY=true BUG=chromium:524425 Review URL: https://codereview.chromium.org/1371653002 Cr-Commit-Position: refs/heads/master@{#30947}
-
mlippautz authored
- We now compute the number of parallel compaction tasks, depending on the evacuation candidate list, the number of cores, and some hard limit. - Free memory is moved over to compaction tasks (up to some limit) - Moving over memory is done by dividing the free list of a given space up among other free lists. Since this is potentially slow we limit the maximum amount of moved memory. This reverts commit bfccd518. BUG=chromium:524425 LOG=N Review URL: https://codereview.chromium.org/1365743003 Cr-Commit-Position: refs/heads/master@{#30945}
-
ulan authored
BUG=chromium:490559 LOG=NO Review URL: https://codereview.chromium.org/1352453004 Cr-Commit-Position: refs/heads/master@{#30944}
-
mlippautz authored
Not resetting the allocation area after freeing it potentially results in negative SizeOfObjects() because the area is accounted for as allocated while it has already been freed. BUG= Review URL: https://codereview.chromium.org/1364303002 Cr-Commit-Position: refs/heads/master@{#30928}
-
- 24 Sep, 2015 1 commit
-
-
ofrobots authored
Once I improved byte accounting done for incremental mark in [1], there is some code duplication that becomes apparent. This commit refactors the duplicated code into a private method on NewSpace. This also makes it easy to add new consumers of inline allocation steps in the future. [1] https://codereview.chromium.org/1274453002/ R=hpayer@chromium.org BUG= Review URL: https://codereview.chromium.org/1351983002 Cr-Commit-Position: refs/heads/master@{#30921}
-