Skip to content

runtime: clean up async preemption loose ends #36365

Open

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

Activity

  1. added
    NeedsFixThe path to resolution is known, but the work has not been done.
    on Jan 2, 2020
  2. added this to the Go1.15 milestone on Jan 2, 2020
  3. gopherbot commented on Apr 21, 2020

    @gopherbot
    Contributor

    Change https://golang.org/cl/229298 mentions this issue: runtime: make newproc1 not start the goroutine

  4. gopherbot commented on Apr 21, 2020

    @gopherbot
    Contributor

    Change https://golang.org/cl/229300 mentions this issue: runtime: use conservative scanning for debug calls

  5. gopherbot commented on Apr 21, 2020

    @gopherbot
    Contributor

    Change https://golang.org/cl/229299 mentions this issue: runtime: perform debug call injection on a new goroutine

  6. gopherbot commented on Apr 28, 2020

    @gopherbot
    Contributor

    Change https://golang.org/cl/230539 mentions this issue: cmd/compile: mark PanicBounds/Extend as calls

  7. gopherbot commented on Apr 28, 2020

    @gopherbot
    Contributor

    Change https://golang.org/cl/230542 mentions this issue: cmd/compile: don't emit stack maps for write barrier calls

  8. gopherbot commented on Apr 28, 2020

    @gopherbot
    Contributor

    Change https://golang.org/cl/230544 mentions this issue: cmd/compile,runtime: stack maps only at calls, remove register maps

  9. gopherbot commented on Apr 28, 2020

    @gopherbot
    Contributor

    Change https://golang.org/cl/230541 mentions this issue: cmd/compile: fix unsafe-points with stack maps

  10. gopherbot commented on Apr 28, 2020

    @gopherbot
    Contributor

    Change https://golang.org/cl/230540 mentions this issue: cmd/compile: rename issafepoint -> hasStackMap

  11. gopherbot commented on Apr 28, 2020

    @gopherbot
    Contributor

    Change https://golang.org/cl/230543 mentions this issue: cmd/compile: make LivenessMap sparse

  12. 20 remaining items

  13. modified the milestones: Go1.16, Go1.17 on Dec 8, 2020
  14. ianlancetaylor commented on Apr 22, 2021

    @ianlancetaylor
    Contributor

    @cherrymui Anything to be done here for 1.17? Thanks.

  15. cherrymui commented on Apr 22, 2021

    @cherrymui
    Member

    No, I don't think we did or plan to do anything on this for 1.17.

  16. modified the milestones: Go1.17, Go1.18 on Apr 22, 2021
  17. modified the milestones: Go1.18, Go1.19 on Oct 5, 2021
  18. modified the milestones: Go1.19, Backlog on Nov 15, 2021
  19. bcmills commented on Jun 20, 2023

    @bcmills
    Contributor

    @golang/runtime, does the checklist on this issue need to be updated? I see that https://go.dev/cl/366735 and https://go.dev/cl/366734 were merged in 2021 (for windows/arm64 and windows/arm).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

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

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions