Skip to content

runtime: clean up async preemption loose ends #36365

Open
@aclements

Description

@aclements

Go 1.14 introduces asynchronous preemption so that tight loops can be preempted (#10958). However, there are still several loose ends to tie up. This is a general bug to keep track of remaining work:

  • Support on all possible platforms (js/wasm is not currently possible)
    • windows/arm (CL 207961)
    • windows/arm64
    • darwin/arm (no longer supported)
    • plan9/* (CL 228893)
  • Redo unsafe-point representation so we can eliminate register maps (CL 230544)
  • Remove register maps and extra stack maps (after redesigning debug call injection) (CL 230544)
  • Possibly incorporate @cherrymui's sequence restarting (CL 208126)
  • Attach unsafety/restartability to Progs and generate the stream post-assembly like spadj (comment)
  • Make large pointer-free memmoves/memclrs preemptible (runtime: long pauses STW (sweep termination) on massive block allocation #31222)
  • Make large pointer-full memmoves/memclrs preemptible (this is a little harder)
  • Make large allocations preemptible (closely related to the above two, partly done)
  • Fix various annoying spins in the scheduler
  • Make more of the runtime preemptible

Metadata

Metadata

Assignees

No one assigned

    Labels

    NeedsFixThe path to resolution is known, but the work has not been done.compiler/runtimeIssues related to the Go compiler and/or runtime.

    Type

    No type

    Projects

    Status

    Triage Backlog

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions