Skip to content
This repository has been archived by the owner on Jan 23, 2023. It is now read-only.

Card mark steal #25986

Merged
merged 33 commits into from
Oct 23, 2019
Merged

Card mark steal #25986

merged 33 commits into from
Oct 23, 2019

Commits on Jun 11, 2019

  1. Changes to set gen0 bricks always. This reduces the time spent in fin…

    …d_first_object when finding the start of objects for marking interior pointers.
    PeterSolMS committed Jun 11, 2019
    Configuration menu
    Copy the full SHA
    9d53ff9 View commit details
    Browse the repository at this point in the history
  2. Merge branch 'brick_table'

    PeterSolMS committed Jun 11, 2019
    Configuration menu
    Copy the full SHA
    4d96dee View commit details
    Browse the repository at this point in the history

Commits on Jun 19, 2019

  1. Revert "Changes to set gen0 bricks always. This reduces the time spen…

    …t in find_first_object when finding the start of objects for marking interior pointers."
    
    This reverts commit 9d53ff9.
    PeterSolMS committed Jun 19, 2019
    Configuration menu
    Copy the full SHA
    f738b0d View commit details
    Browse the repository at this point in the history
  2. Configuration menu
    Copy the full SHA
    5b5feb3 View commit details
    Browse the repository at this point in the history

Commits on Jun 28, 2019

  1. Configuration menu
    Copy the full SHA
    7960a38 View commit details
    Browse the repository at this point in the history

Commits on Jul 5, 2019

  1. Configuration menu
    Copy the full SHA
    c4b41c5 View commit details
    Browse the repository at this point in the history

Commits on Jul 11, 2019

  1. As it turns out, mark_through_cards_helper needs to work on one heap,…

    … but call its function pointer arg fn on another heap to keep things straight.
    
    Example: thread 3 (associated with heap 3) helps out marking through cards on heap 5. The way I set things up the this pointer for mark_through_cards_for_xxx will get heap 5 as its this pointer. And that's fine as far comparisons against gc_low, gc_high, etc. go. However, it needs to call mark_object_simple with heap 3 as its this pointer, because otherwise multiple threads may use heap 5's mark_stack etc., which would cause trouble.
    
    So, mark_through_cards_helper gets passed two heaps, one implicitly as the this pointer, the other ("hpt") explicitly - this is the heap associated with the gc thread.
    PeterSolMS committed Jul 11, 2019
    Configuration menu
    Copy the full SHA
    a93c941 View commit details
    Browse the repository at this point in the history

Commits on Jul 12, 2019

  1. Fixed issue with over-eager card clearing in mark_through_cards_xxx i…

    …f an object straddles a chunk boundary. Added stress log instrumentation for card and card bundle clearing
    PeterSolMS committed Jul 12, 2019
    Configuration menu
    Copy the full SHA
    ef34c85 View commit details
    Browse the repository at this point in the history
  2. Merge from master

    PeterSolMS committed Jul 12, 2019
    Configuration menu
    Copy the full SHA
    c2ad446 View commit details
    Browse the repository at this point in the history
  3. Configuration menu
    Copy the full SHA
    9dda934 View commit details
    Browse the repository at this point in the history
  4. Configuration menu
    Copy the full SHA
    70a105e View commit details
    Browse the repository at this point in the history

Commits on Jul 29, 2019

  1. Set CARD_MARKING_STEALING_GRANULARITY as low as possible with at leas…

    …t one card bundle bit for each chunk.
    
    In card_bundle_clear, use Interlocked::And because now several threads may clear bits in the same card bundle dword.
    
    In relocate_phase, move other relocations *before* relocation of older generations, so the latter can make up for imbalances in the former.
    
    Fix issue where mark_through_cards_for_segments was setting bricks incorrectly, causing too much time being spent in find_first_object. Fix is to distinguis the "next object" in the heap walk from the "continuation object" where we continue the scan.
    PeterSolMS committed Jul 29, 2019
    Configuration menu
    Copy the full SHA
    9044384 View commit details
    Browse the repository at this point in the history
  2. Configuration menu
    Copy the full SHA
    8f0ba33 View commit details
    Browse the repository at this point in the history
  3. Configuration menu
    Copy the full SHA
    6d12dbd View commit details
    Browse the repository at this point in the history
  4. Configuration menu
    Copy the full SHA
    d48fabe View commit details
    Browse the repository at this point in the history
  5. Configuration menu
    Copy the full SHA
    6c5135c View commit details
    Browse the repository at this point in the history
  6. Configuration menu
    Copy the full SHA
    93d2408 View commit details
    Browse the repository at this point in the history
  7. Configuration menu
    Copy the full SHA
    ffc98d4 View commit details
    Browse the repository at this point in the history

Commits on Aug 2, 2019

  1. Remove some STRESS_LOG calls, add parentheses to some expressions to …

    …partially address code review feedback.
    PeterSolMS committed Aug 2, 2019
    Configuration menu
    Copy the full SHA
    86bb8e1 View commit details
    Browse the repository at this point in the history
  2. Renamed ticket to chunk_index to make code more comprehensible, follo…

    …wing Maoni's suggestion.
    PeterSolMS committed Aug 2, 2019
    Configuration menu
    Copy the full SHA
    f3b14e7 View commit details
    Browse the repository at this point in the history

Commits on Aug 5, 2019

  1. Fix Linux build.

    PeterSolMS committed Aug 5, 2019
    Configuration menu
    Copy the full SHA
    8fcad5e View commit details
    Browse the repository at this point in the history

Commits on Aug 12, 2019

  1. Fix correctness issue found in GC stress run.

    In the situation where there was a large byte array at the end of a segment, mark_through_cards_for_large_objects moved to the next segment, but the card_mark_enumerator was still in the previous segment and got stuck there.
    
    Fix is to explicitly exhaust the current segment in mark_through_cards_xxx before moving on to the next one. This will keep the card_mark_enumerator and its callers in mark_through_cards_xxx in sync.
    PeterSolMS committed Aug 12, 2019
    Configuration menu
    Copy the full SHA
    ef3931b View commit details
    Browse the repository at this point in the history
  2. Remove STRESS_LOGX calls or replace by dprintf.

    Make sure we can optionally use STRESS_LOG for situations where that's advantageous.
    PeterSolMS committed Aug 12, 2019
    Configuration menu
    Copy the full SHA
    41fafb1 View commit details
    Browse the repository at this point in the history
  3. Addressed some code review feedback - reduce amount of duplicated cod…

    …e in mark_through_cards_xxx.
    PeterSolMS committed Aug 12, 2019
    Configuration menu
    Copy the full SHA
    ac41099 View commit details
    Browse the repository at this point in the history
  4. Configuration menu
    Copy the full SHA
    a20a2f4 View commit details
    Browse the repository at this point in the history

Commits on Aug 13, 2019

  1. Fix issue introduced by refactoring.

    As card_word_end is updated by find_next_chunk, moving the call to find_next_chunk into card_transition means card_word_end needs to be a reference parameter in card_transition, otherwise card_word_end in mark_through_cards_xxx would not get updated.
    PeterSolMS committed Aug 13, 2019
    Configuration menu
    Copy the full SHA
    c0d45ef View commit details
    Browse the repository at this point in the history

Commits on Aug 21, 2019

  1. Disable FEATURE_CARD_MARKING_STEALING for workstation GC.

    I found there is significant overhead to enabling FEATURE_CARD_MARKING_STEALING for workstation GC in the case of low card density, and of course there is no benefit, so it makes sense to enable it only for server GC where the additional overhead will be made up by better work balancing in most cases.
    PeterSolMS committed Aug 21, 2019
    Configuration menu
    Copy the full SHA
    4300a1c View commit details
    Browse the repository at this point in the history

Commits on Aug 22, 2019

  1. Fix faulty assert in card_transition.

    I fixed an off-by-one issue in find_card, and when I switched workstation GC back to no card marking stealing, this assert at the end of card_transition fired in the case where limit, end and card_address(end_card) all coincide, because we access the card for the end address which we really shouldn't look at.
    
    The fix is simply to compare limit to end instead of card_address(end_card).
    PeterSolMS committed Aug 22, 2019
    Configuration menu
    Copy the full SHA
    fd1e88f View commit details
    Browse the repository at this point in the history

Commits on Aug 23, 2019

  1. Performance tweaks for card marking stealing.

    Pass card_word_end as a value parameter to card transition, when FEATURE_CARD_MARKING_STEALING is enabled, also pass it as a ref parameter. This gets rid of a perf regression in workstation GC.
    
    Set CARD_MARKING_STEALING_GRANULARITY to a higher value - picked 2 MB in 64-bits (1 MB in 32-bits). Perhaps this is a reasonable compromise.
    PeterSolMS committed Aug 23, 2019
    Configuration menu
    Copy the full SHA
    57c25cd View commit details
    Browse the repository at this point in the history

Commits on Oct 16, 2019

  1. Configuration menu
    Copy the full SHA
    2c6071a View commit details
    Browse the repository at this point in the history
  2. Configuration menu
    Copy the full SHA
    cd72bdc View commit details
    Browse the repository at this point in the history

Commits on Oct 17, 2019

  1. Configuration menu
    Copy the full SHA
    1ce64d5 View commit details
    Browse the repository at this point in the history
  2. Configuration menu
    Copy the full SHA
    0040092 View commit details
    Browse the repository at this point in the history