mirror of
https://github.com/tokio-rs/tokio.git
synced 2025-09-25 12:00:35 +00:00

This patch includes an initial implementation of a new multi-threaded runtime. The new runtime aims to increase the scheduler throughput by speeding up how it dispatches work to peer worker threads. This implementation improves most benchmarks by about ~10% when the number of threads is below 16. As threads increase, mutex contention deteriorates performance. Because the new scheduler is not yet ready to replace the old one, the patch introduces it as an unstable runtime flavor with a warning that it isn't production ready. Work to improve the scalability of the runtime will most likely require more intrusive changes across Tokio, so I am opting to merge with master to avoid larger conflicts.
121 lines
4.3 KiB
YAML
121 lines
4.3 KiB
YAML
on:
|
|
push:
|
|
branches: ["master", "tokio-*.x"]
|
|
pull_request:
|
|
types: [labeled, opened, synchronize, reopened]
|
|
branches: ["master", "tokio-*.x"]
|
|
|
|
name: Loom
|
|
|
|
env:
|
|
RUSTFLAGS: -Dwarnings --cfg loom --cfg tokio_unstable -C debug_assertions
|
|
LOOM_MAX_PREEMPTIONS: 2
|
|
LOOM_MAX_BRANCHES: 10000
|
|
RUST_BACKTRACE: 1
|
|
# Change to specific Rust release to pin
|
|
rust_stable: stable
|
|
|
|
permissions:
|
|
contents: read
|
|
|
|
jobs:
|
|
loom-sync:
|
|
name: loom tokio::sync
|
|
# base_ref is null when it's not a pull request
|
|
if: github.repository_owner == 'tokio-rs' && (contains(github.event.pull_request.labels.*.name, 'R-loom-sync') || (github.base_ref == null))
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v3
|
|
- name: Install Rust ${{ env.rust_stable }}
|
|
uses: dtolnay/rust-toolchain@master
|
|
with:
|
|
toolchain: ${{ env.rust_stable }}
|
|
- uses: Swatinem/rust-cache@v2
|
|
- name: run tests
|
|
run: cargo test --lib --release --features full -- --nocapture sync::tests
|
|
working-directory: tokio
|
|
|
|
loom-time-driver:
|
|
name: loom time driver
|
|
# base_ref is null when it's not a pull request
|
|
if: github.repository_owner == 'tokio-rs' && (contains(github.event.pull_request.labels.*.name, 'R-loom-time-driver') || (github.base_ref == null))
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v3
|
|
- name: Install Rust ${{ env.rust_stable }}
|
|
uses: dtolnay/rust-toolchain@master
|
|
with:
|
|
toolchain: ${{ env.rust_stable }}
|
|
- uses: Swatinem/rust-cache@v2
|
|
- name: run tests
|
|
run: cargo test --lib --release --features full -- --nocapture runtime::time::tests
|
|
working-directory: tokio
|
|
|
|
loom-current-thread:
|
|
name: loom current-thread scheduler
|
|
# base_ref is null when it's not a pull request
|
|
if: github.repository_owner == 'tokio-rs' && (contains(github.event.pull_request.labels.*.name, 'R-loom-current-thread') || (github.base_ref == null))
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v3
|
|
- name: Install Rust ${{ env.rust_stable }}
|
|
uses: dtolnay/rust-toolchain@master
|
|
with:
|
|
toolchain: ${{ env.rust_stable }}
|
|
- uses: Swatinem/rust-cache@v2
|
|
- name: run tests
|
|
run: cargo test --lib --release --features full -- --nocapture loom_current_thread
|
|
working-directory: tokio
|
|
|
|
loom-multi-thread:
|
|
name: loom multi-thread scheduler
|
|
# base_ref is null when it's not a pull request
|
|
if: github.repository_owner == 'tokio-rs' && (contains(github.event.pull_request.labels.*.name, 'R-loom-multi-thread') || (github.base_ref == null))
|
|
runs-on: ubuntu-latest
|
|
strategy:
|
|
matrix:
|
|
include:
|
|
- scope: loom_multi_thread::group_a
|
|
- scope: loom_multi_thread::group_b
|
|
- scope: loom_multi_thread::group_c
|
|
- scope: loom_multi_thread::group_d
|
|
steps:
|
|
- uses: actions/checkout@v3
|
|
- name: Install Rust ${{ env.rust_stable }}
|
|
uses: dtolnay/rust-toolchain@master
|
|
with:
|
|
toolchain: ${{ env.rust_stable }}
|
|
- uses: Swatinem/rust-cache@v2
|
|
- name: loom ${{ matrix.scope }}
|
|
run: cargo test --lib --release --features full -- $SCOPE
|
|
working-directory: tokio
|
|
env:
|
|
SCOPE: ${{ matrix.scope }}
|
|
|
|
loom-multi-thread-alt:
|
|
name: loom ALT multi-thread scheduler
|
|
# base_ref is null when it's not a pull request
|
|
if: github.repository_owner == 'tokio-rs' && (contains(github.event.pull_request.labels.*.name, 'R-loom-multi-thread-alt') || (github.base_ref == null))
|
|
runs-on: ubuntu-latest
|
|
strategy:
|
|
matrix:
|
|
include:
|
|
- scope: loom_multi_thread_alt::group_a
|
|
- scope: loom_multi_thread_alt::group_b
|
|
- scope: loom_multi_thread_alt::group_c
|
|
- scope: loom_multi_thread_alt::group_d
|
|
steps:
|
|
- uses: actions/checkout@v3
|
|
- name: Install Rust ${{ env.rust_stable }}
|
|
uses: dtolnay/rust-toolchain@master
|
|
with:
|
|
toolchain: ${{ env.rust_stable }}
|
|
- uses: Swatinem/rust-cache@v2
|
|
- name: loom ${{ matrix.scope }}
|
|
run: cargo test --lib --release --features full -- $SCOPE
|
|
working-directory: tokio
|
|
env:
|
|
SCOPE: ${{ matrix.scope }}
|
|
# TODO: remove this before stabilizing
|
|
LOOM_MAX_PREEMPTIONS: 1
|