Don't always use string forwarding table when sharing the string table

Disable --always-use-string-forwarding-table when --shared-string-table
is set.
With --shared-string-table we can have parallel GCs in multiple client
isolates. With --always-use-string-forwarding-table we can have young
generation strings in the forwarding table, requiring table updates when
the string gets promoted. This is not supported for parallel GCs.

This CL also reverts the incorrect try to fix an issue with these flag
combination introduced in https://crrev.com/c/3650719

Bug: v8:12877, v8:12007
Change-Id: I49a2aa300af36b82007a7d215afe9a70ac1ce39e
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3660258
Commit-Queue: Patrick Thier <pthier@chromium.org>
Reviewed-by: Dominik Inführ <dinfuehr@chromium.org>
Cr-Commit-Position: refs/heads/main@{#80710}
This commit is contained in:
Patrick Thier 2022-05-24 07:52:27 +00:00 committed by V8 LUCI CQ
parent fc50b033e3
commit d96403f5ba
2 changed files with 6 additions and 4 deletions

View File

@ -763,6 +763,12 @@ DEFINE_IMPLICATION(harmony_struct, shared_string_table)
DEFINE_BOOL(
always_use_string_forwarding_table, false,
"use string forwarding table instead of thin strings for all strings")
// With --always-use-string-forwarding-table, we can have young generation
// string entries in the forwarding table, requiring table updates when these
// strings get promoted to old space. Parallel GCs in client isolates
// (enabled by --shared-string-table) are not supported using a single shared
// forwarding table.
DEFINE_NEG_IMPLICATION(shared_string_table, always_use_string_forwarding_table)
// TOOD(pthier): The code behind this flag is not going to ship.
// We enable it behind --future to get performance numbers and coverage from
// bots.

View File

@ -4804,10 +4804,6 @@ void MarkCompactCollector::UpdatePointersAfterEvacuation() {
heap_->UpdateReferencesInExternalStringTable(
&UpdateReferenceInExternalStringTableEntry);
if (V8_UNLIKELY(FLAG_always_use_string_forwarding_table)) {
isolate()->string_forwarding_table()->UpdateAfterEvacuation();
}
EvacuationWeakObjectRetainer evacuation_object_retainer;
heap()->ProcessWeakListRoots(&evacuation_object_retainer);
}