Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Optimize plan phase for foreground gcs#45208

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to ourterms of service andprivacy statement. We’ll occasionally send you account related emails.

Already on GitHub?Sign in to your account

Merged
Changes from1 commit
Commits
Show all changes
13 commits
Select commitHold shift + click to select a range
3d639f2
delete backport.yml so I can push to master
PeterSolMSAug 21, 2020
c78344e
Merge remote-tracking branch 'upstream/master'
PeterSolMSAug 27, 2020
0fc9aeb
Undo unintended changes
PeterSolMSAug 27, 2020
9073278
Merge remote-tracking branch 'upstream/master'
PeterSolMSAug 31, 2020
eb4f188
Merge remote-tracking branch 'upstream/master'
PeterSolMSSep 28, 2020
c809f97
Merge remote-tracking branch 'upstream/master'
PeterSolMSOct 2, 2020
808750e
Merge remote-tracking branch 'upstream/master'
PeterSolMSOct 20, 2020
8985284
Merge remote-tracking branch 'upstream/master'
PeterSolMSNov 5, 2020
61be136
Merge remote-tracking branch 'upstream/master'
PeterSolMSNov 13, 2020
1ebec15
Changes to allow us to use the mark list for foreground GCs.
PeterSolMSNov 17, 2020
5893c56
Merge remote-tracking branch 'upstream/master'
PeterSolMSNov 17, 2020
dbd6dc0
Merge branch 'master' into optimize_plan_phase_for_foreground_gcs
PeterSolMSNov 17, 2020
9d053c6
Address code review feedback - factor out common while-loop.
PeterSolMSNov 26, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
PrevPrevious commit
NextNext commit
Changes to allow us to use the mark list for foreground GCs.
The key point is to clear the background GC mark bits for objects that the foreground GC found to be dead.The existing code walked all the dead objects individually and cleared their mark bits, but as it turns out, it is significantly cheaper to turn off the mark bits in bulk.
  • Loading branch information
@PeterSolMS
PeterSolMS committedNov 17, 2020
commit1ebec15b15a5aea0dd283f68f729845e8be2495c
58 changes: 32 additions & 26 deletionssrc/coreclr/src/gc/gc.cpp
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -8713,16 +8713,6 @@ void gc_heap::sort_mark_list()
return;
}

#ifdef BACKGROUND_GC
// we are not going to use the mark list if background GC is running
// so let's not waste time sorting it
if (gc_heap::background_running_p())
{
mark_list_index = mark_list_end + 1;
return;
}
#endif //BACKGROUND_GC

// if any other heap had a mark list overflow, we fake one too,
// so we don't use an incomplete mark list by mistake
for (int i = 0; i < n_heaps; i++)
Expand DownExpand Up@@ -23439,11 +23429,7 @@ void gc_heap::plan_phase (int condemned_gen_number)
#endif //GC_CONFIG_DRIVEN

if ((condemned_gen_number < max_generation) &&
(mark_list_index <= mark_list_end)
#ifdef BACKGROUND_GC
&& (!gc_heap::background_running_p())
#endif //BACKGROUND_GC
)
(mark_list_index <= mark_list_end))
{
#ifndef MULTIPLE_HEAPS
#ifdef USE_VXSORT
Expand DownExpand Up@@ -24145,19 +24131,39 @@ void gc_heap::plan_phase (int condemned_gen_number)
#ifdef MARK_LIST
if (use_mark_list)
{
while ((mark_list_next < mark_list_index) &&
(*mark_list_next <= x))
{
mark_list_next++;
}
if ((mark_list_next < mark_list_index)
if (current_c_gc_state != c_gc_state_marking)
{
while ((mark_list_next < mark_list_index) &&
(*mark_list_next <= x))
{
mark_list_next++;
}
x = end;
if ((mark_list_next < mark_list_index)
#ifdef MULTIPLE_HEAPS
&& (*mark_list_next < end) //for multiple segments
&& (*mark_list_next < end) //for multiple segments
#endif //MULTIPLE_HEAPS
)
x = *mark_list_next;
else
x = end;
)
x = *mark_list_next;
}
else
{
assert(gc_heap::background_running_p());
uint8_t* old_x = x;
while ((mark_list_next < mark_list_index) &&
(*mark_list_next <= x))
{
mark_list_next++;
}
x = end;
if ((mark_list_next < mark_list_index)
#ifdef MULTIPLE_HEAPS
&& (*mark_list_next < end) //for multiple segments
#endif //MULTIPLE_HEAPS
)
x = *mark_list_next;
bgc_clear_batch_mark_array_bits (old_x, x);
}
}
else
#endif //MARK_LIST
Expand Down

[8]ページ先頭

©2009-2025 Movatter.jp