diff --git a/.dockerignore b/.dockerignore index 84986e7d8..6e6b4f072 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,4 +1,5 @@ /.coverage/ +/.tmp/ /.git /.git-blame-ignore /.github diff --git a/AGENTS.md b/AGENTS.md index 7a01934be..09f880db1 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -50,6 +50,8 @@ native IPv4/IPv6 support, private/whitelisted mode, and a management REST API. - `docs/issues/` — Issue specs / implementation plans - `share/default/` — Default configuration files and fixtures - `storage/` — Runtime data (git-ignored); databases, logs, config +- `.tmp/` — Workspace-local temp dir (git-ignored); AI agent hook logs (`TORRUST_GIT_HOOKS_LOG_DIR=.tmp`) + and benchmark script cargo isolation dirs (`contrib/dev-tools/workflow-benchmarks/`) - `.github/workflows/` — CI/CD workflows (testing, coverage, container, deployment) - `.github/skills/` — Agent Skills for specialized workflows and task-specific guidance - `.github/agents/` — Custom Copilot agents and their repository-specific definitions @@ -61,29 +63,29 @@ All packages live under `packages/`. The workspace version is `3.0.0-develop`. | Package | Crate Name | Prefix / Layer | Description | | --------------------------------- | ------------------------------------------------- | -------------- | ---------------------------------------------- | | `axum-health-check-api-server` | `torrust-tracker-axum-health-check-api-server` | `axum-*` | Health monitoring endpoint | -| `axum-http-server` | `torrust-tracker-axum-http-server` | `axum-*` | BitTorrent HTTP tracker server (BEP 3/23) | -| `axum-rest-api-server` | `torrust-tracker-axum-rest-api-server` | `axum-*` | Management REST API server | +| `axum-http-server` | `torrust-tracker-axum-http-server` | `axum-*` | BitTorrent HTTP tracker server (BEP 3/23) | +| `axum-rest-api-server` | `torrust-tracker-axum-rest-api-server` | `axum-*` | Management REST API server | | `axum-server` | `torrust-tracker-axum-server` | `axum-*` | Base Axum HTTP server infrastructure | | `clock` | `torrust-clock` | utilities | Mockable time source for deterministic testing | | `configuration` | `torrust-tracker-configuration` | domain | Config file parsing, environment variables | | `events` | `torrust-tracker-events` | domain | Domain event definitions | -| `http-protocol` | `torrust-tracker-http-tracker-protocol` | `*-protocol` | HTTP tracker protocol (BEP 3/23) parsing | -| `http-tracker-core` | `torrust-tracker-http-tracker-core` | `*-core` | HTTP-specific tracker domain logic | +| `http-protocol` | `torrust-tracker-http-tracker-protocol` | `*-protocol` | HTTP tracker protocol (BEP 3/23) parsing | +| `http-tracker-core` | `torrust-tracker-http-tracker-core` | `*-core` | HTTP-specific tracker domain logic | | `located-error` | `torrust-located-error` | utilities | Diagnostic errors with source locations | | `metrics` | `torrust-metrics` | domain | Prometheus metrics integration | | `peer-id` | `bittorrent-peer-id` | domain | Peer ID parsing and formatting utilities | | `primitives` | `torrust-tracker-primitives` | domain | Core domain types (InfoHash, PeerId, ...) | -| `rest-api-client` | `torrust-tracker-rest-api-client` | client tools | REST API client library | -| `rest-api-core` | `torrust-tracker-rest-api-core` | client tools | REST API core logic | +| `rest-api-client` | `torrust-tracker-rest-api-client` | client tools | REST API client library | +| `rest-api-core` | `torrust-tracker-rest-api-core` | client tools | REST API core logic | | `server-lib` | `torrust-server-lib` | shared | Shared server library utilities | | `swarm-coordination-registry` | `torrust-tracker-swarm-coordination-registry` | domain | Torrent/peer coordination registry | | `test-helpers` | `torrust-tracker-test-helpers` | utilities | Mock servers, test data generation | | `torrent-repository-benchmarking` | `torrust-tracker-torrent-repository-benchmarking` | benchmarking | Torrent storage benchmarks | -| `tracker-client` | `torrust-tracker-client` | client tools | CLI tracker interaction/testing client | -| `tracker-core` | `torrust-tracker-core` | `*-core` | Central tracker peer-management logic | -| `udp-protocol` | `torrust-tracker-udp-tracker-protocol` | `*-protocol` | UDP tracker protocol (BEP 15) framing/parsing | -| `udp-tracker-core` | `torrust-tracker-udp-tracker-core` | `*-core` | UDP-specific tracker domain logic | -| `udp-server` | `torrust-tracker-udp-server` | server | UDP tracker server implementation | +| `tracker-client` | `torrust-tracker-client` | client tools | CLI tracker interaction/testing client | +| `tracker-core` | `torrust-tracker-core` | `*-core` | Central tracker peer-management logic | +| `udp-protocol` | `torrust-tracker-udp-tracker-protocol` | `*-protocol` | UDP tracker protocol (BEP 15) framing/parsing | +| `udp-tracker-core` | `torrust-tracker-udp-tracker-core` | `*-core` | UDP-specific tracker domain logic | +| `udp-server` | `torrust-tracker-udp-server` | server | UDP tracker server implementation | **Console tools** (under `console/`): diff --git a/Containerfile b/Containerfile index 834a95cf9..512910763 100644 --- a/Containerfile +++ b/Containerfile @@ -12,7 +12,9 @@ RUN cargo binstall --no-confirm cargo-chef cargo-nextest FROM docker.io/library/rust:slim-trixie AS tester WORKDIR /tmp -RUN apt-get update; apt-get install -y curl sqlite3; apt-get autoclean +RUN apt-get update \ + && apt-get install -y curl sqlite3 time \ + && apt-get autoclean RUN curl -L --proto '=https' --tlsv1.2 -sSf https://raw.githubusercontent.com/cargo-bins/cargo-binstall/main/install-from-binstall-release.sh | bash RUN cargo binstall --no-confirm cargo-nextest # Database initialization: Tests at runtime require a pre-initialized SQLite3 database @@ -20,13 +22,14 @@ RUN cargo binstall --no-confirm cargo-nextest # database file layout. This image layer is inherited by test_debug and test stages. COPY ./share/ /app/share/torrust -RUN mkdir -p /app/share/torrust/default/database/; \ - sqlite3 /app/share/torrust/default/database/tracker.sqlite3.db "VACUUM;" +RUN time mkdir -p /app/share/torrust/default/database/ \ + && time sqlite3 /app/share/torrust/default/database/tracker.sqlite3.db "VACUUM;" ## Su Exe Compile FROM docker.io/library/gcc:trixie AS gcc COPY ./contrib/dev-tools/su-exec/ /usr/local/src/su-exec/ -RUN cc -Wall -Werror -g /usr/local/src/su-exec/su-exec.c -o /usr/local/bin/su-exec; chmod +x /usr/local/bin/su-exec +RUN cc -Wall -Werror -g /usr/local/src/su-exec/su-exec.c -o /usr/local/bin/su-exec \ + && chmod +x /usr/local/bin/su-exec ## Chef Prepare (look at project and see wat we need) @@ -80,9 +83,13 @@ COPY --from=build_debug \ RUN cargo nextest run --workspace-remap /test/src/ --extract-to /test/src/ --no-run --archive-file /test/torrust-tracker-debug.tar.zst RUN cargo nextest run --workspace-remap /test/src/ --target-dir-remap /test/src/target/ --cargo-metadata /test/src/target/nextest/cargo-metadata.json --binaries-metadata /test/src/target/nextest/binaries-metadata.json -RUN mkdir -p /app/bin/; cp -l /test/src/target/debug/torrust-tracker /app/bin/torrust-tracker -RUN mkdir /app/lib/; cp -l $(realpath $(ldd /app/bin/torrust-tracker | grep "libz\.so\.1" | awk '{print $3}')) /app/lib/libz.so.1 -RUN chown -R root:root /app; chmod -R u=rw,go=r,a+X /app; chmod -R a+x /app/bin +RUN time mkdir -p /app/bin/ \ + && time cp -l /test/src/target/debug/torrust-tracker /app/bin/torrust-tracker +RUN time mkdir /app/lib/ \ + && time cp -l $(realpath $(ldd /app/bin/torrust-tracker | grep "libz\.so\.1" | awk '{print $3}')) /app/lib/libz.so.1 +RUN time chown -R root:root /app \ + && time chmod -R u=rw,go=r,a+X /app \ + && time chmod -R a+x /app/bin # Extract and Test (release) FROM tester AS test @@ -94,9 +101,14 @@ COPY --from=build \ RUN cargo nextest run --workspace-remap /test/src/ --extract-to /test/src/ --no-run --archive-file /test/torrust-tracker.tar.zst RUN cargo nextest run --workspace-remap /test/src/ --target-dir-remap /test/src/target/ --cargo-metadata /test/src/target/nextest/cargo-metadata.json --binaries-metadata /test/src/target/nextest/binaries-metadata.json -RUN mkdir -p /app/bin/; cp -l /test/src/target/release/torrust-tracker /app/bin/torrust-tracker; cp -l /test/src/target/release/http_health_check /app/bin/http_health_check -RUN mkdir -p /app/lib/; cp -l $(realpath $(ldd /app/bin/torrust-tracker | grep "libz\.so\.1" | awk '{print $3}')) /app/lib/libz.so.1 -RUN chown -R root:root /app; chmod -R u=rw,go=r,a+X /app; chmod -R a+x /app/bin +RUN time mkdir -p /app/bin/ \ + && time cp -l /test/src/target/release/torrust-tracker /app/bin/torrust-tracker \ + && time cp -l /test/src/target/release/http_health_check /app/bin/http_health_check +RUN time mkdir -p /app/lib/ \ + && time cp -l $(realpath $(ldd /app/bin/torrust-tracker | grep "libz\.so\.1" | awk '{print $3}')) /app/lib/libz.so.1 +RUN time chown -R root:root /app \ + && time chmod -R u=rw,go=r,a+X /app \ + && time chmod -R a+x /app/bin ## Runtime diff --git a/contrib/dev-tools/workflow-benchmarks/run-container-baseline.sh b/contrib/dev-tools/workflow-benchmarks/run-container-baseline.sh new file mode 100755 index 000000000..5daabe0e2 --- /dev/null +++ b/contrib/dev-tools/workflow-benchmarks/run-container-baseline.sh @@ -0,0 +1,111 @@ +#!/usr/bin/env bash +# run-container-baseline.sh +# +# semantic-links: +# related-artifacts: +# - docs/issues/open/1841-1840-workflow-performance-baseline-analysis/ISSUE.md +# - docs/issues/open/1841-1840-workflow-performance-baseline-analysis/benchmark-results-baseline.md +# - .github/workflows/container.yaml +# +# Reproducible baseline timing capture for container-workflow-equivalent steps. +# Mirrors .github/workflows/container.yaml (job: test, matrix: debug + release). +# +# The CI workflow runs debug and release in parallel (matrix strategy). +# This script runs them sequentially. Total CI wall time ≈ max(debug, release). +# +# Usage: +# ./contrib/dev-tools/workflow-benchmarks/run-container-baseline.sh [--cold] +# +# Options: +# --cold Clear Docker builder cache and remove the tracked local image +# before measuring, approximating a shared-runner first run. +# Omit to measure the warm (cached) case. +# +# Output: +# Structured timing lines on stdout and a dated log under: +# docs/issues/open/1841-1840-workflow-performance-baseline-analysis/evidence/ +# +# Re-use after later optimisations: +# Run this script once --cold and once without --cold after each change and +# compare the evidence logs to quantify the improvement. + +set -euo pipefail + +COLD=false +for arg in "$@"; do + case "$arg" in + --cold) COLD=true ;; + *) echo "Unknown argument: $arg" >&2; exit 1 ;; + esac +done + +REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../../.." && pwd)" +EVIDENCE_DIR="$REPO_ROOT/docs/issues/open/1841-1840-workflow-performance-baseline-analysis/evidence" +mkdir -p "$EVIDENCE_DIR" + +RUN_TYPE="warm" +$COLD && RUN_TYPE="cold" + +LOG="$EVIDENCE_DIR/container-baseline-$(date -u +%Y%m%dT%H%M%SZ)-${RUN_TYPE}.log" + +time_phase() { + local scope="$1" name="$2" + shift 2 + echo "[$scope] ${name}_start" + local t0 t1 rc + t0=$(date +%s) + set +e + "$@" + rc=$? + set -e + t1=$(date +%s) + echo "[$scope] ${name}_seconds=$((t1 - t0))" + echo "[$scope] ${name}_exit_code=$rc" + return $rc +} + +{ + echo "[meta] start_utc=$(date -u +%Y-%m-%dT%H:%M:%SZ)" + echo "[meta] workflow=container" + echo "[meta] run_type=${RUN_TYPE}" + echo "[meta] repo_root=${REPO_ROOT}" + + if $COLD; then + echo "[cold] cache_reset_start" + docker builder prune -af >/dev/null + docker image rm -f torrust-tracker:local >/dev/null 2>&1 || true + echo "[cold] cache_reset_done" + fi + + # --- debug target (first matrix entry) --- + # --progress plain writes per-layer step output to stdout so it is captured + # in the evidence log alongside the phase timing lines. Without this flag + # Docker (BuildKit) emits the interactive progress to stderr only. + time_phase "${RUN_TYPE}" build_debug \ + docker build \ + --progress plain \ + --file "${REPO_ROOT}/Containerfile" \ + --target debug \ + --tag torrust-tracker:local \ + "${REPO_ROOT}" + + time_phase "${RUN_TYPE}" inspect_debug \ + docker image inspect torrust-tracker:local + + # --- release target (second matrix entry) --- + time_phase "${RUN_TYPE}" build_release \ + docker build \ + --progress plain \ + --file "${REPO_ROOT}/Containerfile" \ + --target release \ + --tag torrust-tracker:local \ + "${REPO_ROOT}" + + time_phase "${RUN_TYPE}" inspect_release \ + docker image inspect torrust-tracker:local + + echo "[meta] end_utc=$(date -u +%Y-%m-%dT%H:%M:%SZ)" +} | tee "$LOG" + +echo "" +echo "Evidence log: $LOG" diff --git a/contrib/dev-tools/workflow-benchmarks/run-testing-baseline.sh b/contrib/dev-tools/workflow-benchmarks/run-testing-baseline.sh new file mode 100755 index 000000000..e7a58cf6e --- /dev/null +++ b/contrib/dev-tools/workflow-benchmarks/run-testing-baseline.sh @@ -0,0 +1,152 @@ +#!/usr/bin/env bash +# run-testing-baseline.sh +# +# semantic-links: +# related-artifacts: +# - docs/issues/open/1841-1840-workflow-performance-baseline-analysis/ISSUE.md +# - docs/issues/open/1841-1840-workflow-performance-baseline-analysis/benchmark-results-baseline.md +# - .github/workflows/testing.yaml +# +# Reproducible baseline timing capture for testing-workflow-equivalent steps. +# Mirrors .github/workflows/testing.yaml (jobs: unit + docker-e2e). +# +# The CI workflow runs unit(nightly) + unit(stable) + docker-e2e in parallel. +# This script runs phases sequentially; CI wall time ≈ max(unit_stable, docker-e2e). +# +# Usage: +# ./contrib/dev-tools/workflow-benchmarks/run-testing-baseline.sh [--cold] +# +# Options: +# --cold Use isolated CARGO_HOME and target dir, and clear the Docker builder +# cache before measuring, approximating a shared-runner first run. +# Omit to use the default ~/.cargo and target/ (warm / incremental). +# +# Output: +# Structured timing lines on stdout and a dated log under: +# docs/issues/open/1841-1840-workflow-performance-baseline-analysis/evidence/ +# +# Re-use after later optimisations: +# Run this script once --cold and once without --cold after each change and +# compare the evidence logs to quantify the improvement. + +set -euo pipefail + +COLD=false +for arg in "$@"; do + case "$arg" in + --cold) COLD=true ;; + *) echo "Unknown argument: $arg" >&2; exit 1 ;; + esac +done + +REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../../.." && pwd)" +EVIDENCE_DIR="$REPO_ROOT/docs/issues/open/1841-1840-workflow-performance-baseline-analysis/evidence" +mkdir -p "$EVIDENCE_DIR" + +RUN_TYPE="warm" +$COLD && RUN_TYPE="cold" + +LOG="$EVIDENCE_DIR/testing-baseline-$(date -u +%Y%m%dT%H%M%SZ)-${RUN_TYPE}.log" + +time_phase() { + local scope="$1" name="$2" + shift 2 + echo "[$scope] ${name}_start" + local t0 t1 rc + t0=$(date +%s) + set +e + "$@" + rc=$? + set -e + t1=$(date +%s) + echo "[$scope] ${name}_seconds=$((t1 - t0))" + echo "[$scope] ${name}_exit_code=$rc" + return $rc +} + +{ + echo "[meta] start_utc=$(date -u +%Y-%m-%dT%H:%M:%SZ)" + echo "[meta] workflow=testing" + echo "[meta] run_type=${RUN_TYPE}" + echo "[meta] repo_root=${REPO_ROOT}" + + if $COLD; then + TMP_HOME="${REPO_ROOT}/.tmp/workflow-benchmarks/cargo-home" + TMP_TARGET="${REPO_ROOT}/.tmp/workflow-benchmarks/target" + echo "[cold] cache_reset_start" + rm -rf "${TMP_HOME}" "${TMP_TARGET}" + mkdir -p "${TMP_HOME}" "${TMP_TARGET}" + docker builder prune -af >/dev/null + docker image rm -f torrust-tracker:e2e-local >/dev/null 2>&1 || true + export CARGO_HOME="${TMP_HOME}" + export CARGO_TARGET_DIR="${TMP_TARGET}" + echo "[cold] cache_reset_done" + echo "[meta] cargo_home=${TMP_HOME}" + echo "[meta] cargo_target_dir=${TMP_TARGET}" + fi + + cd "${REPO_ROOT}" + + # --- unit job (shared phases) --- + time_phase "${RUN_TYPE}" fetch \ + cargo fetch --verbose + + time_phase "${RUN_TYPE}" install_linter \ + cargo install --locked \ + --git https://github.com/torrust/torrust-linting \ + --rev 70f84a29925b16a903110e494c9b8de519633a7f \ + --bin linter + + # nightly-only in CI; run unconditionally to measure time + time_phase "${RUN_TYPE}" format \ + cargo fmt --check + + time_phase "${RUN_TYPE}" lint \ + linter all + + time_phase "${RUN_TYPE}" test_docs \ + cargo test --doc --workspace + + time_phase "${RUN_TYPE}" test_unit \ + cargo test --tests --benches --examples --workspace --all-targets --all-features + + # --- docker-e2e job --- + time_phase "${RUN_TYPE}" docker_build_e2e \ + docker build \ + --file "${REPO_ROOT}/Containerfile" \ + --target release \ + --tag torrust-tracker:e2e-local \ + "${REPO_ROOT}" + + time_phase "${RUN_TYPE}" e2e_tracker \ + cargo run --bin e2e_tests_runner -- \ + --config-toml-path "./share/default/config/tracker.e2e.container.sqlite3.toml" \ + --tracker-image "torrust-tracker:e2e-local" \ + --skip-build + + time_phase "${RUN_TYPE}" e2e_qbittorrent_sqlite \ + cargo run --bin qbittorrent_e2e_runner -- \ + --tracker-image "torrust-tracker:e2e-local" \ + --skip-build \ + --db-driver sqlite3 \ + --timeout-seconds 600 + + time_phase "${RUN_TYPE}" e2e_qbittorrent_mysql \ + cargo run --bin qbittorrent_e2e_runner -- \ + --tracker-image "torrust-tracker:e2e-local" \ + --skip-build \ + --db-driver mysql \ + --timeout-seconds 600 + + time_phase "${RUN_TYPE}" e2e_qbittorrent_postgresql \ + cargo run --bin qbittorrent_e2e_runner -- \ + --tracker-image "torrust-tracker:e2e-local" \ + --skip-build \ + --db-driver postgresql \ + --timeout-seconds 600 + + echo "[meta] end_utc=$(date -u +%Y-%m-%dT%H:%M:%SZ)" +} | tee "$LOG" + +echo "" +echo "Evidence log: $LOG" diff --git a/cspell.json b/cspell.json index abbfb9b9b..6dd60c573 100644 --- a/cspell.json +++ b/cspell.json @@ -27,6 +27,7 @@ "repomix-output.xml", "TEMP-*.md", "mutants.out", - "mutants.out.old" + "mutants.out.old", + "docs/issues/**/evidence/*.html" ] } \ No newline at end of file diff --git a/docs/issues/drafts/1840-workflow-performance-container-test-gating/ISSUE.md b/docs/issues/drafts/1840-workflow-performance-container-test-gating/ISSUE.md index 5e8bf7d6a..395fbe97f 100644 --- a/docs/issues/drafts/1840-workflow-performance-container-test-gating/ISSUE.md +++ b/docs/issues/drafts/1840-workflow-performance-container-test-gating/ISSUE.md @@ -16,7 +16,7 @@ semantic-links: - .github/workflows/container.yaml - .github/workflows/testing.yaml - docs/issues/open/1840-improve-pr-workflow-performance-epic/EPIC.md - - docs/issues/open/1841-1840-workflow-performance-baseline-analysis/benchmark-results.md + - docs/issues/open/1841-1840-workflow-performance-baseline-analysis/benchmark-results-baseline.md --- diff --git a/docs/issues/drafts/1840-workflow-performance-container-workflow-build-deduplication/ISSUE.md b/docs/issues/drafts/1840-workflow-performance-container-workflow-build-deduplication/ISSUE.md index 44639b325..d388323b2 100644 --- a/docs/issues/drafts/1840-workflow-performance-container-workflow-build-deduplication/ISSUE.md +++ b/docs/issues/drafts/1840-workflow-performance-container-workflow-build-deduplication/ISSUE.md @@ -16,7 +16,7 @@ semantic-links: - .github/workflows/testing.yaml - Containerfile - docs/issues/open/1840-improve-pr-workflow-performance-epic/EPIC.md - - docs/issues/open/1841-1840-workflow-performance-baseline-analysis/benchmark-results.md + - docs/issues/open/1841-1840-workflow-performance-baseline-analysis/benchmark-results-baseline.md --- diff --git a/docs/issues/drafts/1840-workflow-performance-containerfile-target-scope/ISSUE.md b/docs/issues/drafts/1840-workflow-performance-containerfile-target-scope/ISSUE.md index 5714d1367..a83e7e8c6 100644 --- a/docs/issues/drafts/1840-workflow-performance-containerfile-target-scope/ISSUE.md +++ b/docs/issues/drafts/1840-workflow-performance-containerfile-target-scope/ISSUE.md @@ -16,7 +16,7 @@ semantic-links: - .github/workflows/container.yaml - .github/workflows/testing.yaml - docs/issues/open/1840-improve-pr-workflow-performance-epic/EPIC.md - - docs/issues/open/1841-1840-workflow-performance-baseline-analysis/benchmark-results.md + - docs/issues/open/1841-1840-workflow-performance-baseline-analysis/benchmark-results-baseline.md - docs/issues/open/1726-reduce-build-times-sccache/ISSUE.md --- diff --git a/docs/issues/drafts/1840-workflow-performance-dependency-layer-cache-reuse/ISSUE.md b/docs/issues/drafts/1840-workflow-performance-dependency-layer-cache-reuse/ISSUE.md index e04e35ae6..32a88fc85 100644 --- a/docs/issues/drafts/1840-workflow-performance-dependency-layer-cache-reuse/ISSUE.md +++ b/docs/issues/drafts/1840-workflow-performance-dependency-layer-cache-reuse/ISSUE.md @@ -16,7 +16,7 @@ semantic-links: - .github/workflows/container.yaml - .github/workflows/testing.yaml - docs/issues/open/1840-improve-pr-workflow-performance-epic/EPIC.md - - docs/issues/open/1841-1840-workflow-performance-baseline-analysis/benchmark-results.md + - docs/issues/open/1841-1840-workflow-performance-baseline-analysis/benchmark-results-baseline.md --- diff --git a/docs/issues/open/1841-1840-workflow-performance-baseline-analysis/ISSUE.md b/docs/issues/open/1841-1840-workflow-performance-baseline-analysis/ISSUE.md index dceaa449a..1412770ed 100644 --- a/docs/issues/open/1841-1840-workflow-performance-baseline-analysis/ISSUE.md +++ b/docs/issues/open/1841-1840-workflow-performance-baseline-analysis/ISSUE.md @@ -7,7 +7,7 @@ github-issue: 1841 spec-path: docs/issues/open/1841-1840-workflow-performance-baseline-analysis/ISSUE.md branch: "1841-1840-workflow-performance-baseline-analysis" related-pr: null -last-updated-utc: 2026-05-27 00:00 +last-updated-utc: 2026-05-28 00:00 semantic-links: skill-links: - create-issue @@ -15,7 +15,9 @@ semantic-links: - .github/workflows/container.yaml - .github/workflows/testing.yaml - docs/issues/open/1840-improve-pr-workflow-performance-epic/EPIC.md - - docs/issues/open/1841-1840-workflow-performance-baseline-analysis/benchmark-results.md + - docs/issues/open/1841-1840-workflow-performance-baseline-analysis/benchmark-results-baseline.md + - contrib/dev-tools/workflow-benchmarks/run-container-baseline.sh + - contrib/dev-tools/workflow-benchmarks/run-testing-baseline.sh - .github/skills/dev/planning/create-issue/SKILL.md --- @@ -57,25 +59,25 @@ The baseline should emulate shared-runner constraints as closely as practical on Status values: `TODO`, `IN_PROGRESS`, `BLOCKED`, `DONE`. -| ID | Status | Task | Notes / Expected Output | -| --- | ------ | ---------------------------------------- | ----------------------------------------------------------------------------------------------------------------------- | -| T1 | TODO | Define the benchmark procedure | A reproducible command sequence for cold and warm runs, including cache reset steps. | -| T2 | TODO | Capture baseline timings | A measured comparison for both workflows with and without local caches. | -| T3 | TODO | Profile linker-heavy non-runtime targets | List the highest-cost targets in the container build path and flag which are not required by the tracker runtime image. | -| T4 | TODO | Write the benchmark report | A durable report in this folder with workflow totals, sub-step timings, linker hotspot findings, and comparison notes. | +| ID | Status | Task | Notes / Expected Output | +| --- | ------ | ---------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------ | +| T1 | DONE | Define the benchmark procedure | Scripts under `contrib/dev-tools/workflow-benchmarks/` with `--cold`/warm modes and explicit Docker + Cargo cache reset steps. | +| T2 | DONE | Capture baseline timings | Measured cold and warm runs for both workflows; evidence logs in `evidence/`. | +| T3 | DONE | Profile linker-heavy non-runtime targets | Top 30 compile units ranked; 27 of 30 are not required by the runtime image. See `benchmark-results-baseline.md`. | +| T4 | DONE | Write the benchmark report | `benchmark-results-baseline.md` filled with workflow totals, per-phase timings, linker hotspot table, and comparison notes. | ## Progress Tracking ### Workflow Checkpoints -- [ ] Spec drafted in `docs/issues/drafts/` -- [ ] Spec reviewed and approved by user/maintainer -- [ ] GitHub issue created and issue number added to this spec +- [x] Spec drafted in `docs/issues/drafts/` +- [x] Spec reviewed and approved by user/maintainer +- [x] GitHub issue created and issue number added to this spec - [ ] (Optional, recommended for complex issues) Spec-only PR merged into `develop` before implementation -- [ ] Implementation completed -- [ ] Automatic verification completed (`linter all`, relevant tests, and any pre-push checks) -- [ ] Manual verification scenarios executed and recorded (status + evidence) -- [ ] Acceptance criteria reviewed after implementation and updated with evidence +- [x] Implementation completed +- [x] Automatic verification completed (`linter all`, relevant tests, and any pre-push checks) +- [x] Manual verification scenarios executed and recorded (status + evidence) +- [x] Acceptance criteria reviewed after implementation and updated with evidence - [ ] Reviewer validated acceptance criteria and updated checkboxes - [ ] Committer verified spec progress is up to date before commit - [ ] Issue closed and spec moved from `docs/issues/open/` to `docs/issues/closed/` @@ -87,15 +89,22 @@ Append one line per meaningful update. - 2026-05-27 00:00 UTC - GitHub Copilot - Drafted the baseline workflow profiling subissue for the performance EPIC - draft file created - 2026-05-27 00:00 UTC - GitHub Copilot - Expanded baseline scope to include linker-heavy target analysis and runtime relevance classification - draft updated - 2026-05-27 00:00 UTC - GitHub Copilot - Created GitHub issue #1841 and linked it as a child issue of EPIC #1840 - draft updated +- 2026-05-28 00:00 UTC - GitHub Copilot - Created branch `1841-1840-workflow-performance-baseline-analysis` and started implementation +- 2026-05-28 00:00 UTC - GitHub Copilot - Created reusable benchmark scripts under `contrib/dev-tools/workflow-benchmarks/` with `--cold`/warm modes and semantic links +- 2026-05-28 00:00 UTC - GitHub Copilot - Captured cold and warm container baseline: cold CI-equivalent ~260 s, warm ~2 s; evidence log saved +- 2026-05-28 00:00 UTC - GitHub Copilot - Captured cold and warm testing baseline: cold CI-equivalent ~510 s, warm ~331 s; evidence log saved +- 2026-05-28 00:00 UTC - GitHub Copilot - Ran `cargo build --timings --all-targets --release`; 27 of top 30 compile units not required by runtime image; HTML report saved +- 2026-05-28 00:00 UTC - GitHub Copilot - Filled `benchmark-results-baseline.md` with all measured data, phase breakdown, and linker-heavy target table +- 2026-05-28 00:00 UTC - GitHub Copilot - Fixed `linter all`: excluded evidence HTML from cspell, added British-English words to dictionary, cleaned `.tmp/`; opened torrust/torrust-linting#1 for directory-exclusion support ## Acceptance Criteria -- [ ] AC1: The baseline report records a no-cache and warm-cache run for both target workflows. -- [ ] AC2: The baseline report identifies the dominant bottleneck inside each workflow. -- [ ] AC3: The baseline report identifies linker-heavy targets and explicitly marks which are not required by the tracker runtime image. -- [ ] AC4: The report is stored in this subissue folder and can be reused for later comparisons. -- [ ] AC5: The benchmark procedure is explicit enough to rerun on the same machine later. -- [ ] `linter all` exits with code `0` +- [x] AC1: The baseline report records a no-cache and warm-cache run for both target workflows. +- [x] AC2: The baseline report identifies the dominant bottleneck inside each workflow. +- [x] AC3: The baseline report identifies linker-heavy targets and explicitly marks which are not required by the tracker runtime image. +- [x] AC4: The report is stored in this subissue folder and can be reused for later comparisons. +- [x] AC5: The benchmark procedure is explicit enough to rerun on the same machine later. +- [x] `linter all` exits with code `0` - [ ] Relevant measurement commands are run and documented - [ ] Manual verification scenarios are executed and documented (status + evidence) - [ ] Acceptance criteria are re-reviewed after implementation and reflect actual behavior @@ -115,12 +124,12 @@ Define verification before implementation starts and execute it before closing t Status values: `TODO`, `IN_PROGRESS`, `DONE`, `FAILED`, `BLOCKED`. -| ID | Scenario | Command/Steps | Expected Result | Status | Evidence | -| --- | ----------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | ------ | ---------------------------- | -| M1 | Cold baseline capture | Clear local Rust caches and any relevant Docker layer cache, then run the workflow-equivalent commands once for container and testing. | The report records no-cache wall times and the measured bottleneck for each workflow. | TODO | {log/output/screenshot/path} | -| M2 | Warm baseline capture | Re-run the same benchmark commands immediately after M1 without clearing caches. | The report records warm-cache wall times for both workflows and shows the expected speed-up. | TODO | {log/output/screenshot/path} | -| M3 | Linker hotspot capture | Capture per-target compilation and linking timings for the container build path and classify targets as runtime-required or not-required for the tracker image. | The report includes a ranked linker-heavy target list with runtime relevance classification. | TODO | {log/output/screenshot/path} | -| M4 | Persistent report check | Update the benchmark artifact in this folder and verify it still reflects the latest measured baseline. | The report stays versioned alongside the issue and is ready for future comparison runs. | TODO | {log/output/screenshot/path} | +| ID | Scenario | Command/Steps | Expected Result | Status | Evidence | +| --- | ----------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | ------ | ------------------------------------------------------------------------------------------------------ | +| M1 | Cold baseline capture | Clear local Rust caches and any relevant Docker layer cache, then run the workflow-equivalent commands once for container and testing. | The report records no-cache wall times and the measured bottleneck for each workflow. | DONE | `evidence/container-baseline-20260527T210123Z.log`, `evidence/testing-baseline-20260527T211129Z.log` | +| M2 | Warm baseline capture | Re-run the same benchmark commands immediately after M1 without clearing caches. | The report records warm-cache wall times for both workflows and shows the expected speed-up. | DONE | Same logs as M1 (warm sections `[warm] *`) | +| M3 | Linker hotspot capture | Capture per-target compilation and linking timings for the container build path and classify targets as runtime-required or not-required for the tracker image. | The report includes a ranked linker-heavy target list with runtime relevance classification. | DONE | `evidence/cargo-timing-release-20260528T074109Z.html`; top-30 table in `benchmark-results-baseline.md` | +| M4 | Persistent report check | Update the benchmark artifact in this folder and verify it still reflects the latest measured baseline. | The report stays versioned alongside the issue and is ready for future comparison runs. | DONE | `benchmark-results-baseline.md` updated with all measurements and follow-up instructions | Notes: @@ -129,13 +138,13 @@ Notes: ### Acceptance Verification -| AC ID | Status (`TODO`/`DONE`) | Evidence | -| ----- | ---------------------- | ------------------ | -| AC1 | TODO | {test/log/PR link} | -| AC2 | TODO | {test/log/PR link} | -| AC3 | TODO | {test/log/PR link} | -| AC4 | TODO | {test/log/PR link} | -| AC5 | TODO | {test/log/PR link} | +| AC ID | Status (`TODO`/`DONE`) | Evidence | +| ----- | ---------------------- | --------------------------------------------------------------------------------------------------------------------------- | +| AC1 | DONE | Cold and warm runs for both workflows measured; see `benchmark-results-baseline.md` §Measurement Table | +| AC2 | DONE | Docker build (container) and `docker_build_e2e` (testing) identified as dominant bottlenecks | +| AC3 | DONE | 27 of top 30 compile units not required by runtime image; see §Linker-Heavy Target Analysis | +| AC4 | DONE | Report stored in this subissue folder with follow-up instructions for future comparisons | +| AC5 | DONE | `run-container-baseline.sh` and `run-testing-baseline.sh` scripts with `--cold`/warm modes and documented cache-reset steps | ## Risks and Trade-offs diff --git a/docs/issues/open/1841-1840-workflow-performance-baseline-analysis/benchmark-results-baseline.md b/docs/issues/open/1841-1840-workflow-performance-baseline-analysis/benchmark-results-baseline.md new file mode 100644 index 000000000..26644f7c8 --- /dev/null +++ b/docs/issues/open/1841-1840-workflow-performance-baseline-analysis/benchmark-results-baseline.md @@ -0,0 +1,433 @@ +--- +semantic-links: + related-artifacts: + - docs/issues/open/1841-1840-workflow-performance-baseline-analysis/ISSUE.md + - .github/workflows/container.yaml + - .github/workflows/testing.yaml + - contrib/dev-tools/workflow-benchmarks/run-container-baseline.sh + - contrib/dev-tools/workflow-benchmarks/run-testing-baseline.sh +--- + +# Baseline Workflow Benchmark Results + +Recorded on: 2026-05-28 + +This file is the living benchmark artifact for the workflow-performance EPIC. +Update it whenever a later optimization changes the performance profile so future +runs can be compared against the same baseline. + +## Measurement Environment + +| Property | Value | +| ----------- | -------------------------------------------------------------------- | +| **Date** | 2026-05-28 | +| **Host OS** | Ubuntu 26.04 LTS "Resolute Raccoon" — kernel 7.0.0-15-generic | +| **CPU** | AMD Ryzen 9 7950X — 16 cores / 32 threads @ up to 5883 MHz | +| **RAM** | 64 GiB total (62 GiB available at measurement time) | +| **Disk** | 1.8 TiB root volume (`/dev/mapper/ubuntu--vg-ubuntu--lv`), 76 % used | +| **Docker** | 28.3.3 | +| **Rust** | rustc 1.98.0-nightly (57d06900f 2026-05-27) / cargo 1.98.0-nightly | +| **Linker** | system default (`cc` / BFD linker; no `mold` or `lld`) | + +> These are **local developer-machine numbers**, not CI times. GitHub-hosted +> runners use a different CPU/RAM profile, so absolute durations will differ. +> Use the ratios and bottleneck rankings — not the raw seconds — when +> reasoning about what to optimize first. + +## How to Reproduce + +```bash +# Cold run (clears Docker builder cache and isolated Cargo dirs) +./contrib/dev-tools/workflow-benchmarks/run-container-baseline.sh --cold +./contrib/dev-tools/workflow-benchmarks/run-testing-baseline.sh --cold + +# Warm run (immediately after, no cache reset) +./contrib/dev-tools/workflow-benchmarks/run-container-baseline.sh +./contrib/dev-tools/workflow-benchmarks/run-testing-baseline.sh + +# Linker-heavy target profiling (release, all targets) +cargo build --timings --all-targets --release --workspace --all-features +# HTML report written to: target/cargo-timings/cargo-timing.html +``` + +Evidence logs are stored under +`docs/issues/open/1841-1840-workflow-performance-baseline-analysis/evidence/`. + +## Cache Reset Procedure (Cold Run) + +The following was performed before the cold run to approximate shared-runner +first-run conditions: + +```bash +docker builder prune -af # clear all Docker BuildKit cache +docker image rm -f torrust-tracker:local torrust-tracker:e2e-local # drop local images +# testing script additionally isolates CARGO_HOME and CARGO_TARGET_DIR +# under .tmp/workflow-benchmarks/ and removes them before the cold run +``` + +The local Cargo registry (`~/.cargo/registry`) was **not** cleared because +GitHub-hosted runners also receive a pre-warmed package registry via +`Swatinem/rust-cache`. Clearing it would produce times that are +artificially slower than the real CI cold run. + +## Measurement Table + +CI runs `container` debug and release targets in parallel (matrix strategy) and +`testing` unit(nightly) + unit(stable) + docker-e2e in parallel. +CI wall time therefore approximates **max(parallel jobs)**, whereas the scripts +run jobs sequentially. Sequential totals are noted and CI-equivalent wall time is +estimated in the Notes column. + +| Workflow | Run Type | Sequential Total | CI-equivalent Wall Time | Main Bottleneck | Notes | +| --------- | --------------- | ---------------- | ----------------------- | ------------------------ | ------------------------------------------------------------------ | +| container | cold / no-cache | ~499 s (~8.3 m) | ~260 s (~4.3 m) | release compile+link | debug=239 s, release=260 s run in parallel on CI | +| container | warm / cached | ~2 s | ~2 s | none (all layers cached) | Both targets hit Docker layer cache fully | +| testing | cold / no-cache | ~767 s (~12.8 m) | ~510 s (~8.5 m) | docker-e2e Docker build | unit≈257 s, docker-e2e≈510 s; lint exited 1 (see §Notes) | +| testing | warm / cached | ~393 s (~6.6 m) | ~331 s (~5.5 m) | docker-e2e Docker build | unit≈62 s, docker-e2e≈331 s; docker build not fully cached locally | + +## Internal Phase Breakdown + +### Container Workflow + +Phases mirror `.github/workflows/container.yaml` → job `test` (matrix: debug, release). + +| Phase | Cold Run | Warm Run | Notes | +| ----------------- | -------- | -------- | ---------------------------------------------------------------------------------------------- | +| build (debug) | 239 s | 2 s | Bottleneck on cold: `dependencies_debug` cook (~47 s) + `build_debug` nextest archive (~131 s) | +| inspect (debug) | 0 s | 0 s | Negligible | +| build (release) | 260 s | 0 s | Bottleneck on cold: `dependencies` cook (~64 s) + `build` nextest archive (~157 s) | +| inspect (release) | 0 s | 0 s | Negligible | + +### Testing Workflow + +Phases mirror `.github/workflows/testing.yaml` → jobs `unit` + `docker-e2e`. + +#### Unit job + +| Phase | Cold Run | Warm Run | Notes | +| ----------------- | --------- | -------- | ------------------------------------------------- | +| fetch | 7 s | 0 s | Warm: all crates already in registry | +| install_linter | 5 s | 0 s | Warm: binary already in `~/.cargo/bin` | +| format | 0 s | 1 s | Negligible | +| lint | 48 s | 16 s | Exits 1 on both runs; see Notes below | +| test_docs | 58 s | 29 s | Warm benefits from incremental compilation | +| test_unit | 139 s | 16 s | Warm: incremental; cold dominated by compile+link | +| **unit subtotal** | **257 s** | **62 s** | | + +#### Docker E2E job + +| Phase | Cold Run | Warm Run | Notes | +| -------------------------- | --------- | --------- | ---------------------------------------------------------------------------------------------- | +| docker_build_e2e | 312 s | 234 s | Dominant phase; warm still slow — local Docker cache does not cover `dependencies` cook layers | +| e2e_tracker | 79 s | 16 s | Warm: image already built | +| e2e_qbittorrent_sqlite | 61 s | 24 s | Container startup + torrent seeding | +| e2e_qbittorrent_mysql | 29 s | 29 s | Consistent; DB startup dominates | +| e2e_qbittorrent_postgresql | 29 s | 28 s | Consistent; DB startup dominates | +| **e2e subtotal** | **510 s** | **331 s** | | + +Notes: + +- `lint` exited with code 1 on both cold and warm runs. This indicates existing + lint issues in the working tree at the time of measurement and does not affect + the timing validity; the step still ran to completion and consumed the measured time. +- Local Docker layer cache only partially covers `docker_build_e2e` on the warm + run because the `COPY . /build/src` and `COPY . /test/src` layers are + invalidated by any file change. The 234 s warm time reflects cache hits for + base images and dependency layers but a fresh `build` stage. + +## Linker-Heavy Target Analysis (Container Build Path) + +Source: `cargo build --timings --all-targets --release --workspace --all-features` +run on 2026-05-28. Full HTML report: +`docs/issues/open/1841-1840-workflow-performance-baseline-analysis/evidence/cargo-timing-release-20260528T074109Z.html` + +Total `cargo build` wall time reported by `--timings`: **188 s** (warm incremental, +local machine). + +Top 30 compile units by duration: + +| Rank | Duration | Crate / Package | Target | Runtime image? | Notes | +| ---- | -------- | ----------------------------------------------- | ------------------------------------------------ | -------------- | --------------------------------------------------- | +| 1 | 117 s | torrust-tracker | integration (test) | **no** | Integration test binary; not shipped in image | +| 2 | 117 s | torrust-tracker | torrust-tracker (bin) | **yes** | Main tracker binary — required | +| 3 | 116 s | torrust-tracker | profiling (bin) | **no** | Profiling helper binary; not in runtime image | +| 4 | 109 s | torrust-tracker | torrust_tracker_lib (lib, test) | **no** | Test variant of the lib; not shipped | +| 5 | 109 s | torrust-tracker-axum-health-check-api-server | integration (test) | **no** | Integration test binary; not shipped | +| 6 | 104 s | torrust-tracker-core | persistence_benchmark_runner (bin) | **no** | Benchmark binary; not shipped | +| 7 | 103 s | torrust-tracker-core | torrust_tracker_core (lib, test) | **no** | Test variant of the lib; not shipped | +| 8 | 94 s | torrust-tracker-axum-http-server | integration (test) | **no** | Integration test binary; not shipped | +| 9 | 93 s | torrust-tracker-axum-rest-api-server | integration (test) | **no** | Integration test binary; not shipped | +| 10 | 92 s | torrust-tracker-axum-rest-api-server | torrust_tracker_axum_rest_api_server (lib, test) | **no** | Test variant of the lib; not shipped | +| 11 | 89 s | torrust-tracker-axum-http-server | torrust_tracker_axum_http_server (lib, test) | **no** | Test variant of the lib; not shipped | +| 12 | 78 s | torrust-tracker-udp-server | torrust_tracker_udp_server (lib, test) | **no** | Test variant of the lib; not shipped | +| 13 | 71 s | torrust-tracker-udp-server | integration (test) | **no** | Integration test binary; not shipped | +| 14 | 60 s | torrust-tracker | qbittorrent_e2e_runner (bin) | **no** | E2E test runner binary; not shipped | +| 15 | 56 s | torrust-tracker-rest-api-core | torrust_tracker_rest_api_core (lib, test) | **no** | Test variant of the lib; not shipped | +| 16 | 52 s | torrust-tracker-http-tracker-core | torrust_tracker_http_tracker_core (lib, test) | **no** | Test variant of the lib; not shipped | +| 17 | 51 s | torrust-tracker-client | tracker_client (bin) | **no** | CLI client binary; not in runtime image | +| 18 | 50 s | torrust-tracker-core | integration (test) | **no** | Integration test binary; not shipped | +| 19 | 48 s | torrust-tracker-http-tracker-core | http_tracker_core_benchmark (bench, test) | **no** | Benchmark; not shipped | +| 20 | 47 s | torrust-tracker-client | tracker_checker (bin) | **no** | CLI checker binary; not in runtime image | +| 21 | 46 s | torrust-tracker-udp-tracker-core | udp_tracker_core_benchmark (bench, test) | **no** | Benchmark; not shipped | +| 22 | 46 s | libsqlite3-sys | build-script (run) | **yes** | SQLite3 C library compilation — required by runtime | +| 23 | 45 s | torrust-tracker-core | persistence_benchmark_runner (bin, test) | **no** | Benchmark test variant; not shipped | +| 24 | 44 s | torrust-tracker | e2e_tests_runner (bin) | **no** | E2E test runner binary; not shipped | +| 25 | 41 s | torrust-tracker-client | http_tracker_client (bin) | **no** | CLI client binary; not in runtime image | +| 26 | 39 s | torrust-tracker-torrent-repository-benchmarking | repository_benchmark (bench, test) | **no** | Benchmark; not shipped | +| 27 | 35 s | torrust-tracker | qbittorrent_e2e_runner (bin, test) | **no** | E2E runner test variant; not shipped | +| 28 | 35 s | torrust-tracker | profiling (bin, test) | **no** | Profiling test variant; not shipped | +| 29 | 35 s | torrust-tracker | e2e_tests_runner (bin, test) | **no** | E2E runner test variant; not shipped | +| 30 | 35 s | torrust-tracker | http_health_check (bin) | **yes** | Health-check binary — required by runtime image | + +**Of the top 30 compile units, only 3 are required by the tracker runtime image** +(`torrust-tracker` bin, `libsqlite3-sys` build script, `http_health_check` bin). +The remaining 27 units are test binaries, benchmarks, or utility binaries that +are compiled by the `--tests --benches --examples --all-targets` flags in the +Containerfile `cargo nextest archive` commands but are never included in the +final runtime image. + +## Docker Layer Breakdown (Cold Run) + +> **Note — per-layer capture requires `--progress plain`.** The initial cold run +> (`container-baseline-20260527T210123Z.log`) was captured before `--progress plain` +> was added to the script; Docker's BuildKit wrote per-step output to **stderr** only, +> so it was not saved in the evidence log. The `run-container-baseline.sh` script was +> updated on 2026-05-28 to pass `--progress plain`, which routes step output through +> stdout so it is captured alongside the phase-timing lines. Re-run the script with +> `--cold` to populate a new evidence log with per-layer durations. +> +> **Sub-command timing inside RUN steps**: BuildKit reports one wall-clock time per +> `RUN` instruction. When a `RUN` instruction chains multiple commands with `&&` or +> `;`, the individual command times are invisible at the step level. `time` wrappers +> were added on 2026-05-28 to every multi-command `RUN` block in the `Containerfile` +> (e.g. `apt-get update`, `cc` compile, `cp`/`chown`/`chmod` post-processing steps). +> With `--progress plain` these `time` outputs appear inline in the step's stdout/stderr +> stream and are captured in the evidence log. + +The layer structure and approximate timings listed below were observed in the +terminal output during the initial cold run and are provided as a structural +reference until a new evidence log is available. + +### Debug target (`--target debug`) + +| Layer (Dockerfile stage → step) | Approx. Cold Duration | Description | +| ------------------------------------------------------- | --------------------- | --------------------------------------------- | +| `chef` — install cargo-chef | ~7 s | Download and compile cargo-chef | +| `recipe` — `cargo chef prepare` | ~0.1 s | Generate `recipe.json` dependency manifest | +| `dependencies_debug` — `cargo chef cook` (cook) | ~47 s | Pre-compile dependency crates (debug profile) | +| `dependencies_debug` — `cargo nextest archive` (warmup) | ~8 s | Warm nextest archive with dep-only crates | +| `build_debug` — `cargo nextest archive` (full) | ~131 s | Compile + link all targets (debug profile) | +| `test_debug` — `cargo nextest run` (×2) | ~23 s total | Execute tests inside container | + +**Total observed (debug)**: ~216 s (cf. `build_debug_seconds=239` in the log; +the discrepancy reflects Docker overhead and steps with sub-second durations +not listed above). + +### Release target (`--target release`) + +| Layer (Dockerfile stage → step) | Approx. Cold Duration | Description | +| ------------------------------------------------- | --------------------- | ----------------------------------------------- | +| `recipe` — `cargo chef prepare` | (cached from debug) | Shared with debug target; no additional cost | +| `dependencies` — `cargo chef cook` (cook) | ~64 s | Pre-compile dependency crates (release profile) | +| `dependencies` — `cargo nextest archive` (warmup) | ~14 s | Warm nextest archive with dep-only crates | +| `build` — `cargo nextest archive` (full) | ~157 s | Compile + link all targets (release profile) | +| `test` — `cargo nextest run` (×2) | ~23 s total | Execute tests inside container | + +**Total observed (release)**: ~258 s (cf. `build_release_seconds=260` in the +log). + +### Key observations + +- The `build_*` stages dominate: 131 s (debug) and 157 s (release), reflecting + the cost of linking all non-runtime binaries and test targets. +- `dependencies_*` stages (~47–64 s) benefit from Docker layer caching on warm + runs; re-running after a `Cargo.lock` change invalidates these layers. +- The `recipe` stage is effectively free (<1 s) and is shared between debug and + release via Docker layer cache. + +### Finding: `.tmp/` missing from `.dockerignore` inflated COPY steps by ~30 s + +During the initial cold run, the `COPY . /build/src` step in the `recipe` and +`build_*` stages took approximately **30 s** — a cost that should be +near-instant. Investigation revealed that the `.tmp/` directory (used by the +`run-testing-baseline.sh` cold-run benchmark to isolate `CARGO_HOME` and +`CARGO_TARGET_DIR`) was not listed in `.dockerignore`. + +`.tmp/` is the workspace-local temp directory used by AI agent tools (e.g. +`TORRUST_GIT_HOOKS_LOG_DIR=.tmp` routes pre-commit/pre-push logs there). The +benchmark script `run-testing-baseline.sh` also writes its isolated +`CARGO_HOME` and `CARGO_TARGET_DIR` under `.tmp/workflow-benchmarks/`. After +a cold run, that sub-directory can reach several gigabytes of cargo registry +and build artifacts, causing Docker to include it in the build context and copy +it into intermediate stages. + +**Fix applied (2026-05-28)**: `/.tmp/` was added to `.dockerignore`. Re-running +the cold benchmark after this fix should reduce all `COPY . /…` steps to under +1 s. + +**Lesson**: Any directory that is git-ignored but resides in the project root +must also be explicitly excluded from the Docker build context via `.dockerignore`. +These two ignore mechanisms are independent — git does not feed into Docker. +The per-step timing captured by `--progress plain` makes this category of +problem immediately visible; without it, the slow `COPY` would have been hidden +inside the aggregate stage time. + +## Cargo Build Phase Analysis (Frontend vs Codegen vs Linker) + +Source: `cargo build --timings --all-targets --release --workspace --all-features` +(same run as the Linker-Heavy Target Analysis above; total wall time 188 s, warm +incremental). + +### How `cargo --timings` tracks phases + +`cargo --timings` records two **sections** per compilation unit: + +| Section name | Covers | +| ------------ | ---------------------------------------------------------------------- | +| `frontend` | Parsing, macro expansion, type-checking, borrow-checking, MIR lowering | +| `codegen` | LLVM IR generation and object-file emission (`rustc` internal) | + +The **linker** is an external process invoked by `rustc` after codegen. It is +not tracked as a named section; its wall time appears as the gap between the end +of `codegen` and the end of the compilation unit's overall `duration`, or — for +units where `rustc` hands off immediately to the linker — as a `null` sections +field in the timing data. + +### Units with section tracking (compilation-dominated, top 15) + +These are external dependency crates compiled incrementally. Each unit is at +most ~8 s because individual crate compilation is parallelised. + +| Rank | Total (s) | Frontend (s) | Codegen (s) | Crate | +| ---- | --------- | ------------ | ----------- | ------------------------------------------ | +| 1 | 8.3 | 3.1 | 5.1 | torrust-tracker (lib) | +| 2 | 7.7 | 1.9 | 5.8 | torrust-tracker-axum-rest-api-server (lib) | +| 3 | 7.6 | 4.4 | 3.1 | tokio | +| 4 | 7.5 | 7.2 | 0.2 | bollard-stubs | +| 5 | 7.4 | 3.8 | 3.6 | sqlx-postgres | +| 6 | 7.1 | 2.4 | 4.7 | criterion | +| 7 | 6.5 | 2.5 | 4.0 | criterion (test variant) | +| 8 | 6.0 | 4.2 | 1.9 | h2 | +| 9 | 5.9 | 2.3 | 3.7 | regex-automata | +| 10 | 5.7 | 1.0 | 4.7 | torrust-tracker-configuration | +| 11 | 5.6 | 2.0 | 3.6 | clap_builder | +| 12 | 5.4 | 3.7 | 1.8 | sqlx-postgres (test variant) | +| 13 | 5.2 | 2.1 | 3.1 | sqlx-mysql | +| 14 | 5.1 | 1.6 | 3.5 | toml_edit | +| 15 | 4.6 | 2.3 | 2.2 | sqlx-core | + +**No single crate compilation takes more than ~8 s.** Frontend and codegen time +per crate are roughly balanced for most units. + +### Units without section tracking (linker/C-build dominated, top 20) + +These units report `sections: null` in the timing data, meaning `cargo` did not +capture frontend/codegen section boundaries. For final binary and test targets +this is the signature of a **linker invocation** — `rustc` hands all `.rlib` +object files to the external linker and waits; no `rustc`-internal phase tracking +occurs. For C build scripts (`build-script (run)`) the time is C compiler +invocation. + +| Rank | Total (s) | Crate | Target | +| ---- | --------- | -------------------------------------------- | ---------------------------------------- | +| 1 | 117 | torrust-tracker | integration (test) | +| 2 | 117 | torrust-tracker | torrust-tracker (bin) | +| 3 | 116 | torrust-tracker | profiling (bin) | +| 4 | 109 | torrust-tracker | torrust_tracker_lib (lib,test) | +| 5 | 109 | torrust-tracker-axum-health-check-api-server | integration (test) | +| 6 | 104 | torrust-tracker-core | persistence_benchmark_runner (bin) | +| 7 | 103 | torrust-tracker-core | torrust_tracker_core (lib,test) | +| 8 | 94 | torrust-tracker-axum-http-server | integration (test) | +| 9 | 93 | torrust-tracker-axum-rest-api-server | integration (test) | +| 10 | 92 | torrust-tracker-axum-rest-api-server | lib (test) | +| 11 | 89 | torrust-tracker-axum-http-server | lib (test) | +| 12 | 78 | torrust-tracker-udp-server | lib (test) | +| 13 | 71 | torrust-tracker-udp-server | integration (test) | +| 14 | 60 | torrust-tracker | qbittorrent_e2e_runner (bin) | +| 15 | 56 | torrust-tracker-rest-api-core | lib (test) | +| 16 | 52 | torrust-tracker-http-tracker-core | lib (test) | +| 17 | 51 | torrust-tracker-client | tracker_client (bin) | +| 18 | 50 | torrust-tracker-core | integration (test) | +| 19 | 48 | torrust-tracker-http-tracker-core | http_tracker_core_benchmark (bench,test) | +| 20 | 47 | torrust-tracker-client | tracker_checker (bin) | + +**Build scripts (C compiler)**: + +| Duration (s) | Crate | Notes | +| ------------ | -------------- | ------------------------------------- | +| 46 | libsqlite3-sys | SQLite3 C source compilation | +| 33 | aws-lc-sys | AWS-LC (BoringSSL fork) C compilation | +| 26 | zstd-sys | zstd C source compilation | + +### Conclusion: the build is linker-dominated + +- **Individual crate compilation** (frontend + codegen): ≤ 8 s per crate. +- **Binary/test target linking**: 35–117 s per binary — an order of magnitude more than any single crate compilation. +- **Root cause**: the workspace compiles ~20+ binary and test targets (`--all-targets`), each of which requires a full linker invocation over the entire transitive closure of `.rlib` objects. + +Switching to a faster linker (e.g. `mold` or `lld`) or removing non-runtime binary targets from the build (subissue #2) are the two highest-leverage optimisations. + +## Comparison Notes + +### What dominated the cold run? + +- **Container workflow**: The `build` and `dependencies` Dockerfile stages, which + run `cargo nextest archive --tests --benches --examples --all-targets` for both + debug (131 s archive + 47 s cook) and release (157 s archive + 64 s cook) profiles. + The linking step for all non-runtime targets is the dominant cost. + +- **Testing workflow**: The Docker E2E job (`docker_build_e2e` = 312 s) dominates + because it re-executes the same full `cargo nextest archive` build inside the + container. On CI, the `unit` job (139 s compile) and `docker-e2e` job run in + parallel, so CI wall time is approximately 510 s. + +### Which phases benefited from the warm cache? + +- `test_unit`: 139 s → 16 s (incremental Rust compilation). +- `test_docs`: 58 s → 29 s (incremental). +- `fetch` and `install_linter`: 12 s → 0 s (registry and binary caches). +- `e2e_tracker`: 79 s → 16 s (image already in daemon cache). +- Container `build (debug)` and `build (release)`: essentially 0 s (all Docker + layers cached). + +### Which phases are not helped much by caching? + +- `docker_build_e2e` warm: still 234 s because the `COPY . /build/src` layer + invalidates on any file change, forcing the `build` stage to rerun. +- qBittorrent E2E phases: 29 s each regardless; dominated by container startup + and DB initialisation, not by build time. + +### Which linker-heavy targets appear unrelated to the final runtime image? + +All test binaries, benches, and utility binaries in the top 30 list (27 out of +30 units). The most significant by time: + +1. `torrust-tracker` integration tests — 117 s +2. `torrust-tracker` profiling bin — 116 s +3. All package-level integration test and lib-test variants — typically 50–110 s each + +These are compiled because the Containerfile uses `--tests --benches --examples +--all-targets`. Narrowing the Containerfile build flags to only the targets +required for the runtime image is the most impactful next optimization (see +subissue #2 in the EPIC). + +### Which measurements should be repeated after the next optimization? + +After subissue #2 (narrow Containerfile targets): + +- Re-run `run-container-baseline.sh --cold` and warm. +- Re-run `run-testing-baseline.sh --cold` and warm (the `docker_build_e2e` phase). +- Re-run `cargo build --timings --all-targets --release` to compare the new top-30. + +## Follow-up + +Append a new dated note after each later optimization. + +- **2026-05-28** — Initial baseline captured. Container cold≈499 s sequential + (CI≈260 s parallel). Testing cold≈767 s sequential (CI≈510 s parallel, dominated + by docker-e2e). 27 of the top 30 compile units are not required by the runtime + image; narrowing Containerfile build flags is the recommended first optimization. +- **2026-05-28** — `/.tmp/` added to `.dockerignore`; `time` wrappers added to all + multi-command `RUN` blocks in the `Containerfile`; `--progress plain` added to + `run-container-baseline.sh`. Re-run `--cold` to capture a new baseline log with + accurate per-step and per-command durations. diff --git a/docs/issues/open/1841-1840-workflow-performance-baseline-analysis/benchmark-results.md b/docs/issues/open/1841-1840-workflow-performance-baseline-analysis/benchmark-results.md deleted file mode 100644 index 781f7d521..000000000 --- a/docs/issues/open/1841-1840-workflow-performance-baseline-analysis/benchmark-results.md +++ /dev/null @@ -1,82 +0,0 @@ ---- -semantic-links: - related-artifacts: - - docs/issues/open/1841-1840-workflow-performance-baseline-analysis/ISSUE.md - - .github/workflows/container.yaml - - .github/workflows/testing.yaml ---- - -# Baseline Workflow Benchmark Results - -Recorded on: 2026-05-27 - -This file is the living benchmark artifact for the workflow-performance EPIC. Update it whenever a later optimization changes the performance profile so future runs can be compared against the same baseline. - -## Benchmark Policy - -- Capture one cold run after clearing relevant local caches. -- Capture one warm run immediately after the cold run without clearing caches. -- Record both total workflow time and the main internal phases for each workflow. -- Note the cache-reset procedure used to approximate a shared-runner first run. - -## Cache Reset Notes - -Document the exact commands used before the cold run, including any of the following where applicable: - -- `cargo clean` -- Removal of `target/` and other local Rust build artifacts -- Clearing the local cargo registry and git checkout caches if they would affect the run -- Docker builder cache cleanup if the workflow step uses Docker layers locally - -## Measurement Table - -| Workflow | Run Type | Total Time | Main Bottleneck | Notes | -| --------- | --------------- | ---------- | --------------- | -------------------------------------- | -| container | cold / no-cache | TBD | TBD | Fill after the first baseline capture. | -| container | warm / cached | TBD | TBD | Fill after the second capture. | -| testing | cold / no-cache | TBD | TBD | Fill after the first baseline capture. | -| testing | warm / cached | TBD | TBD | Fill after the second capture. | - -## Internal Phase Breakdown - -Record the major steps inside each job, ordered from longest to shortest if possible. - -### Container Workflow - -| Phase | Cold Run | Warm Run | Notes | -| ----- | -------- | -------- | ----- | -| TBD | TBD | TBD | TBD | - -### Testing Workflow - -| Phase | Cold Run | Warm Run | Notes | -| ----- | -------- | -------- | ----- | -| TBD | TBD | TBD | TBD | - -## Linker-Heavy Target Analysis (Container Build Path) - -Record the most expensive compile and link targets observed while reproducing the container build path. - -| Rank | Target / Package | Estimated Compile+Link Time | Required for Tracker Runtime Image (`yes`/`no`) | Notes | -| ---- | ---------------- | --------------------------- | ----------------------------------------------- | ----- | -| 1 | TBD | TBD | TBD | TBD | -| 2 | TBD | TBD | TBD | TBD | -| 3 | TBD | TBD | TBD | TBD | - -Guidance: - -- Mark `yes` only when the target is needed to produce or validate the tracker runtime image. -- Mark `no` when the target is outside runtime image needs (for example benches, unrelated binaries, or examples not required by image tests). -- Keep rationale short and concrete in the Notes column. - -## Comparison Notes - -- What dominated the cold run? -- Which phases benefited from the warm cache? -- Which phases are not helped much by caching? -- Which linker-heavy targets appear unrelated to the final tracker runtime image? -- Which measurements should be repeated after the next optimization? - -## Follow-up - -After each later workflow optimization, append a new dated note here with the same measurement format so the EPIC retains a simple before/after history. diff --git a/docs/issues/open/1841-1840-workflow-performance-baseline-analysis/evidence/cargo-timing-release-20260528T074109Z.html b/docs/issues/open/1841-1840-workflow-performance-baseline-analysis/evidence/cargo-timing-release-20260528T074109Z.html new file mode 100644 index 000000000..0cd1d1f37 --- /dev/null +++ b/docs/issues/open/1841-1840-workflow-performance-baseline-analysis/evidence/cargo-timing-release-20260528T074109Z.html @@ -0,0 +1,40964 @@ + + +
+| Targets: | bittorrent-peer-id 3.0.0-develop (lib) bittorrent-peer-id 3.0.0-develop (lib) torrust-clock 3.0.0-develop (lib) torrust-clock 3.0.0-develop (lib) torrust-clock 3.0.0-develop ( integration "test") torrust-located-error 3.0.0-develop (lib) torrust-located-error 3.0.0-develop (lib) torrust-metrics 3.0.0-develop (lib) torrust-metrics 3.0.0-develop (lib) torrust-net-primitives 3.0.0-develop (lib) torrust-net-primitives 3.0.0-develop (lib) torrust-server-lib 3.0.0-develop (lib) torrust-server-lib 3.0.0-develop (lib) torrust-tracker 3.0.0-develop (lib) torrust-tracker 3.0.0-develop (lib) torrust-tracker 3.0.0-develop ( e2e_tests_runner "bin") torrust-tracker 3.0.0-develop ( e2e_tests_runner "bin") torrust-tracker 3.0.0-develop ( http_health_check "bin") torrust-tracker 3.0.0-develop ( http_health_check "bin") torrust-tracker 3.0.0-develop ( profiling "bin") torrust-tracker 3.0.0-develop ( profiling "bin") torrust-tracker 3.0.0-develop ( qbittorrent_e2e_runner "bin") torrust-tracker 3.0.0-develop ( qbittorrent_e2e_runner "bin") torrust-tracker 3.0.0-develop ( torrust-tracker "bin") torrust-tracker 3.0.0-develop ( torrust-tracker "bin") torrust-tracker 3.0.0-develop ( integration "test") torrust-tracker-axum-health-check-api-server 3.0.0-develop (lib) torrust-tracker-axum-health-check-api-server 3.0.0-develop (lib) torrust-tracker-axum-health-check-api-server 3.0.0-develop ( integration "test") torrust-tracker-axum-http-server 3.0.0-develop (lib) torrust-tracker-axum-http-server 3.0.0-develop (lib) torrust-tracker-axum-http-server 3.0.0-develop ( integration "test") torrust-tracker-axum-rest-api-server 3.0.0-develop (lib) torrust-tracker-axum-rest-api-server 3.0.0-develop (lib) torrust-tracker-axum-rest-api-server 3.0.0-develop ( integration "test") torrust-tracker-axum-server 3.0.0-develop (lib) torrust-tracker-axum-server 3.0.0-develop (lib) torrust-tracker-client 3.0.0-develop (lib) torrust-tracker-client 3.0.0-develop (lib) torrust-tracker-client 3.0.0-develop ( http_tracker_client "bin") torrust-tracker-client 3.0.0-develop ( http_tracker_client "bin") torrust-tracker-client 3.0.0-develop ( tracker_checker "bin") torrust-tracker-client 3.0.0-develop ( tracker_checker "bin") torrust-tracker-client 3.0.0-develop ( tracker_client "bin") torrust-tracker-client 3.0.0-develop ( tracker_client "bin") torrust-tracker-client 3.0.0-develop ( udp_tracker_client "bin") torrust-tracker-client 3.0.0-develop ( udp_tracker_client "bin") torrust-tracker-client 3.0.0-develop ( tracker_checker "test") torrust-tracker-client 3.0.0-develop ( tracker_client "test") torrust-tracker-client-lib 3.0.0-develop (lib) torrust-tracker-client-lib 3.0.0-develop (lib) torrust-tracker-configuration 3.0.0-develop (lib) torrust-tracker-configuration 3.0.0-develop (lib) torrust-tracker-contrib-bencode 3.0.0-develop (lib) torrust-tracker-contrib-bencode 3.0.0-develop (lib) torrust-tracker-contrib-bencode 3.0.0-develop ( mod "test") torrust-tracker-contrib-bencode 3.0.0-develop ( bencode_benchmark "bench") torrust-tracker-core 3.0.0-develop (lib) torrust-tracker-core 3.0.0-develop (lib) torrust-tracker-core 3.0.0-develop ( persistence_benchmark_runner "bin") torrust-tracker-core 3.0.0-develop ( persistence_benchmark_runner "bin") torrust-tracker-core 3.0.0-develop ( integration "test") torrust-tracker-events 3.0.0-develop (lib) torrust-tracker-events 3.0.0-develop (lib) torrust-tracker-http-tracker-core 3.0.0-develop (lib) torrust-tracker-http-tracker-core 3.0.0-develop (lib) torrust-tracker-http-tracker-core 3.0.0-develop ( http_tracker_core_benchmark "bench") torrust-tracker-http-tracker-protocol 3.0.0-develop (lib) torrust-tracker-http-tracker-protocol 3.0.0-develop (lib) torrust-tracker-primitives 3.0.0-develop (lib) torrust-tracker-primitives 3.0.0-develop (lib) torrust-tracker-rest-api-client 3.0.0-develop (lib) torrust-tracker-rest-api-client 3.0.0-develop (lib) torrust-tracker-rest-api-core 3.0.0-develop (lib) torrust-tracker-rest-api-core 3.0.0-develop (lib) torrust-tracker-swarm-coordination-registry 3.0.0-develop (lib) torrust-tracker-swarm-coordination-registry 3.0.0-develop (lib) torrust-tracker-test-helpers 3.0.0-develop (lib) torrust-tracker-test-helpers 3.0.0-develop (lib) torrust-tracker-torrent-repository-benchmarking 3.0.0-develop (lib) torrust-tracker-torrent-repository-benchmarking 3.0.0-develop (lib) torrust-tracker-torrent-repository-benchmarking 3.0.0-develop ( integration "test") torrust-tracker-torrent-repository-benchmarking 3.0.0-develop ( repository_benchmark "bench") torrust-tracker-udp-server 3.0.0-develop (lib) torrust-tracker-udp-server 3.0.0-develop (lib) torrust-tracker-udp-server 3.0.0-develop ( integration "test") torrust-tracker-udp-tracker-core 3.0.0-develop (lib) torrust-tracker-udp-tracker-core 3.0.0-develop (lib) torrust-tracker-udp-tracker-core 3.0.0-develop ( udp_tracker_core_benchmark "bench") torrust-tracker-udp-tracker-protocol 3.0.0-develop (lib) torrust-tracker-udp-tracker-protocol 3.0.0-develop (lib) workspace-coupling 3.0.0-develop ( workspace-coupling "bin") workspace-coupling 3.0.0-develop ( workspace-coupling "bin") |
+
| Profile: | release | +
| Fresh units: | 0 | +
| Dirty units: | 850 | +
| Total units: | 850 | +
| Max concurrency: | 34 (jobs=32 ncpu=32) | +
| Build start: | 2026-05-28T07:37:52.897305827Z | +
| Total time: | 187.8s (3m 7.8s) | +
| rustc: | rustc 1.97.0-nightly (b954122bb 2026-05-20) Host: x86_64-unknown-linux-gnu Target: x86_64-unknown-linux-gnu |
+
| + | + + | +|
| + + | + | |
| + | + | + |
| + | Unit | +Total | +Frontend | +Codegen | +Features | +
|---|---|---|---|---|---|
| 1. | +torrust-tracker v3.0.0-develop integration "test" (test) | +117.3s | ++ | + | + |
| 2. | +torrust-tracker v3.0.0-develop torrust-tracker "bin" | +117.0s | ++ | + | + |
| 3. | +torrust-tracker v3.0.0-develop profiling "bin" | +115.6s | ++ | + | + |
| 4. | +torrust-tracker v3.0.0-develop torrust_tracker_lib "lib" (test) | +109.4s | ++ | + | + |
| 5. | +torrust-tracker-axum-health-check-api-server v3.0.0-develop integration "test" (test) | +109.0s | ++ | + | + |
| 6. | +torrust-tracker-core v3.0.0-develop persistence_benchmark_runner "bin" | +104.3s | ++ | + | db-compatibility-tests, default | +
| 7. | +torrust-tracker-core v3.0.0-develop torrust_tracker_core "lib" (test) | +102.7s | ++ | + | db-compatibility-tests, default | +
| 8. | +torrust-tracker-axum-http-server v3.0.0-develop integration "test" (test) | +94.1s | ++ | + | + |
| 9. | +torrust-tracker-axum-rest-api-server v3.0.0-develop integration "test" (test) | +92.9s | ++ | + | + |
| 10. | +torrust-tracker-axum-rest-api-server v3.0.0-develop torrust_tracker_axum_rest_api_server "lib" (test) | +91.7s | ++ | + | + |
| 11. | +torrust-tracker-axum-http-server v3.0.0-develop torrust_tracker_axum_http_server "lib" (test) | +88.9s | ++ | + | + |
| 12. | +torrust-tracker-udp-server v3.0.0-develop torrust_tracker_udp_server "lib" (test) | +78.4s | ++ | + | + |
| 13. | +torrust-tracker-udp-server v3.0.0-develop integration "test" (test) | +70.9s | ++ | + | + |
| 14. | +torrust-tracker v3.0.0-develop qbittorrent_e2e_runner "bin" | +59.8s | ++ | + | + |
| 15. | +torrust-tracker-rest-api-core v3.0.0-develop torrust_tracker_rest_api_core "lib" (test) | +56.0s | ++ | + | + |
| 16. | +torrust-tracker-http-tracker-core v3.0.0-develop torrust_tracker_http_tracker_core "lib" (test) | +52.1s | ++ | + | + |
| 17. | +torrust-tracker-client v3.0.0-develop tracker_client "bin" | +51.5s | ++ | + | + |
| 18. | +torrust-tracker-core v3.0.0-develop integration "test" (test) | +50.0s | ++ | + | db-compatibility-tests, default | +
| 19. | +torrust-tracker-http-tracker-core v3.0.0-develop http_tracker_core_benchmark "bench" (test) | +48.0s | ++ | + | + |
| 20. | +torrust-tracker-client v3.0.0-develop tracker_checker "bin" | +47.0s | ++ | + | + |
| 21. | +torrust-tracker-udp-tracker-core v3.0.0-develop udp_tracker_core_benchmark "bench" (test) | +46.1s | ++ | + | + |
| 22. | +libsqlite3-sys v0.30.1 build-script (run) | +45.9s | ++ | + | bundled, bundled_bindings, cc, pkg-config, unlock_notify, vcpkg | +
| 23. | +torrust-tracker-core v3.0.0-develop persistence_benchmark_runner "bin" (test) | +45.0s | ++ | + | db-compatibility-tests, default | +
| 24. | +torrust-tracker v3.0.0-develop e2e_tests_runner "bin" | +43.6s | ++ | + | + |
| 25. | +torrust-tracker-client v3.0.0-develop http_tracker_client "bin" | +40.9s | ++ | + | + |
| 26. | +torrust-tracker-torrent-repository-benchmarking v3.0.0-develop repository_benchmark "bench" (test) | +38.7s | ++ | + | + |
| 27. | +torrust-tracker v3.0.0-develop qbittorrent_e2e_runner "bin" (test) | +35.0s | ++ | + | + |
| 28. | +torrust-tracker v3.0.0-develop profiling "bin" (test) | +35.0s | ++ | + | + |
| 29. | +torrust-tracker v3.0.0-develop e2e_tests_runner "bin" (test) | +34.6s | ++ | + | + |
| 30. | +torrust-tracker v3.0.0-develop http_health_check "bin" | +34.5s | ++ | + | + |
| 31. | +torrust-tracker v3.0.0-develop torrust-tracker "bin" (test) | +33.2s | ++ | + | + |
| 32. | +aws-lc-sys v0.41.0 build-script (run) | +32.9s | ++ | + | prebuilt-nasm | +
| 33. | +torrust-tracker-torrent-repository-benchmarking v3.0.0-develop integration "test" (test) | +30.2s | ++ | + | + |
| 34. | +zstd-sys v2.0.16+zstd.1.5.7 build-script (run) | +26.4s | ++ | + | std | +
| 35. | +torrust-tracker-udp-tracker-core v3.0.0-develop torrust_tracker_udp_tracker_core "lib" (test) | +24.8s | ++ | + | + |
| 36. | +torrust-tracker-contrib-bencode v3.0.0-develop bencode_benchmark "bench" (test) | +23.4s | ++ | + | + |
| 37. | +torrust-tracker-client-lib v3.0.0-develop torrust_tracker_client "lib" (test) | +20.6s | ++ | + | + |
| 38. | +torrust-tracker-configuration v3.0.0-develop torrust_tracker_configuration "lib" (test) | +19.8s | ++ | + | + |
| 39. | +torrust-tracker-udp-tracker-protocol v3.0.0-develop torrust_tracker_udp_tracker_protocol "lib" (test) | +18.3s | ++ | + | default | +
| 40. | +torrust-tracker-axum-health-check-api-server v3.0.0-develop torrust_tracker_axum_health_check_api_server "lib" (test) | +17.1s | ++ | + | + |
| 41. | +bittorrent-peer-id v3.0.0-develop bittorrent_peer_id "lib" (test) | +16.4s | ++ | + | default, quickcheck, serde, zerocopy | +
| 42. | +workspace-coupling v3.0.0-develop workspace-coupling "bin" | +16.3s | ++ | + | + |
| 43. | +torrust-tracker-swarm-coordination-registry v3.0.0-develop torrust_tracker_swarm_coordination_registry "lib" (test) | +16.2s | ++ | + | + |
| 44. | +torrust-metrics v3.0.0-develop torrust_metrics "lib" (test) | +16.2s | ++ | + | + |
| 45. | +torrust-tracker-client v3.0.0-develop udp_tracker_client "bin" | +15.6s | ++ | + | + |
| 46. | +torrust-tracker-client v3.0.0-develop torrust_tracker_console_client "lib" (test) | +14.6s | ++ | + | + |
| 47. | +torrust-tracker v3.0.0-develop http_health_check "bin" (test) | +12.6s | ++ | + | + |
| 48. | +torrust-tracker-axum-server v3.0.0-develop torrust_tracker_axum_server "lib" (test) | +12.4s | ++ | + | + |
| 49. | +torrust-tracker-http-tracker-protocol v3.0.0-develop torrust_tracker_http_tracker_protocol "lib" (test) | +11.2s | ++ | + | + |
| 50. | +torrust-tracker-client v3.0.0-develop tracker_client "bin" (test) | +10.8s | ++ | + | + |
| 51. | +torrust-tracker-client v3.0.0-develop udp_tracker_client "bin" (test) | +10.5s | ++ | + | + |
| 52. | +torrust-tracker-client v3.0.0-develop http_tracker_client "bin" (test) | +10.5s | ++ | + | + |
| 53. | +torrust-tracker-events v3.0.0-develop torrust_tracker_events "lib" (test) | +10.3s | ++ | + | + |
| 54. | +torrust-tracker-client v3.0.0-develop tracker_checker "bin" (test) | +10.2s | ++ | + | + |
| 55. | +torrust-tracker-torrent-repository-benchmarking v3.0.0-develop torrust_tracker_torrent_repository_benchmarking "lib" (test) | +10.2s | ++ | + | + |
| 56. | +ring v0.17.14 build-script (run) | +10.0s | ++ | + | alloc, default, dev_urandom_fallback | +
| 57. | +torrust-tracker-test-helpers v3.0.0-develop torrust_tracker_test_helpers "lib" (test) | +9.8s | ++ | + | + |
| 58. | +torrust-tracker-primitives v3.0.0-develop torrust_tracker_primitives "lib" (test) | +9.2s | ++ | + | + |
| 59. | +torrust-net-primitives v3.0.0-develop torrust_net_primitives "lib" (test) | +8.4s | ++ | + | + |
| 60. | +torrust-tracker v3.0.0-develop | +8.3s | +3.1s (38%) | +5.1s (62%) | ++ |
| 61. | +torrust-tracker-rest-api-client v3.0.0-develop torrust_tracker_rest_api_client "lib" (test) | +8.2s | ++ | + | + |
| 62. | +workspace-coupling v3.0.0-develop workspace-coupling "bin" (test) | +8.1s | ++ | + | + |
| 63. | +torrust-clock v3.0.0-develop torrust_clock "lib" (test) | +7.8s | ++ | + | + |
| 64. | +torrust-tracker-axum-rest-api-server v3.0.0-develop | +7.7s | +1.9s (25%) | +5.8s (75%) | ++ |
| 65. | +torrust-tracker-contrib-bencode v3.0.0-develop torrust_tracker_contrib_bencode "lib" (test) | +7.6s | ++ | + | + |
| 66. | +tokio v1.52.3 | +7.6s | +4.4s (59%) | +3.1s (41%) | +bytes, default, fs, io-util, libc, macros, mio, net, process, rt, rt-multi-thread, signal, signal-hook-registry, socket2, sync, time, tokio-macros | +
| 67. | +torrust-located-error v3.0.0-develop torrust_located_error "lib" (test) | +7.5s | ++ | + | + |
| 68. | +bollard-stubs v1.52.1-rc.29.1.3 | +7.5s | +7.2s (97%) | +0.2s (3%) | +base64, bollard-buildkit-proto, buildkit, bytes, prost, time | +
| 69. | +sqlx-postgres v0.8.6 | +7.4s | +3.8s (52%) | +3.6s (48%) | +any, json, migrate | +
| 70. | +torrust-tracker-contrib-bencode v3.0.0-develop mod "test" (test) | +7.2s | ++ | + | + |
| 71. | +torrust-clock v3.0.0-develop integration "test" (test) | +7.2s | ++ | + | + |
| 72. | +criterion v0.5.1 | +7.1s | +2.4s (34%) | +4.7s (66%) | +async, async_tokio, cargo_bench_support, default, futures, plotters, rayon, tokio | +
| 73. | +criterion v0.8.2 | +6.5s | +2.5s (38%) | +4.0s (62%) | +async, async_tokio, cargo_bench_support, default, plotters, rayon | +
| 74. | +h2 v0.4.14 | +6.0s | +4.2s (69%) | +1.9s (31%) | ++ |
| 75. | +torrust-tracker-client v3.0.0-develop tracker_checker "test" (test) | +6.0s | ++ | + | + |
| 76. | +regex-automata v0.4.14 | +5.9s | +2.3s (38%) | +3.7s (62%) | +alloc, dfa-onepass, hybrid, meta, nfa-backtrack, nfa-pikevm, nfa-thompson, perf-inline, perf-literal, perf-literal-multisubstring, perf-literal-substring, std, syntax, unicode, unicode-age, unicode-bool, unicode-case, unicode-gencat, unicode-perl, unicode-script, unicode-segment, unicode-word-boundary | +
| 77. | +libsqlite3-sys v0.30.1 build-script (run) | +5.7s | ++ | + | bundled, bundled_bindings, cc, pkg-config, unlock_notify, vcpkg | +
| 78. | +torrust-tracker-configuration v3.0.0-develop | +5.7s | +1.0s (18%) | +4.7s (82%) | ++ |
| 79. | +clap_builder v4.6.0 | +5.6s | +2.0s (35%) | +3.6s (65%) | +color, env, error-context, help, std, suggestions, usage | +
| 80. | +sqlx-postgres v0.8.6 | +5.4s | +3.7s (68%) | +1.8s (32%) | +json, migrate, offline | +
| 81. | +sqlx-mysql v0.8.6 | +5.2s | +2.1s (41%) | +3.1s (59%) | +any, json, migrate, serde | +
| 82. | +toml_edit v0.22.27 | +5.1s | +1.6s (32%) | +3.5s (68%) | +display, parse, serde | +
| 83. | +torrust-tracker-client v3.0.0-develop tracker_client "test" (test) | +5.0s | ++ | + | + |
| 84. | +torrust-server-lib v3.0.0-develop torrust_server_lib "lib" (test) | +4.7s | ++ | + | + |
| 85. | +sqlx-core v0.8.6 | +4.6s | +2.3s (51%) | +2.2s (49%) | +_rt-tokio, _tls-native-tls, any, crc, default, json, migrate, native-tls, offline, serde, serde_json, sha2, tokio, tokio-stream | +
| 86. | +tokio v1.52.3 | +4.4s | +3.5s (80%) | +0.9s (20%) | +bytes, default, fs, io-util, libc, mio, net, rt, socket2, sync, time | +
| 87. | +syn v2.0.117 | +4.3s | +3.0s (70%) | +1.3s (30%) | +clone-impls, default, derive, extra-traits, fold, full, parsing, printing, proc-macro, visit, visit-mut | +
| 88. | +bollard v0.20.2 | +4.2s | +2.2s (52%) | +2.0s (48%) | +bollard-buildkit-proto, buildkit_providerless, default, home, http, hyper-named-pipe, hyper-rustls, hyper-util, hyperlocal, num, pipe, rand, rustls, rustls-native-certs, rustls-pki-types, ssl, ssl_providerless, time, tokio-stream, tonic, tower-service | +
| 89. | +axum v0.8.9 | +4.1s | +3.8s (91%) | +0.4s (9%) | +default, form, http1, json, macros, matched-path, original-uri, query, tokio, tower-log, tracing | +
| 90. | +openssl v0.10.80 | +3.8s | +2.6s (69%) | +1.2s (31%) | +default | +
| 91. | +torrust-tracker-core v3.0.0-develop | +3.7s | +2.1s (58%) | +1.6s (42%) | +db-compatibility-tests, default | +
| 92. | +brotli v8.0.2 | +3.7s | +3.1s (85%) | +0.6s (15%) | +alloc-stdlib, default, std | +
| 93. | +zerocopy v0.8.48 | +3.7s | +3.5s (96%) | +0.2s (4%) | +derive, simd, zerocopy-derive | +
| 94. | +neli v0.7.4 | +3.6s | +2.1s (58%) | +1.5s (42%) | +default, parking_lot, sync | +
| 95. | +openmetrics-parser v0.4.4 | +3.6s | +0.9s (25%) | +2.7s (75%) | ++ |
| 96. | +regex-syntax v0.8.10 | +3.5s | +1.4s (39%) | +2.1s (61%) | +default, std, unicode, unicode-age, unicode-bool, unicode-case, unicode-gencat, unicode-perl, unicode-script, unicode-segment | +
| 97. | +object v0.37.3 | +3.4s | +3.1s (91%) | +0.3s (9%) | +archive, coff, elf, macho, pe, read_core, unaligned, xcoff | +
| 98. | +zerocopy v0.8.48 | +3.2s | +3.1s (96%) | +0.1s (4%) | +simd | +
| 99. | +testcontainers v0.27.3 | +3.1s | +1.9s (60%) | +1.3s (40%) | +default, ring | +
| 100. | +torrust-tracker-udp-server v3.0.0-develop | +3.1s | +1.3s (41%) | +1.8s (59%) | ++ |
| 101. | +openssl v0.10.80 | +3.1s | +2.5s (81%) | +0.6s (19%) | +default | +
| 102. | +sqlx-sqlite v0.8.6 | +3.1s | +1.8s (58%) | +1.3s (42%) | +bundled, json, migrate, offline, serde | +
| 103. | +tonic v0.14.6 | +3.1s | +1.9s (61%) | +1.2s (39%) | +channel, codegen, default, router, server, transport | +
| 104. | +sqlx-mysql v0.8.6 | +3.0s | +1.9s (61%) | +1.2s (39%) | +json, migrate, offline, serde | +
| 105. | +regex-automata v0.4.14 | +2.8s | +1.9s (68%) | +0.9s (32%) | +alloc, dfa-onepass, hybrid, meta, nfa-backtrack, nfa-pikevm, nfa-thompson, perf-inline, perf-literal, perf-literal-multisubstring, perf-literal-substring, std, syntax, unicode, unicode-age, unicode-bool, unicode-case, unicode-gencat, unicode-perl, unicode-script, unicode-segment, unicode-word-boundary | +
| 106. | +rstest_macros v0.25.0 | +2.8s | ++ | + | async-timeout, crate-name | +
| 107. | +serde_derive v1.0.228 | +2.8s | ++ | + | default | +
| 108. | +figment v0.10.19 | +2.7s | +0.9s (32%) | +1.9s (68%) | +env, parking_lot, parse-value, pear, tempfile, test, toml | +
| 109. | +aho-corasick v1.1.4 | +2.7s | +0.9s (34%) | +1.8s (66%) | +perf-literal, std | +
| 110. | +rustls v0.23.40 | +2.7s | +2.0s (72%) | +0.8s (28%) | +aws-lc-rs, aws_lc_rs, log, logging, ring, std, tls12 | +
| 111. | +rstest_macros v0.26.1 | +2.7s | ++ | + | async-timeout, crate-name | +
| 112. | +sqlx-core v0.8.6 | +2.7s | +2.1s (76%) | +0.6s (24%) | +_rt-tokio, _tls-native-tls, any, crc, default, json, migrate, native-tls, offline, serde, serde_json, sha2, tokio, tokio-stream | +
| 113. | +futures-util v0.3.32 | +2.6s | +2.5s (95%) | +0.1s (5%) | +alloc, async-await, async-await-macro, channel, default, futures-channel, futures-io, futures-macro, futures-sink, io, memchr, sink, slab, std | +
| 114. | +ring v0.17.14 | +2.6s | +1.4s (56%) | +1.1s (44%) | +alloc, default, dev_urandom_fallback | +
| 115. | +gimli v0.32.3 | +2.5s | +2.2s (85%) | +0.4s (15%) | +read, read-core | +
| 116. | +mockall_derive v0.14.0 | +2.5s | ++ | + | + |
| 117. | +time v0.3.47 | +2.5s | +1.7s (66%) | +0.8s (34%) | +alloc, default, formatting, parsing, serde, serde-well-known, std | +
| 118. | +torrust-tracker-axum-http-server v3.0.0-develop | +2.5s | +0.9s (36%) | +1.6s (64%) | ++ |
| 119. | +hyper v1.9.0 | +2.5s | +1.5s (60%) | +1.0s (40%) | +client, default, http1, http2, server | +
| 120. | +futures-util v0.3.32 | +2.4s | +2.4s (96%) | +0.1s (4%) | +alloc, futures-io, futures-sink, io, memchr, sink, slab, std | +
| 121. | +rustix v1.1.4 | +2.4s | +1.8s (76%) | +0.6s (24%) | +alloc, default, fs, std, termios | +
| 122. | +backtrace v0.3.76 | +2.4s | +0.5s (23%) | +1.8s (77%) | +default, std | +
| 123. | +toml v0.9.12+spec-1.1.0 | +2.3s | +1.0s (45%) | +1.2s (55%) | +default, display, parse, serde, std | +
| 124. | +torrust-tracker-swarm-coordination-registry v3.0.0-develop | +2.3s | +0.8s (35%) | +1.5s (65%) | ++ |
| 125. | +darling_core v0.23.0 | +2.3s | +1.3s (56%) | +1.0s (44%) | +strsim, suggestions | +
| 126. | +tracing-subscriber v0.3.23 | +2.3s | +1.1s (46%) | +1.2s (54%) | +alloc, ansi, default, fmt, json, nu-ansi-term, registry, serde, serde_json, sharded-slab, smallvec, std, thread_local, tracing-log, tracing-serde | +
| 127. | +regex-syntax v0.8.10 | +2.2s | +1.5s (69%) | +0.7s (31%) | +default, std, unicode, unicode-age, unicode-bool, unicode-case, unicode-gencat, unicode-perl, unicode-script, unicode-segment | +
| 128. | +toml v1.1.2+spec-1.1.0 | +2.2s | +0.9s (42%) | +1.3s (58%) | +default, display, parse, serde, std | +
| 129. | +num-bigint-dig v0.8.6 | +2.2s | +1.0s (47%) | +1.2s (53%) | +i128, prime, rand, u64_digit, zeroize | +
| 130. | +darling_core v0.20.11 | +2.2s | +1.2s (57%) | +0.9s (43%) | +strsim, suggestions | +
| 131. | +chrono v0.4.44 | +2.2s | +1.1s (50%) | +1.1s (50%) | +alloc, clock, iana-time-zone, now, std, winapi, windows-link | +
| 132. | +encoding_rs v0.8.35 | +2.1s | +1.0s (46%) | +1.1s (54%) | +alloc, default | +
| 133. | +miette v7.6.0 | +2.1s | +0.7s (35%) | +1.3s (65%) | +default, derive, fancy, fancy-base, fancy-no-backtrace | +
| 134. | +hyper-util v0.1.20 | +2.0s | +1.6s (77%) | +0.5s (23%) | +client, client-legacy, client-proxy, client-proxy-system, default, http1, http2, server, server-auto, service, tokio | +
| 135. | +rayon v1.12.0 | +2.0s | +1.9s (93%) | +0.1s (7%) | ++ |
| 136. | +num-bigint v0.4.6 | +1.9s | +1.2s (63%) | +0.7s (37%) | +std | +
| 137. | +serde_json v1.0.150 | +1.9s | +0.9s (49%) | +1.0s (51%) | +alloc, default, indexmap, preserve_order, raw_value, std | +
| 138. | +torrust-tracker-client v3.0.0-develop | +1.9s | +1.1s (55%) | +0.9s (45%) | ++ |
| 139. | +serde_core v1.0.228 | +1.9s | +1.8s (94%) | +0.1s (6%) | +alloc, default, rc, result, std | +
| 140. | +serde_core v1.0.228 | +1.9s | +1.8s (94%) | +0.1s (6%) | +alloc, rc, result, std | +
| 141. | +brotli-decompressor v5.0.0 | +1.9s | +0.7s (40%) | +1.1s (60%) | +alloc-stdlib, std | +
| 142. | +reqwest v0.13.4 | +1.9s | +0.9s (48%) | +1.0s (52%) | +__rustls, __rustls-aws-lc-rs, __tls, charset, default, default-tls, http2, json, multipart, query, rustls, system-proxy | +
| 143. | +bollard-buildkit-proto v0.7.0 | +1.8s | +1.7s (91%) | +0.2s (9%) | +default, fetch, ureq | +
| 144. | +winnow v0.7.15 | +1.8s | +1.6s (87%) | +0.2s (13%) | +alloc, default, std | +
| 145. | +serde_with v3.20.0 | +1.8s | +1.7s (95%) | +0.1s (5%) | +alloc, default, json, macros, std | +
| 146. | +derive_more-impl v2.1.1 | +1.8s | ++ | + | as_ref, constructor, default, display, from | +
| 147. | +sqlx-sqlite v0.8.6 | +1.8s | +1.1s (63%) | +0.7s (37%) | +any, bundled, json, migrate, serde | +
| 148. | +torrust-tracker-test-helpers v3.0.0-develop | +1.7s | +0.3s (20%) | +1.4s (80%) | ++ |
| 149. | +torrust-tracker-torrent-repository-benchmarking v3.0.0-develop | +1.6s | +0.6s (36%) | +1.1s (64%) | ++ |
| 150. | +der v0.7.10 | +1.6s | +1.0s (61%) | +0.6s (39%) | +alloc, oid, pem, std, zeroize | +
| 151. | +axum-core v0.5.6 | +1.6s | +1.3s (79%) | +0.3s (21%) | +tracing | +
| 152. | +sqlx-macros-core v0.8.6 | +1.6s | +1.1s (67%) | +0.5s (33%) | +_rt-tokio, _sqlite, _tls-native-tls, default, derive, json, macros, migrate, mysql, postgres, sqlite, sqlx-mysql, sqlx-postgres, sqlx-sqlite, tokio | +
| 153. | +quickcheck v1.1.0 | +1.5s | +0.5s (34%) | +1.0s (66%) | +default, env_logger, log, regex, use_logging | +
| 154. | +clap_derive v4.6.1 | +1.5s | ++ | + | default | +
| 155. | +prost-types v0.14.3 | +1.5s | +1.0s (66%) | +0.5s (34%) | +default, std | +
| 156. | +torrust-metrics v3.0.0-develop | +1.5s | +0.6s (38%) | +0.9s (62%) | ++ |
| 157. | +icu_locale_core v2.2.0 | +1.5s | +0.8s (58%) | +0.6s (42%) | +zerovec | +
| 158. | +itertools v0.14.0 | +1.4s | +1.4s (93%) | +0.1s (7%) | +default, use_alloc, use_std | +
| 159. | +itertools v0.13.0 | +1.4s | +1.3s (91%) | +0.1s (9%) | +default, use_alloc, use_std | +
| 160. | +toml v0.8.23 | +1.4s | +0.5s (33%) | +1.0s (67%) | +default, display, parse | +
| 161. | +aho-corasick v1.1.4 | +1.4s | +0.7s (53%) | +0.7s (47%) | +perf-literal, std | +
| 162. | +rsa v0.9.10 | +1.4s | +0.5s (36%) | +0.9s (64%) | +default, pem, std, u64_digit | +
| 163. | +local-ip-address v0.6.13 | +1.3s | +0.2s (16%) | +1.1s (84%) | ++ |
| 164. | +pest v2.8.6 | +1.3s | +1.1s (82%) | +0.2s (18%) | +default, memchr, std | +
| 165. | +prost-derive v0.14.3 | +1.3s | ++ | + | + |
| 166. | +deranged v0.5.8 | +1.3s | +1.3s (96%) | +0.1s (4%) | +default, powerfmt, serde | +
| 167. | +axum-macros v0.5.1 | +1.3s | ++ | + | default | +
| 168. | +url v2.5.8 | +1.3s | +0.5s (41%) | +0.8s (59%) | +default, serde, std | +
| 169. | +zerocopy-derive v0.8.48 | +1.3s | ++ | + | + |
| 170. | +torrust-tracker-http-tracker-protocol v3.0.0-develop | +1.3s | +0.4s (30%) | +0.9s (70%) | ++ |
| 171. | +pest_meta v2.8.6 | +1.3s | +0.6s (48%) | +0.7s (52%) | +default | +
| 172. | +cc v1.2.62 | +1.2s | +0.7s (58%) | +0.5s (42%) | +parallel | +
| 173. | +der v0.7.10 | +1.2s | +0.9s (77%) | +0.3s (23%) | +alloc, oid, pem, std, zeroize | +
| 174. | +plotters v0.3.7 | +1.2s | +1.0s (88%) | +0.1s (12%) | +area_series, line_series, plotters-svg, svg_backend | +
| 175. | +itertools v0.14.0 | +1.2s | +1.1s (95%) | +0.1s (5%) | +default, use_alloc, use_std | +
| 176. | +stringprep v0.1.5 | +1.2s | +0.2s (17%) | +1.0s (83%) | ++ |
| 177. | +http v1.4.1 | +1.2s | +0.7s (59%) | +0.5s (41%) | +default, std | +
| 178. | +itertools v0.10.5 | +1.2s | +1.1s (92%) | +0.1s (8%) | +default, use_alloc, use_std | +
| 179. | +pest v2.8.6 | +1.1s | +1.0s (90%) | +0.1s (10%) | +default, memchr, std | +
| 180. | +tower v0.5.3 | +1.1s | +1.0s (87%) | +0.1s (13%) | +balance, buffer, discover, futures-core, futures-util, indexmap, limit, load, load-shed, log, make, pin-project-lite, ready-cache, retry, slab, sync_wrapper, timeout, tokio, tokio-util, tracing, util | +
| 181. | +ureq-proto v0.6.0 | +1.1s | +0.4s (32%) | +0.8s (68%) | +client | +
| 182. | +parse-display-derive v0.9.1 | +1.1s | ++ | + | + |
| 183. | +sha2 v0.11.0 | +1.1s | +0.8s (71%) | +0.3s (29%) | +alloc, default, oid | +
| 184. | +icu_properties v2.2.0 | +1.1s | +0.9s (80%) | +0.2s (20%) | +compiled_data | +
| 185. | +winnow v1.0.3 | +1.1s | +1.0s (90%) | +0.1s (10%) | +alloc, ascii, binary, default, parser, std | +
| 186. | +serde_json v1.0.150 | +1.1s | +0.8s (77%) | +0.3s (23%) | +default, raw_value, std | +
| 187. | +sqlx-macros v0.8.6 | +1.1s | ++ | + | _rt-tokio, _tls-native-tls, default, derive, json, macros, migrate, mysql, postgres, sqlite | +
| 188. | +icu_properties v2.2.0 | +1.0s | +0.8s (82%) | +0.2s (18%) | +compiled_data | +
| 189. | +thiserror-impl v2.0.18 | +1.0s | ++ | + | + |
| 190. | +derive_more-impl v1.0.0 | +1.0s | ++ | + | default, display | +
| 191. | +num-bigint-dig v0.8.6 | +1.0s | +0.8s (75%) | +0.3s (25%) | +i128, prime, rand, u64_digit, zeroize | +
| 192. | +tracing-attributes v0.1.31 | +1.0s | ++ | + | + |
| 193. | +astral-tokio-tar v0.6.2 | +1.0s | +0.7s (69%) | +0.3s (31%) | +default, xattr | +
| 194. | +libm v0.2.16 | +1.0s | +0.6s (63%) | +0.4s (37%) | +arch, default | +
| 195. | +thiserror-impl v1.0.69 | +1.0s | ++ | + | + |
| 196. | +ureq v3.3.0 | +1.0s | +0.6s (60%) | +0.4s (40%) | +_rustls, _tls, rustls-no-provider | +
| 197. | +idna v1.1.0 | +1.0s | +0.3s (30%) | +0.7s (70%) | +alloc, compiled_data, std | +
| 198. | +icu_locale_core v2.2.0 | +0.9s | +0.7s (74%) | +0.2s (26%) | +zerovec | +
| 199. | +miette-derive v7.6.0 | +0.9s | ++ | + | + |
| 200. | +textwrap v0.16.2 | +0.9s | +0.3s (33%) | +0.6s (67%) | +unicode-linebreak, unicode-width | +
| 201. | +libm v0.2.16 | +0.9s | +0.7s (79%) | +0.2s (21%) | +arch, default | +
| 202. | +zerofrom-derive v0.1.7 | +0.9s | ++ | + | + |
| 203. | +typenum v1.20.0 | +0.9s | +0.9s (96%) | +0.0s (4%) | +const-generics | +
| 204. | +zerovec-derive v0.11.3 | +0.9s | ++ | + | + |
| 205. | +toml_edit v0.25.11+spec-1.1.0 | +0.9s | +0.5s (60%) | +0.4s (40%) | +parse | +
| 206. | +torrust-tracker-axum-health-check-api-server v3.0.0-develop | +0.9s | +0.4s (49%) | +0.5s (51%) | ++ |
| 207. | +crypto-common v0.2.2 | +0.9s | +0.5s (56%) | +0.4s (44%) | ++ |
| 208. | +docker_credential v1.4.0 | +0.9s | +0.2s (25%) | +0.7s (75%) | ++ |
| 209. | +rayon-core v1.13.0 | +0.8s | +0.4s (51%) | +0.4s (49%) | ++ |
| 210. | +pear v0.2.9 | +0.8s | +0.5s (61%) | +0.3s (39%) | +color, default, yansi | +
| 211. | +pin-project-internal v1.1.13 | +0.8s | ++ | + | + |
| 212. | +yoke-derive v0.8.2 | +0.8s | ++ | + | + |
| 213. | +toml_parser v1.1.2+spec-1.1.0 | +0.8s | +0.3s (40%) | +0.5s (60%) | +alloc, std | +
| 214. | +serde_with_macros v3.20.0 | +0.8s | ++ | + | + |
| 215. | +structmeta-derive v0.3.0 | +0.8s | ++ | + | + |
| 216. | +num-traits v0.2.19 | +0.8s | +0.7s (84%) | +0.1s (16%) | +default, i128, libm, std | +
| 217. | +miniz_oxide v0.8.9 | +0.8s | +0.4s (49%) | +0.4s (51%) | +simd, simd-adler32, with-alloc | +
| 218. | +unicode-bidi v0.3.18 | +0.8s | +0.4s (46%) | +0.4s (54%) | +default, hardcoded-data, std | +
| 219. | +num-rational v0.4.2 | +0.8s | +0.3s (35%) | +0.5s (65%) | +num-bigint, num-bigint-std, std | +
| 220. | +neli-proc-macros v0.2.2 | +0.8s | ++ | + | + |
| 221. | +owo-colors v4.3.0 | +0.8s | +0.6s (83%) | +0.1s (17%) | ++ |
| 222. | +derive_builder_core v0.20.2 | +0.8s | +0.5s (59%) | +0.3s (41%) | +lib_has_std | +
| 223. | +pkcs1 v0.7.5 | +0.8s | +0.2s (29%) | +0.5s (71%) | +alloc, pem, pkcs8, std, zeroize | +
| 224. | +async-trait v0.1.89 | +0.7s | ++ | + | + |
| 225. | +regex v1.12.3 | +0.7s | +0.4s (55%) | +0.3s (45%) | +default, perf, perf-backtrack, perf-cache, perf-dfa, perf-inline, perf-literal, perf-onepass, std, unicode, unicode-age, unicode-bool, unicode-case, unicode-gencat, unicode-perl, unicode-script, unicode-segment | +
| 226. | +sha2 v0.10.9 | +0.7s | +0.3s (39%) | +0.4s (61%) | ++ |
| 227. | +tokio-util v0.7.18 | +0.7s | +0.4s (62%) | +0.3s (38%) | +codec, default, io | +
| 228. | +aws-lc-sys v0.41.0 build-script | +0.7s | ++ | + | prebuilt-nasm | +
| 229. | +pest_generator v2.8.6 | +0.7s | +0.5s (64%) | +0.2s (36%) | +std | +
| 230. | +compact_str v0.9.0 | +0.7s | +0.4s (55%) | +0.3s (45%) | +default, std | +
| 231. | +rand v0.8.6 | +0.7s | +0.6s (87%) | +0.1s (13%) | +alloc, getrandom, libc, rand_chacha, std, std_rng | +
| 232. | +hashbrown v0.15.5 | +0.7s | +0.6s (93%) | +0.1s (7%) | +allocator-api2, default, default-hasher, equivalent, inline-more, raw-entry | +
| 233. | +ciborium v0.2.2 | +0.7s | +0.5s (74%) | +0.2s (26%) | +default, std | +
| 234. | +num-traits v0.2.19 | +0.7s | +0.6s (93%) | +0.1s (7%) | +i128, libm, std | +
| 235. | +typenum v1.20.0 | +0.7s | +0.6s (93%) | +0.1s (7%) | ++ |
| 236. | +ferroid v2.0.0 | +0.7s | +0.2s (30%) | +0.5s (70%) | +base32, default, std, ulid | +
| 237. | +torrust-tracker-client-lib v3.0.0-develop | +0.7s | +0.5s (70%) | +0.2s (30%) | ++ |
| 238. | +indexmap v2.14.0 | +0.7s | +0.6s (95%) | +0.0s (5%) | +default, std | +
| 239. | +icu_normalizer v2.2.0 | +0.7s | +0.3s (51%) | +0.3s (49%) | +compiled_data | +
| 240. | +tinytemplate v1.2.1 | +0.7s | +0.2s (35%) | +0.4s (65%) | ++ |
| 241. | +rustc-demangle v0.1.27 | +0.6s | +0.3s (42%) | +0.4s (58%) | ++ |
| 242. | +rand v0.10.1 | +0.6s | +0.5s (77%) | +0.2s (23%) | +alloc, default, std, std_rng, sys_rng, thread_rng | +
| 243. | +tower-http v0.6.11 | +0.6s | +0.5s (83%) | +0.1s (17%) | +compression-br, compression-deflate, compression-full, compression-gzip, compression-zstd, cors, default, follow-redirect, futures-core, futures-util, propagate-header, request-id, tokio-util, tower, trace, tracing, uuid | +
| 244. | +hashbrown v0.14.5 | +0.6s | +0.6s (94%) | +0.0s (6%) | +raw | +
| 245. | +url v2.5.8 | +0.6s | +0.4s (70%) | +0.2s (30%) | +default, std | +
| 246. | +toml_parser v1.1.2+spec-1.1.0 | +0.6s | +0.4s (60%) | +0.2s (40%) | +alloc, default, std | +
| 247. | +torrust-tracker-contrib-bencode v3.0.0-develop | +0.6s | +0.2s (37%) | +0.4s (63%) | ++ |
| 248. | +criterion-plot v0.8.2 | +0.6s | +0.3s (51%) | +0.3s (49%) | ++ |
| 249. | +aws-lc-rs v1.17.0 | +0.6s | +0.5s (83%) | +0.1s (17%) | +aws-lc-sys, prebuilt-nasm | +
| 250. | +rand v0.8.6 | +0.6s | +0.6s (89%) | +0.1s (11%) | +alloc, getrandom, libc, rand_chacha, small_rng, std, std_rng | +
| 251. | +futures-macro v0.3.32 | +0.6s | ++ | + | + |
| 252. | +zerovec v0.11.6 | +0.6s | +0.6s (94%) | +0.0s (6%) | +derive, yoke | +
| 253. | +torrust-tracker-udp-tracker-core v3.0.0-develop | +0.6s | +0.3s (57%) | +0.3s (43%) | ++ |
| 254. | +libc v0.2.186 | +0.6s | +0.6s (92%) | +0.0s (8%) | +default, std | +
| 255. | +libc v0.2.186 | +0.6s | +0.6s (93%) | +0.0s (7%) | +default, std | +
| 256. | +hashbrown v0.15.5 | +0.6s | +0.6s (95%) | +0.0s (5%) | +allocator-api2, default, default-hasher, equivalent, inline-more, raw-entry | +
| 257. | +rand v0.9.4 | +0.6s | +0.5s (84%) | +0.1s (16%) | +alloc, default, os_rng, small_rng, std, std_rng, thread_rng | +
| 258. | +criterion-plot v0.5.0 | +0.6s | +0.3s (49%) | +0.3s (51%) | ++ |
| 259. | +predicates v3.1.4 | +0.6s | +0.3s (56%) | +0.2s (44%) | ++ |
| 260. | +indexmap v2.14.0 | +0.6s | +0.5s (95%) | +0.0s (5%) | +default, std | +
| 261. | +tracing-core v0.1.36 | +0.6s | +0.4s (70%) | +0.2s (30%) | +once_cell, std | +
| 262. | +pear_codegen v0.2.9 | +0.6s | ++ | + | + |
| 263. | +zerovec v0.11.6 | +0.6s | +0.5s (89%) | +0.1s (11%) | +derive, yoke | +
| 264. | +ipnet v2.12.0 | +0.6s | +0.2s (35%) | +0.4s (65%) | +default, std | +
| 265. | +bytes v1.11.1 | +0.5s | +0.4s (81%) | +0.1s (19%) | +default, std | +
| 266. | +openssl-sys v0.9.116 | +0.5s | +0.5s (89%) | +0.1s (11%) | ++ |
| 267. | +tempfile v3.27.0 | +0.5s | +0.2s (43%) | +0.3s (57%) | +default, getrandom | +
| 268. | +dotenvy v0.15.7 | +0.5s | +0.2s (32%) | +0.4s (68%) | ++ |
| 269. | +portable-atomic v1.13.1 | +0.5s | +0.4s (81%) | +0.1s (19%) | +default, fallback | +
| 270. | +serde v1.0.228 | +0.5s | +0.5s (87%) | +0.1s (13%) | +alloc, default, derive, rc, serde_derive, std | +
| 271. | +rsa v0.9.10 | +0.5s | +0.4s (73%) | +0.1s (27%) | +default, pem, std, u64_digit | +
| 272. | +vcpkg v0.2.15 | +0.5s | +0.3s (52%) | +0.2s (48%) | ++ |
| 273. | +env_filter v1.0.1 | +0.5s | +0.2s (35%) | +0.3s (65%) | +regex | +
| 274. | +tracing-core v0.1.36 | +0.5s | +0.2s (39%) | +0.3s (61%) | +default, once_cell, std | +
| 275. | +bencode2json v0.1.0 | +0.5s | +0.2s (37%) | +0.3s (63%) | ++ |
| 276. | +sharded-slab v0.1.7 | +0.5s | +0.5s (92%) | +0.0s (8%) | ++ |
| 277. | +parking_lot v0.12.5 | +0.5s | +0.2s (36%) | +0.3s (64%) | +default | +
| 278. | +synstructure v0.13.2 | +0.5s | +0.3s (58%) | +0.2s (42%) | +default, proc-macro | +
| 279. | +crossbeam-utils v0.8.21 | +0.5s | +0.4s (78%) | +0.1s (22%) | +default, std | +
| 280. | +socket2 v0.6.3 | +0.5s | +0.3s (60%) | +0.2s (40%) | +all | +
| 281. | +openssl-sys v0.9.116 | +0.5s | +0.4s (88%) | +0.1s (12%) | ++ |
| 282. | +icu_collections v2.2.0 | +0.5s | +0.3s (63%) | +0.2s (37%) | ++ |
| 283. | +rustls-pki-types v1.14.1 | +0.5s | +0.2s (49%) | +0.2s (51%) | +alloc, default, std | +
| 284. | +torrust-tracker-http-tracker-core v3.0.0-develop | +0.5s | +0.3s (56%) | +0.2s (44%) | ++ |
| 285. | +compression-codecs v0.4.38 | +0.5s | +0.1s (31%) | +0.3s (69%) | +brotli, flate2, gzip, libzstd, memchr, zlib, zstd, zstd-safe | +
| 286. | +generic-array v0.14.7 | +0.5s | +0.5s (94%) | +0.0s (6%) | +more_lengths | +
| 287. | +generic-array v0.14.7 | +0.5s | +0.4s (94%) | +0.0s (6%) | +more_lengths | +
| 288. | +axum-client-ip v0.7.0 | +0.5s | +0.3s (55%) | +0.2s (45%) | ++ |
| 289. | +serde v1.0.228 | +0.5s | +0.4s (91%) | +0.0s (9%) | +alloc, default, derive, rc, serde_derive, std | +
| 290. | +idna v1.1.0 | +0.5s | +0.2s (49%) | +0.2s (51%) | +alloc, compiled_data, std | +
| 291. | +unicode-bidi v0.3.18 | +0.5s | +0.3s (70%) | +0.1s (30%) | +default, hardcoded-data, std | +
| 292. | +flate2 v1.1.9 | +0.5s | +0.4s (79%) | +0.1s (21%) | +any_impl, default, miniz_oxide, rust_backend | +
| 293. | +unicode-normalization v0.1.25 | +0.5s | +0.4s (78%) | +0.1s (22%) | +default, std | +
| 294. | +rand_chacha v0.3.1 | +0.5s | +0.2s (37%) | +0.3s (63%) | +std | +
| 295. | +mime_guess v2.0.5 | +0.5s | +0.2s (54%) | +0.2s (46%) | ++ |
| 296. | +mio v1.2.0 | +0.5s | +0.3s (59%) | +0.2s (41%) | +net, os-ext, os-poll | +
| 297. | +hashbrown v0.17.1 | +0.5s | +0.4s (89%) | +0.1s (11%) | ++ |
| 298. | +rustls-native-certs v0.8.3 | +0.5s | +0.1s (28%) | +0.3s (72%) | ++ |
| 299. | +prost v0.14.3 | +0.5s | +0.4s (83%) | +0.1s (17%) | +default, derive, std | +
| 300. | +tokio-macros v2.7.0 | +0.5s | ++ | + | + |
| 301. | +socket2 v0.6.3 | +0.5s | +0.3s (62%) | +0.2s (38%) | +all | +
| 302. | +getset v0.1.6 | +0.5s | ++ | + | + |
| 303. | +axum-extra v0.12.6 | +0.5s | +0.3s (69%) | +0.1s (31%) | +default, query, tracing | +
| 304. | +hashbrown v0.17.1 | +0.4s | +0.3s (77%) | +0.1s (23%) | ++ |
| 305. | +walkdir v2.5.0 | +0.4s | +0.2s (41%) | +0.3s (59%) | ++ |
| 306. | +tokio-stream v0.1.18 | +0.4s | +0.4s (89%) | +0.0s (11%) | +default, fs, net, time | +
| 307. | +num-complex v0.4.6 | +0.4s | +0.4s (84%) | +0.1s (16%) | +std | +
| 308. | +unicode-normalization v0.1.25 | +0.4s | +0.4s (91%) | +0.0s (9%) | +default, std | +
| 309. | +camino v1.1.12 | +0.4s | +0.3s (68%) | +0.1s (32%) | +serde, serde1 | +
| 310. | +env_logger v0.11.10 | +0.4s | +0.2s (43%) | +0.2s (57%) | +regex | +
| 311. | +pem-rfc7468 v0.7.0 | +0.4s | +0.2s (39%) | +0.3s (61%) | +alloc | +
| 312. | +bittorrent-peer-id v3.0.0-develop | +0.4s | +0.2s (45%) | +0.2s (55%) | +default, quickcheck, serde, zerocopy | +
| 313. | +fs-err v3.3.0 | +0.4s | +0.3s (72%) | +0.1s (28%) | +tokio | +
| 314. | +tokio-stream v0.1.18 | +0.4s | +0.4s (86%) | +0.1s (14%) | +default, fs, time | +
| 315. | +memchr v2.8.0 | +0.4s | +0.3s (67%) | +0.1s (33%) | +alloc, default, std | +
| 316. | +displaydoc v0.2.5 | +0.4s | ++ | + | + |
| 317. | +futures-intrusive v0.5.0 | +0.4s | +0.3s (83%) | +0.1s (17%) | +alloc, default, parking_lot, std | +
| 318. | +addr2line v0.25.1 | +0.4s | +0.3s (83%) | +0.1s (17%) | ++ |
| 319. | +dashmap v6.2.1 | +0.4s | +0.3s (71%) | +0.1s (29%) | ++ |
| 320. | +bytes v1.11.1 | +0.4s | +0.3s (64%) | +0.1s (36%) | +default, std | +
| 321. | +icu_normalizer v2.2.0 | +0.4s | +0.3s (74%) | +0.1s (26%) | +compiled_data | +
| 322. | +pkcs8 v0.10.2 | +0.4s | +0.1s (31%) | +0.3s (69%) | +alloc, pem, std | +
| 323. | +strsim v0.11.1 | +0.4s | +0.1s (29%) | +0.3s (71%) | ++ |
| 324. | +futures-timer v3.0.4 | +0.4s | +0.2s (41%) | +0.2s (59%) | ++ |
| 325. | +torrust-tracker-udp-tracker-protocol v3.0.0-develop | +0.4s | +0.3s (80%) | +0.1s (20%) | +default | +
| 326. | +allocator-api2 v0.2.21 | +0.4s | +0.4s (95%) | +0.0s (5%) | +alloc | +
| 327. | +icu_collections v2.2.0 | +0.4s | +0.3s (78%) | +0.1s (22%) | ++ |
| 328. | +hybrid-array v0.4.12 | +0.4s | +0.4s (95%) | +0.0s (5%) | ++ |
| 329. | +rand_chacha v0.9.0 | +0.4s | +0.1s (35%) | +0.3s (65%) | +std | +
| 330. | +pkcs1 v0.7.5 | +0.4s | +0.2s (57%) | +0.2s (42%) | +alloc, pem, pkcs8, std, zeroize | +
| 331. | +formatjson v0.3.1 | +0.4s | +0.2s (40%) | +0.2s (60%) | ++ |
| 332. | +axum-server v0.8.0 | +0.4s | +0.3s (68%) | +0.1s (32%) | +arc-swap, default, rustls, rustls-pki-types, tls-rustls-no-provider, tokio-rustls | +
| 333. | +ring v0.17.14 build-script | +0.4s | ++ | + | alloc, default, dev_urandom_fallback | +
| 334. | +parse-display v0.9.1 | +0.4s | +0.1s (32%) | +0.3s (68%) | +default, regex, regex-syntax, std | +
| 335. | +crossbeam-utils v0.8.21 | +0.4s | +0.3s (87%) | +0.1s (13%) | +std | +
| 336. | +openssl-sys v0.9.116 build-script | +0.4s | ++ | + | + |
| 337. | +anyhow v1.0.102 | +0.4s | +0.2s (54%) | +0.2s (46%) | +default, std | +
| 338. | +tinyvec v1.11.0 | +0.4s | +0.4s (92%) | +0.0s (8%) | +alloc, default, tinyvec_macros | +
| 339. | +matchit v0.8.4 | +0.4s | +0.2s (59%) | +0.2s (41%) | +default | +
| 340. | +num-integer v0.1.46 | +0.4s | +0.2s (64%) | +0.1s (36%) | +i128, std | +
| 341. | +regex v1.12.3 | +0.4s | +0.3s (77%) | +0.1s (23%) | +default, perf, perf-backtrack, perf-cache, perf-dfa, perf-inline, perf-literal, perf-onepass, std, unicode, unicode-age, unicode-bool, unicode-case, unicode-gencat, unicode-perl, unicode-script, unicode-segment | +
| 342. | +async-stream-impl v0.3.6 | +0.4s | ++ | + | + |
| 343. | +rustls-webpki v0.103.13 | +0.4s | +0.3s (67%) | +0.1s (33%) | +alloc, aws-lc-rs, ring, std | +
| 344. | +icu_provider v2.2.0 | +0.4s | +0.2s (58%) | +0.2s (42%) | +baked | +
| 345. | +futures-intrusive v0.5.0 | +0.4s | +0.3s (89%) | +0.0s (11%) | +alloc, default, parking_lot, std | +
| 346. | +mio v1.2.0 | +0.4s | +0.3s (71%) | +0.1s (29%) | +net, os-ext, os-poll | +
| 347. | +winnow v1.0.3 | +0.4s | +0.3s (82%) | +0.1s (18%) | ++ |
| 348. | +serde_path_to_error v0.1.20 | +0.4s | +0.3s (79%) | +0.1s (21%) | ++ |
| 349. | +sha2 v0.10.9 | +0.4s | +0.3s (74%) | +0.1s (26%) | +default, std | +
| 350. | +proc-macro-crate v3.5.0 | +0.4s | +0.2s (50%) | +0.2s (50%) | ++ |
| 351. | +proc-macro2 v1.0.106 | +0.4s | +0.2s (50%) | +0.2s (50%) | +default, proc-macro | +
| 352. | +serde_html_form v0.2.8 | +0.4s | +0.2s (68%) | +0.1s (32%) | +default, ryu | +
| 353. | +serde_bencode v0.2.4 | +0.4s | +0.2s (57%) | +0.2s (43%) | ++ |
| 354. | +fragile v2.1.0 | +0.4s | +0.2s (46%) | +0.2s (54%) | +default, future, futures-core, stream | +
| 355. | +memchr v2.8.0 | +0.4s | +0.2s (59%) | +0.1s (41%) | +alloc, default, std | +
| 356. | +torrust-tracker-primitives v3.0.0-develop | +0.4s | +0.2s (69%) | +0.1s (31%) | ++ |
| 357. | +xattr v1.6.1 | +0.4s | +0.1s (36%) | +0.2s (64%) | +default, unsupported | +
| 358. | +tdyne-peer-id-registry v0.1.1 | +0.4s | +0.2s (58%) | +0.1s (42%) | ++ |
| 359. | +rand_chacha v0.3.1 | +0.4s | +0.2s (47%) | +0.2s (53%) | +std | +
| 360. | +ppv-lite86 v0.2.21 | +0.3s | +0.3s (91%) | +0.0s (9%) | +simd, std | +
| 361. | +stringprep v0.1.5 | +0.3s | +0.2s (49%) | +0.2s (51%) | ++ |
| 362. | +chacha20 v0.10.0 | +0.3s | +0.2s (51%) | +0.2s (49%) | +rng | +
| 363. | +cmake v0.1.58 | +0.3s | +0.2s (60%) | +0.1s (40%) | ++ |
| 364. | +mime_guess v2.0.5 build-script | +0.3s | ++ | + | + |
| 365. | +anstream v1.0.0 | +0.3s | +0.2s (62%) | +0.1s (38%) | +auto, default, wincon | +
| 366. | +jobserver v0.1.34 | +0.3s | +0.2s (65%) | +0.1s (35%) | ++ |
| 367. | +half v2.7.1 | +0.3s | +0.3s (85%) | +0.1s (15%) | ++ |
| 368. | +ucd-trie v0.1.7 | +0.3s | +0.1s (42%) | +0.2s (58%) | +std | +
| 369. | +portable-atomic v1.13.1 build-script | +0.3s | ++ | + | default, fallback | +
| 370. | +serde_repr v0.1.20 | +0.3s | ++ | + | + |
| 371. | +uuid v1.23.1 | +0.3s | +0.2s (67%) | +0.1s (33%) | +default, rng, std, v4 | +
| 372. | +ppv-lite86 v0.2.21 | +0.3s | +0.3s (94%) | +0.0s (6%) | +simd, std | +
| 373. | +forwarded-header-value v0.1.1 | +0.3s | +0.1s (42%) | +0.2s (58%) | ++ |
| 374. | +toml_datetime v0.7.5+spec-1.1.0 | +0.3s | +0.2s (56%) | +0.1s (44%) | +alloc, serde, std | +
| 375. | +tdyne-peer-id-registry v0.1.1 build-script | +0.3s | ++ | + | + |
| 376. | +yansi v1.0.1 | +0.3s | +0.3s (81%) | +0.1s (19%) | +alloc, default, std | +
| 377. | +native-tls v0.2.18 | +0.3s | +0.2s (50%) | +0.2s (50%) | +default | +
| 378. | +linux-raw-sys v0.12.1 | +0.3s | +0.3s (81%) | +0.1s (19%) | +auxvec, elf, errno, general, ioctl, no_std | +
| 379. | +crossbeam-skiplist v0.1.3 | +0.3s | +0.3s (94%) | +0.0s (6%) | +alloc, default, std | +
| 380. | +zerotrie v0.2.4 | +0.3s | +0.2s (69%) | +0.1s (31%) | +yoke, zerofrom | +
| 381. | +base64 v0.22.1 | +0.3s | +0.2s (58%) | +0.1s (42%) | +alloc, default, std | +
| 382. | +whoami v1.6.1 | +0.3s | +0.2s (58%) | +0.1s (42%) | ++ |
| 383. | +nu-ansi-term v0.50.3 | +0.3s | +0.2s (74%) | +0.1s (26%) | +default, std | +
| 384. | +crossbeam-epoch v0.9.18 | +0.3s | +0.2s (71%) | +0.1s (29%) | +alloc, std | +
| 385. | +diff v0.1.13 | +0.3s | +0.1s (45%) | +0.2s (55%) | ++ |
| 386. | +tinyvec v1.11.0 | +0.3s | +0.3s (90%) | +0.0s (10%) | +alloc, default, tinyvec_macros | +
| 387. | +zstd-sys v2.0.16+zstd.1.5.7 build-script | +0.3s | ++ | + | std | +
| 388. | +unicode-segmentation v1.13.2 | +0.3s | +0.3s (84%) | +0.0s (16%) | ++ |
| 389. | +darling_macro v0.20.11 | +0.3s | ++ | + | + |
| 390. | +libsqlite3-sys v0.30.1 build-script | +0.3s | ++ | + | bundled, bundled_bindings, cc, pkg-config, unlock_notify, vcpkg | +
| 391. | +anyhow v1.0.102 | +0.3s | +0.2s (70%) | +0.1s (30%) | +default, std | +
| 392. | +base64ct v1.8.3 | +0.3s | +0.3s (87%) | +0.0s (13%) | +alloc | +
| 393. | +base64 v0.22.1 | +0.3s | +0.2s (83%) | +0.0s (17%) | +alloc, std | +
| 394. | +tracing v0.1.44 | +0.3s | +0.2s (70%) | +0.1s (30%) | +attributes, default, log, std, tracing-attributes | +
| 395. | +pretty_assertions v1.4.1 | +0.3s | +0.1s (38%) | +0.2s (62%) | +default, std | +
| 396. | +toml_datetime v1.1.1+spec-1.1.0 | +0.3s | +0.2s (55%) | +0.1s (45%) | +alloc, serde, std | +
| 397. | +aws-lc-sys v0.41.0 | +0.3s | +0.2s (86%) | +0.0s (14%) | +prebuilt-nasm | +
| 398. | +hashlink v0.10.0 | +0.3s | +0.3s (93%) | +0.0s (7%) | ++ |
| 399. | +torrust-tracker-axum-server v3.0.0-develop | +0.3s | +0.2s (62%) | +0.1s (38%) | ++ |
| 400. | +parking_lot v0.12.5 | +0.3s | +0.2s (62%) | +0.1s (38%) | +default | +
| 401. | +rustversion v1.0.22 | +0.3s | ++ | + | + |
| 402. | +etcetera v0.11.0 | +0.3s | +0.2s (59%) | +0.1s (41%) | ++ |
| 403. | +glob v0.3.3 | +0.3s | +0.2s (64%) | +0.1s (36%) | ++ |
| 404. | +num-integer v0.1.46 | +0.3s | +0.2s (75%) | +0.1s (25%) | +i128 | +
| 405. | +yansi v1.0.1 | +0.3s | +0.2s (79%) | +0.1s (21%) | +alloc, default, std | +
| 406. | +torrust-tracker-rest-api-core v3.0.0-develop | +0.3s | +0.2s (75%) | +0.1s (25%) | ++ |
| 407. | +hyperlocal v0.9.1 | +0.3s | +0.1s (54%) | +0.1s (46%) | +client, default, http-body-util, hyper-util, server, tower-service | +
| 408. | +mime v0.3.17 | +0.3s | +0.1s (50%) | +0.1s (50%) | ++ |
| 409. | +allocator-api2 v0.2.21 | +0.3s | +0.2s (86%) | +0.0s (14%) | +alloc | +
| 410. | +async-compression v0.4.42 | +0.3s | +0.2s (78%) | +0.1s (22%) | +brotli, gzip, tokio, zlib, zstd | +
| 411. | +predicates-tree v1.0.13 | +0.3s | +0.1s (37%) | +0.2s (63%) | ++ |
| 412. | +icu_provider v2.2.0 | +0.3s | +0.2s (85%) | +0.0s (15%) | +baked | +
| 413. | +sha1 v0.11.0 | +0.3s | +0.1s (52%) | +0.1s (48%) | +alloc, default, oid | +
| 414. | +quickcheck_macros v1.2.0 | +0.3s | ++ | + | + |
| 415. | +proc-macro-error-attr2 v2.0.0 | +0.3s | ++ | + | + |
| 416. | +event-listener v5.4.1 | +0.3s | +0.2s (74%) | +0.1s (26%) | +default, parking, std | +
| 417. | +torrust-tracker-rest-api-client v3.0.0-develop | +0.3s | +0.2s (62%) | +0.1s (38%) | ++ |
| 418. | +darling_macro v0.23.0 | +0.3s | ++ | + | + |
| 419. | +httparse v1.10.1 build-script | +0.3s | ++ | + | default, std | +
| 420. | +thiserror v1.0.69 build-script | +0.3s | ++ | + | + |
| 421. | +arc-swap v1.9.1 | +0.3s | +0.2s (81%) | +0.1s (19%) | ++ |
| 422. | +strsim v0.11.1 | +0.3s | +0.2s (65%) | +0.1s (35%) | ++ |
| 423. | +bitflags v2.11.1 | +0.2s | +0.2s (64%) | +0.1s (36%) | +serde, serde_core, std | +
| 424. | +plotters-backend v0.3.7 | +0.2s | +0.2s (80%) | +0.0s (20%) | ++ |
| 425. | +iana-time-zone v0.1.65 | +0.2s | +0.1s (44%) | +0.1s (56%) | +fallback | +
| 426. | +signal-hook-registry v1.4.8 | +0.2s | +0.1s (60%) | +0.1s (40%) | ++ |
| 427. | +ringbuf v0.5.0 | +0.2s | +0.2s (92%) | +0.0s (8%) | +alloc, default, std | +
| 428. | +futures-executor v0.3.32 | +0.2s | +0.1s (52%) | +0.1s (48%) | +default, std | +
| 429. | +semver v1.0.28 | +0.2s | +0.2s (64%) | +0.1s (36%) | +default, std | +
| 430. | +toml_datetime v0.6.11 | +0.2s | +0.1s (56%) | +0.1s (44%) | +serde | +
| 431. | +parking_lot_core v0.9.12 | +0.2s | +0.2s (68%) | +0.1s (32%) | ++ |
| 432. | +pkg-config v0.3.33 | +0.2s | +0.2s (79%) | +0.0s (21%) | ++ |
| 433. | +zmij v1.0.21 | +0.2s | +0.2s (79%) | +0.0s (21%) | ++ |
| 434. | +dotenvy v0.15.7 | +0.2s | +0.1s (62%) | +0.1s (38%) | ++ |
| 435. | +zerotrie v0.2.4 | +0.2s | +0.2s (83%) | +0.0s (17%) | +yoke, zerofrom | +
| 436. | +flume v0.11.1 | +0.2s | +0.2s (88%) | +0.0s (12%) | +async, futures-core, futures-sink | +
| 437. | +torrust-server-lib v3.0.0-develop | +0.2s | +0.1s (58%) | +0.1s (42%) | ++ |
| 438. | +proc-macro-error2 v2.0.1 | +0.2s | +0.2s (71%) | +0.1s (29%) | +default, syn-error | +
| 439. | +hashlink v0.10.0 | +0.2s | +0.2s (96%) | +0.0s (4%) | ++ |
| 440. | +crossbeam-utils v0.8.21 build-script | +0.2s | ++ | + | std | +
| 441. | +unicode-linebreak v0.1.5 | +0.2s | +0.2s (70%) | +0.1s (30%) | ++ |
| 442. | +relative-path v1.9.3 | +0.2s | +0.2s (74%) | +0.1s (26%) | +default | +
| 443. | +tracing-log v0.2.0 | +0.2s | +0.1s (52%) | +0.1s (48%) | +log-tracer, std | +
| 444. | +derive_builder_macro v0.20.2 | +0.2s | ++ | + | lib_has_std | +
| 445. | +plotters-svg v0.3.7 | +0.2s | +0.1s (57%) | +0.1s (43%) | ++ |
| 446. | +unicode-width v0.2.2 | +0.2s | +0.2s (83%) | +0.0s (17%) | +cjk, default | +
| 447. | +rustversion v1.0.22 build-script | +0.2s | ++ | + | + |
| 448. | +http-body-util v0.1.3 | +0.2s | +0.2s (83%) | +0.0s (17%) | +default | +
| 449. | +proc-macro2-diagnostics v0.10.1 | +0.2s | +0.1s (61%) | +0.1s (39%) | +colors, default, yansi | +
| 450. | +zerocopy v0.8.48 build-script | +0.2s | ++ | + | derive, simd, zerocopy-derive | +
| 451. | +inlinable_string v0.1.15 | +0.2s | +0.2s (74%) | +0.1s (26%) | ++ |
| 452. | +pest_derive v2.8.6 | +0.2s | ++ | + | default, std | +
| 453. | +simd-adler32 v0.3.9 | +0.2s | +0.1s (22%) | +0.2s (78%) | ++ |
| 454. | +byteorder v1.5.0 | +0.2s | +0.2s (91%) | +0.0s (9%) | +std | +
| 455. | +cipher v0.5.2 | +0.2s | +0.2s (91%) | +0.0s (9%) | ++ |
| 456. | +fs_extra v1.3.0 | +0.2s | +0.1s (64%) | +0.1s (36%) | ++ |
| 457. | +toml_write v0.1.2 | +0.2s | +0.2s (86%) | +0.0s (14%) | +alloc, default, std | +
| 458. | +thread_local v1.1.9 | +0.2s | +0.2s (73%) | +0.1s (27%) | ++ |
| 459. | +pem-rfc7468 v0.7.0 | +0.2s | +0.1s (55%) | +0.1s (45%) | +alloc | +
| 460. | +serde_core v1.0.228 build-script | +0.2s | ++ | + | alloc, rc, result, std | +
| 461. | +native-tls v0.2.18 | +0.2s | +0.1s (64%) | +0.1s (36%) | +default | +
| 462. | +event-listener v5.4.1 | +0.2s | +0.2s (77%) | +0.0s (23%) | +default, parking, std | +
| 463. | +concurrent-queue v2.5.0 | +0.2s | +0.2s (91%) | +0.0s (9%) | +std | +
| 464. | +flume v0.11.1 | +0.2s | +0.2s (82%) | +0.0s (18%) | +async, futures-core, futures-sink | +
| 465. | +either v1.16.0 | +0.2s | +0.2s (95%) | +0.0s (5%) | +default, serde, std, use_std | +
| 466. | +smallvec v1.15.1 | +0.2s | +0.2s (86%) | +0.0s (14%) | +const_generics, serde | +
| 467. | +getrandom v0.3.4 | +0.2s | +0.1s (64%) | +0.1s (36%) | +std | +
| 468. | +ringbuffer v0.15.0 | +0.2s | +0.2s (77%) | +0.0s (23%) | +alloc, default | +
| 469. | +digest v0.10.7 | +0.2s | +0.2s (82%) | +0.0s (18%) | +alloc, block-buffer, const-oid, core-api, default, mac, oid, std, subtle | +
| 470. | +sha1 v0.10.6 | +0.2s | +0.1s (52%) | +0.1s (48%) | ++ |
| 471. | +zmij v1.0.21 | +0.2s | +0.1s (52%) | +0.1s (48%) | ++ |
| 472. | +whoami v1.6.1 | +0.2s | +0.1s (71%) | +0.1s (29%) | ++ |
| 473. | +crc32fast v1.5.0 build-script | +0.2s | ++ | + | default, std | +
| 474. | +smallvec v1.15.1 | +0.2s | +0.2s (95%) | +0.0s (5%) | +const_generics, const_new, serde | +
| 475. | +unicode-width v0.1.14 | +0.2s | +0.2s (86%) | +0.0s (14%) | +cjk, default | +
| 476. | +anes v0.1.6 | +0.2s | +0.2s (80%) | +0.0s (20%) | +default | +
| 477. | +libsqlite3-sys v0.30.1 | +0.2s | +0.2s (90%) | +0.0s (10%) | +bundled, bundled_bindings, cc, pkg-config, unlock_notify, vcpkg | +
| 478. | +serde_bytes v0.11.19 | +0.2s | +0.2s (85%) | +0.0s (15%) | +default, std | +
| 479. | +quote v1.0.45 | +0.2s | +0.1s (70%) | +0.1s (30%) | +default, proc-macro | +
| 480. | +spki v0.7.3 | +0.2s | +0.1s (75%) | +0.1s (25%) | +alloc, pem, std | +
| 481. | +crossbeam-deque v0.8.6 | +0.2s | +0.2s (90%) | +0.0s (10%) | +default, std | +
| 482. | +futures-channel v0.3.32 | +0.2s | +0.2s (85%) | +0.0s (15%) | +alloc, futures-sink, sink, std | +
| 483. | +either v1.16.0 | +0.2s | +0.2s (80%) | +0.0s (20%) | +default, serde, std, use_std | +
| 484. | +rustc_version v0.4.1 | +0.2s | +0.1s (60%) | +0.1s (40%) | ++ |
| 485. | +ucd-trie v0.1.7 | +0.2s | +0.1s (60%) | +0.1s (40%) | +std | +
| 486. | +once_cell v1.21.4 | +0.2s | +0.1s (70%) | +0.1s (30%) | +alloc, default, race, std | +
| 487. | +serde_urlencoded v0.7.1 | +0.2s | +0.2s (89%) | +0.0s (11%) | ++ |
| 488. | +tracing v0.1.44 | +0.2s | +0.2s (84%) | +0.0s (16%) | +attributes, default, log, std, tracing-attributes | +
| 489. | +ciborium-ll v0.2.2 | +0.2s | +0.1s (74%) | +0.0s (26%) | ++ |
| 490. | +sha1 v0.10.6 | +0.2s | +0.1s (74%) | +0.0s (26%) | ++ |
| 491. | +bittorrent-primitives v0.2.0 | +0.2s | +0.1s (58%) | +0.1s (42%) | ++ |
| 492. | +serde_urlencoded v0.7.1 | +0.2s | +0.2s (84%) | +0.0s (16%) | ++ |
| 493. | +rand_core v0.6.4 | +0.2s | +0.1s (79%) | +0.0s (21%) | +alloc, getrandom, std | +
| 494. | +rstest_macros v0.26.1 build-script | +0.2s | ++ | + | async-timeout, crate-name | +
| 495. | +base64ct v1.8.3 | +0.2s | +0.2s (84%) | +0.0s (16%) | +alloc | +
| 496. | +unicode-properties v0.1.4 | +0.2s | +0.2s (84%) | +0.0s (16%) | +default, emoji, general-category | +
| 497. | +hex v0.4.3 | +0.2s | +0.2s (84%) | +0.0s (16%) | +alloc, default, std | +
| 498. | +openssl-macros v0.1.1 | +0.2s | ++ | + | + |
| 499. | +spin v0.9.8 | +0.2s | +0.1s (74%) | +0.0s (26%) | +barrier, default, lazy, lock_api, lock_api_crate, mutex, once, rwlock, spin_mutex | +
| 500. | +torrust-net-primitives v3.0.0-develop | +0.2s | +0.1s (74%) | +0.0s (26%) | ++ |
| 501. | +rstest_macros v0.25.0 build-script | +0.2s | ++ | + | async-timeout, crate-name | +
| 502. | +unicase v2.9.0 | +0.2s | +0.1s (79%) | +0.0s (21%) | ++ |
| 503. | +uncased v0.9.10 build-script | +0.2s | ++ | + | alloc, default | +
| 504. | +httparse v1.10.1 | +0.2s | +0.1s (53%) | +0.1s (47%) | +default, std | +
| 505. | +clap_lex v1.1.0 | +0.2s | +0.1s (47%) | +0.1s (53%) | ++ |
| 506. | +sqlx v0.8.6 | +0.2s | +0.1s (42%) | +0.1s (58%) | +_rt-tokio, _sqlite, any, default, derive, json, macros, migrate, mysql, postgres, runtime-tokio, runtime-tokio-native-tls, sqlite, sqlx-macros, sqlx-mysql, sqlx-postgres, sqlx-sqlite, tls-native-tls | +
| 507. | +rustls-platform-verifier v0.7.0 | +0.2s | +0.1s (33%) | +0.1s (67%) | ++ |
| 508. | +rand_core v0.9.5 | +0.2s | +0.1s (83%) | +0.0s (17%) | +os_rng, std | +
| 509. | +spin v0.9.8 | +0.2s | +0.1s (72%) | +0.0s (28%) | +barrier, default, lazy, lock_api, lock_api_crate, mutex, once, rwlock, spin_mutex | +
| 510. | +httpdate v1.0.3 | +0.2s | +0.1s (50%) | +0.1s (50%) | ++ |
| 511. | +getrandom v0.4.2 | +0.2s | +0.1s (61%) | +0.1s (39%) | +std, sys_rng | +
| 512. | +futures-executor v0.3.32 | +0.2s | +0.1s (67%) | +0.1s (33%) | +default, std | +
| 513. | +camino v1.1.12 build-script | +0.2s | ++ | + | serde, serde1 | +
| 514. | +toml_writer v1.1.1+spec-1.1.0 | +0.2s | +0.1s (83%) | +0.0s (17%) | +alloc, std | +
| 515. | +parking_lot_core v0.9.12 | +0.2s | +0.1s (78%) | +0.0s (22%) | ++ |
| 516. | +lock_api v0.4.14 | +0.2s | +0.1s (83%) | +0.0s (17%) | +atomic_usize, default | +
| 517. | +rustix v1.1.4 build-script | +0.2s | ++ | + | alloc, default, fs, std, termios | +
| 518. | +pkcs8 v0.10.2 | +0.2s | +0.1s (61%) | +0.1s (39%) | +alloc, pem, std | +
| 519. | +parking_lot_core v0.9.12 build-script | +0.2s | ++ | + | + |
| 520. | +aws-lc-rs v1.17.0 build-script | +0.2s | ++ | + | aws-lc-sys, prebuilt-nasm | +
| 521. | +fastrand v2.4.1 | +0.2s | +0.1s (72%) | +0.0s (28%) | +alloc, default, std | +
| 522. | +digest v0.10.7 | +0.2s | +0.2s (89%) | +0.0s (11%) | +alloc, block-buffer, const-oid, core-api, default, mac, oid, std, subtle | +
| 523. | +byteorder v1.5.0 | +0.2s | +0.1s (78%) | +0.0s (22%) | +default, std | +
| 524. | +ctutils v0.4.2 | +0.2s | +0.2s (94%) | +0.0s (6%) | ++ |
| 525. | +torrust-clock v3.0.0-develop | +0.2s | +0.1s (65%) | +0.1s (35%) | ++ |
| 526. | +libsqlite3-sys v0.30.1 | +0.2s | +0.1s (76%) | +0.0s (24%) | +bundled, bundled_bindings, cc, pkg-config, unlock_notify, vcpkg | +
| 527. | +filetime v0.2.29 | +0.2s | +0.1s (76%) | +0.0s (24%) | ++ |
| 528. | +ryu v1.0.23 | +0.2s | +0.0s (6%) | +0.2s (94%) | ++ |
| 529. | +bloom v0.3.2 | +0.2s | +0.1s (65%) | +0.1s (35%) | ++ |
| 530. | +concurrent-queue v2.5.0 | +0.2s | +0.1s (88%) | +0.0s (12%) | +std | +
| 531. | +getrandom v0.2.17 | +0.2s | +0.1s (88%) | +0.0s (12%) | +std | +
| 532. | +crc v3.4.0 | +0.2s | +0.1s (76%) | +0.0s (24%) | ++ |
| 533. | +getrandom v0.3.4 build-script | +0.2s | ++ | + | std | +
| 534. | +object v0.37.3 build-script | +0.2s | ++ | + | archive, coff, elf, macho, pe, read_core, unaligned, xcoff | +
| 535. | +heck v0.5.0 | +0.2s | +0.1s (53%) | +0.1s (47%) | ++ |
| 536. | +spki v0.7.3 | +0.2s | +0.1s (76%) | +0.0s (24%) | +alloc, pem, std | +
| 537. | +owo-colors v4.3.0 build-script | +0.2s | ++ | + | + |
| 538. | +hex v0.4.3 | +0.2s | +0.2s (94%) | +0.0s (6%) | +alloc, default, std | +
| 539. | +hyper-timeout v0.5.2 | +0.2s | +0.2s (94%) | +0.0s (6%) | ++ |
| 540. | +yoke v0.8.2 | +0.2s | +0.1s (82%) | +0.0s (18%) | +derive, zerofrom | +
| 541. | +num-traits v0.2.19 build-script | +0.2s | ++ | + | i128, libm, std | +
| 542. | +convert_case v0.10.0 | +0.2s | +0.1s (50%) | +0.1s (50%) | ++ |
| 543. | +anstyle v1.0.14 | +0.2s | +0.1s (75%) | +0.0s (25%) | +default, std | +
| 544. | +phf_shared v0.11.3 | +0.2s | +0.1s (62%) | +0.1s (38%) | +std | +
| 545. | +futures-channel v0.3.32 | +0.2s | +0.1s (75%) | +0.0s (25%) | +alloc, default, futures-sink, sink, std | +
| 546. | +cmov v0.5.3 | +0.2s | +0.1s (94%) | +0.0s (6%) | ++ |
| 547. | +toml_datetime v1.1.1+spec-1.1.0 | +0.2s | +0.1s (69%) | +0.1s (31%) | +alloc, default, std | +
| 548. | +alloca v0.4.0 build-script | +0.2s | ++ | + | + |
| 549. | +rand_core v0.6.4 | +0.2s | +0.1s (81%) | +0.0s (19%) | +alloc, getrandom, std | +
| 550. | +bit-vec v0.4.4 | +0.2s | +0.1s (81%) | +0.0s (19%) | ++ |
| 551. | +form_urlencoded v1.2.2 | +0.2s | +0.1s (69%) | +0.1s (31%) | +alloc, default, std | +
| 552. | +supports-color v3.0.2 | +0.2s | +0.1s (56%) | +0.1s (44%) | ++ |
| 553. | +mutants v0.0.3 | +0.2s | ++ | + | + |
| 554. | +zstd-safe v7.2.4 build-script | +0.2s | ++ | + | std | +
| 555. | +cast v0.3.0 | +0.2s | +0.1s (88%) | +0.0s (12%) | ++ |
| 556. | +openssl v0.10.80 build-script | +0.2s | ++ | + | default | +
| 557. | +backtrace-ext v0.2.1 | +0.2s | +0.1s (50%) | +0.1s (50%) | ++ |
| 558. | +native-tls v0.2.18 build-script | +0.2s | ++ | + | default | +
| 559. | +subtle v2.6.1 | +0.2s | +0.1s (75%) | +0.0s (25%) | ++ |
| 560. | +tinystr v0.8.3 | +0.2s | +0.1s (81%) | +0.0s (19%) | +zerovec | +
| 561. | +unicode-properties v0.1.4 | +0.2s | +0.1s (75%) | +0.0s (25%) | +default, emoji, general-category | +
| 562. | +structmeta v0.3.0 | +0.2s | +0.1s (88%) | +0.0s (12%) | ++ |
| 563. | +want v0.3.1 | +0.2s | +0.1s (62%) | +0.1s (38%) | ++ |
| 564. | +const-oid v0.9.6 | +0.1s | +0.1s (67%) | +0.0s (33%) | ++ |
| 565. | +bitflags v2.11.1 | +0.1s | +0.1s (80%) | +0.0s (20%) | +serde, serde_core | +
| 566. | +digest v0.11.3 | +0.1s | +0.1s (80%) | +0.0s (20%) | +alloc, block-api, default, mac, oid | +
| 567. | +slab v0.4.12 | +0.1s | +0.1s (73%) | +0.0s (27%) | +default, std | +
| 568. | +ryu v1.0.23 | +0.1s | +0.1s (67%) | +0.0s (33%) | ++ |
| 569. | +openssl-probe v0.2.1 | +0.1s | +0.1s (53%) | +0.1s (47%) | ++ |
| 570. | +anyhow v1.0.102 build-script | +0.1s | ++ | + | default, std | +
| 571. | +version_check v0.9.5 | +0.1s | +0.1s (73%) | +0.0s (27%) | ++ |
| 572. | +crc v3.4.0 | +0.1s | +0.1s (93%) | +0.0s (7%) | ++ |
| 573. | +litemap v0.8.2 | +0.1s | +0.1s (80%) | +0.0s (20%) | ++ |
| 574. | +tonic-prost v0.14.6 | +0.1s | +0.1s (67%) | +0.0s (33%) | ++ |
| 575. | +autocfg v1.5.1 | +0.1s | +0.0s (27%) | +0.1s (73%) | ++ |
| 576. | +futures-core v0.3.32 | +0.1s | +0.1s (67%) | +0.0s (33%) | +alloc, default, std | +
| 577. | +serde_json v1.0.150 build-script | +0.1s | ++ | + | default, raw_value, std | +
| 578. | +foldhash v0.1.5 | +0.1s | +0.1s (73%) | +0.0s (27%) | ++ |
| 579. | +const-oid v0.10.2 | +0.1s | +0.1s (73%) | +0.0s (27%) | ++ |
| 580. | +form_urlencoded v1.2.2 | +0.1s | +0.1s (60%) | +0.1s (40%) | +alloc, default, std | +
| 581. | +predicates-core v1.0.10 | +0.1s | +0.1s (60%) | +0.1s (40%) | ++ |
| 582. | +thiserror v2.0.18 build-script | +0.1s | ++ | + | default, std | +
| 583. | +crossbeam-utils v0.8.21 build-script | +0.1s | ++ | + | default, std | +
| 584. | +anstyle-parse v1.0.0 | +0.1s | +0.1s (93%) | +0.0s (7%) | +default, utf8 | +
| 585. | +supports-hyperlinks v3.2.0 | +0.1s | +0.1s (57%) | +0.1s (43%) | ++ |
| 586. | +icu_properties_data v2.2.0 | +0.1s | +0.1s (71%) | +0.0s (29%) | ++ |
| 587. | +tower-layer v0.3.3 | +0.1s | +0.1s (93%) | +0.0s (7%) | ++ |
| 588. | +lock_api v0.4.14 | +0.1s | +0.1s (71%) | +0.0s (29%) | +atomic_usize, default | +
| 589. | +mockall v0.14.0 | +0.1s | +0.1s (71%) | +0.0s (29%) | ++ |
| 590. | +powerfmt v0.2.0 | +0.1s | +0.1s (64%) | +0.1s (36%) | ++ |
| 591. | +tower-service v0.3.3 | +0.1s | +0.1s (79%) | +0.0s (21%) | ++ |
| 592. | +num-traits v0.2.19 build-script (run) | +0.1s | ++ | + | default, i128, libm, std | +
| 593. | +multimap v0.10.1 | +0.1s | +0.1s (93%) | +0.0s (7%) | +default, serde, serde_impl | +
| 594. | +rand_core v0.10.1 | +0.1s | +0.1s (71%) | +0.0s (29%) | ++ |
| 595. | +unicase v2.9.0 | +0.1s | +0.1s (86%) | +0.0s (14%) | ++ |
| 596. | +log v0.4.30 | +0.1s | +0.1s (71%) | +0.0s (29%) | ++ |
| 597. | +siphasher v1.0.3 | +0.1s | +0.1s (86%) | +0.0s (14%) | +default, std | +
| 598. | +crc32fast v1.5.0 | +0.1s | +0.1s (86%) | +0.0s (14%) | +default, std | +
| 599. | +yoke v0.8.2 | +0.1s | +0.1s (86%) | +0.0s (14%) | +derive, zerofrom | +
| 600. | +hyper-rustls v0.27.9 | +0.1s | +0.1s (64%) | +0.1s (36%) | +aws-lc-rs, http1, http2, tls12 | +
| 601. | +icu_properties_data v2.2.0 | +0.1s | +0.1s (64%) | +0.1s (36%) | ++ |
| 602. | +tinystr v0.8.3 | +0.1s | +0.1s (79%) | +0.0s (21%) | +zerovec | +
| 603. | +foldhash v0.1.5 | +0.1s | +0.1s (86%) | +0.0s (14%) | ++ |
| 604. | +phf_shared v0.11.3 | +0.1s | +0.1s (50%) | +0.1s (50%) | +default, std | +
| 605. | +percent-encoding v2.3.2 | +0.1s | +0.0s (29%) | +0.1s (71%) | +alloc, default, std | +
| 606. | +openssl-probe v0.2.1 | +0.1s | +0.1s (54%) | +0.1s (46%) | ++ |
| 607. | +zstd v0.13.3 | +0.1s | +0.1s (77%) | +0.0s (23%) | ++ |
| 608. | +mockall_derive v0.14.0 build-script | +0.1s | ++ | + | + |
| 609. | +slab v0.4.12 | +0.1s | +0.1s (92%) | +0.0s (8%) | +std | +
| 610. | +crossbeam-queue v0.3.12 | +0.1s | +0.1s (85%) | +0.0s (15%) | +alloc, default, std | +
| 611. | +siphasher v1.0.3 | +0.1s | +0.1s (62%) | +0.1s (38%) | +default, std | +
| 612. | +futures-task v0.3.32 | +0.1s | +0.1s (85%) | +0.0s (15%) | +alloc, std | +
| 613. | +zerocopy v0.8.48 build-script | +0.1s | ++ | + | simd | +
| 614. | +uncased v0.9.10 | +0.1s | +0.1s (62%) | +0.1s (38%) | +alloc, default | +
| 615. | +getrandom v0.2.17 | +0.1s | +0.1s (85%) | +0.0s (15%) | +std | +
| 616. | +torrust-tracker-events v3.0.0-develop | +0.1s | +0.1s (85%) | +0.0s (15%) | ++ |
| 617. | +mockall v0.14.0 build-script | +0.1s | ++ | + | + |
| 618. | +percent-encoding v2.3.2 | +0.1s | +0.1s (77%) | +0.0s (23%) | +alloc, default, std | +
| 619. | +signature v2.2.0 | +0.1s | +0.1s (69%) | +0.0s (31%) | +alloc, digest, rand_core, std | +
| 620. | +parking v2.2.1 | +0.1s | +0.1s (69%) | +0.0s (31%) | ++ |
| 621. | +writeable v0.6.3 | +0.1s | +0.1s (92%) | +0.0s (8%) | ++ |
| 622. | +bollard-buildkit-proto v0.7.0 build-script | +0.1s | ++ | + | default, fetch, ureq | +
| 623. | +utf8-zero v0.8.1 | +0.1s | +0.1s (83%) | +0.0s (17%) | +default, std | +
| 624. | +rustix v1.1.4 build-script (run) | +0.1s | ++ | + | alloc, default, fs, std, termios | +
| 625. | +itoa v1.0.18 | +0.1s | +0.1s (75%) | +0.0s (25%) | ++ |
| 626. | +phf_generator v0.11.3 | +0.1s | +0.1s (58%) | +0.0s (42%) | ++ |
| 627. | +writeable v0.6.3 | +0.1s | +0.1s (75%) | +0.0s (25%) | ++ |
| 628. | +futures-io v0.3.32 | +0.1s | +0.1s (50%) | +0.1s (50%) | +default, std | +
| 629. | +atoi v2.0.0 | +0.1s | +0.1s (83%) | +0.0s (17%) | +default, std | +
| 630. | +same-file v1.0.6 | +0.1s | +0.1s (75%) | +0.0s (25%) | ++ |
| 631. | +tokio-rustls v0.26.4 | +0.1s | +0.1s (92%) | +0.0s (8%) | +aws-lc-rs, aws_lc_rs, tls12 | +
| 632. | +icu_properties_data v2.2.0 build-script (run) | +0.1s | ++ | + | + |
| 633. | +alloc-stdlib v0.2.2 | +0.1s | +0.1s (75%) | +0.0s (25%) | ++ |
| 634. | +try-lock v0.2.5 | +0.1s | +0.1s (58%) | +0.0s (42%) | ++ |
| 635. | +proc-macro2-diagnostics v0.10.1 build-script | +0.1s | ++ | + | colors, default, yansi | +
| 636. | +fnv v1.0.7 | +0.1s | +0.1s (67%) | +0.0s (33%) | +default, std | +
| 637. | +figment v0.10.19 build-script | +0.1s | ++ | + | env, parking_lot, parse-value, pear, tempfile, test, toml | +
| 638. | +rstest v0.26.1 | +0.1s | +0.1s (83%) | +0.0s (17%) | +async-timeout, crate-name, default | +
| 639. | +atoi v2.0.0 | +0.1s | +0.1s (83%) | +0.0s (17%) | +default, std | +
| 640. | +nonempty v0.7.0 | +0.1s | +0.1s (83%) | +0.0s (17%) | ++ |
| 641. | +potential_utf v0.1.5 | +0.1s | +0.1s (67%) | +0.0s (33%) | +zerovec | +
| 642. | +num-conv v0.2.2 | +0.1s | +0.1s (83%) | +0.0s (17%) | ++ |
| 643. | +fs-err v3.3.0 build-script | +0.1s | ++ | + | tokio | +
| 644. | +phf v0.11.3 | +0.1s | +0.1s (83%) | +0.0s (17%) | +default, std | +
| 645. | +litemap v0.8.2 | +0.1s | +0.1s (100%) | +0.0s (0%) | ++ |
| 646. | +zeroize v1.8.2 | +0.1s | +0.1s (67%) | +0.0s (33%) | +alloc, default | +
| 647. | +http-body v1.0.1 | +0.1s | +0.1s (75%) | +0.0s (25%) | ++ |
| 648. | +getrandom v0.4.2 build-script | +0.1s | ++ | + | std, sys_rng | +
| 649. | +hmac v0.12.1 | +0.1s | +0.1s (83%) | +0.0s (17%) | +reset | +
| 650. | +hkdf v0.12.4 | +0.1s | +0.1s (75%) | +0.0s (25%) | ++ |
| 651. | +crossbeam-queue v0.3.12 | +0.1s | +0.1s (92%) | +0.0s (8%) | +alloc, default, std | +
| 652. | +utf8parse v0.2.2 | +0.1s | +0.1s (50%) | +0.1s (50%) | +default | +
| 653. | +md-5 v0.10.6 | +0.1s | +0.1s (100%) | +0.0s (0%) | ++ |
| 654. | +time-core v0.1.8 | +0.1s | +0.1s (91%) | +0.0s (9%) | ++ |
| 655. | +async-stream v0.3.6 | +0.1s | +0.1s (91%) | +0.0s (9%) | ++ |
| 656. | +zerofrom v0.1.8 | +0.1s | +0.1s (82%) | +0.0s (18%) | +derive | +
| 657. | +parking v2.2.1 | +0.1s | +0.1s (73%) | +0.0s (27%) | ++ |
| 658. | +tracing-serde v0.2.0 | +0.1s | +0.1s (82%) | +0.0s (18%) | ++ |
| 659. | +is_ci v1.2.0 | +0.1s | +0.1s (45%) | +0.1s (55%) | ++ |
| 660. | +getrandom v0.4.2 build-script (run) | +0.1s | ++ | + | std, sys_rng | +
| 661. | +hmac v0.13.0 | +0.1s | +0.1s (91%) | +0.0s (9%) | ++ |
| 662. | +pin-project-lite v0.2.17 | +0.1s | +0.1s (55%) | +0.1s (45%) | ++ |
| 663. | +torrust-located-error v3.0.0-develop | +0.1s | +0.1s (64%) | +0.0s (36%) | ++ |
| 664. | +zeroize v1.8.2 | +0.1s | +0.0s (36%) | +0.1s (64%) | +alloc, default | +
| 665. | +terminal_size v0.4.4 | +0.1s | +0.1s (82%) | +0.0s (18%) | ++ |
| 666. | +downcast v0.11.0 | +0.1s | +0.1s (82%) | +0.0s (18%) | +default, std | +
| 667. | +const-oid v0.9.6 | +0.1s | +0.1s (73%) | +0.0s (27%) | ++ |
| 668. | +termtree v0.5.1 | +0.1s | +0.1s (91%) | +0.0s (9%) | ++ |
| 669. | +supports-unicode v3.0.0 | +0.1s | +0.1s (73%) | +0.0s (27%) | ++ |
| 670. | +crypto-common v0.1.7 | +0.1s | +0.1s (73%) | +0.0s (27%) | +std | +
| 671. | +scopeguard v1.2.0 | +0.1s | +0.1s (73%) | +0.0s (27%) | ++ |
| 672. | +block-buffer v0.10.4 | +0.1s | +0.1s (91%) | +0.0s (9%) | ++ |
| 673. | +rustc-hash v2.1.2 | +0.1s | +0.1s (64%) | +0.0s (36%) | +default, std | +
| 674. | +colorchoice v1.0.5 | +0.1s | +0.1s (55%) | +0.1s (45%) | ++ |
| 675. | +hkdf v0.12.4 | +0.1s | +0.1s (70%) | +0.0s (30%) | ++ |
| 676. | +hmac v0.12.1 | +0.1s | +0.1s (90%) | +0.0s (10%) | +reset | +
| 677. | +untrusted v0.9.0 | +0.1s | +0.1s (70%) | +0.0s (30%) | ++ |
| 678. | +num-traits v0.2.19 build-script (run) | +0.1s | ++ | + | i128, libm, std | +
| 679. | +libm v0.2.16 build-script | +0.1s | ++ | + | arch, default | +
| 680. | +zerofrom v0.1.8 | +0.1s | +0.1s (90%) | +0.0s (10%) | +derive | +
| 681. | +tdyne-peer-id v1.0.2 | +0.1s | +0.1s (60%) | +0.0s (40%) | ++ |
| 682. | +derive_builder v0.20.2 | +0.1s | +0.1s (70%) | +0.0s (30%) | +default, std | +
| 683. | +rayon-core v1.13.0 build-script | +0.1s | ++ | + | + |
| 684. | +home v0.5.12 | +0.1s | +0.1s (70%) | +0.0s (30%) | ++ |
| 685. | +zerocopy v0.8.48 build-script (run) | +0.1s | ++ | + | derive, simd, zerocopy-derive | +
| 686. | +icu_properties_data v2.2.0 build-script | +0.1s | ++ | + | + |
| 687. | +block-buffer v0.12.0 | +0.1s | +0.1s (80%) | +0.0s (20%) | ++ |
| 688. | +atomic-waker v1.1.2 | +0.1s | +0.1s (60%) | +0.0s (40%) | ++ |
| 689. | +signature v2.2.0 | +0.1s | +0.1s (90%) | +0.0s (10%) | +alloc, digest, rand_core, std | +
| 690. | +icu_normalizer_data v2.2.0 build-script | +0.1s | ++ | + | + |
| 691. | +num-iter v0.1.45 | +0.1s | +0.1s (90%) | +0.0s (10%) | ++ |
| 692. | +errno v0.3.14 | +0.1s | +0.1s (60%) | +0.0s (40%) | +default, std | +
| 693. | +generic-array v0.14.7 build-script | +0.1s | ++ | + | more_lengths | +
| 694. | +serde_spanned v1.1.1 | +0.1s | +0.1s (80%) | +0.0s (20%) | +alloc, serde, std | +
| 695. | +futures-task v0.3.32 | +0.1s | +0.1s (60%) | +0.0s (40%) | +alloc, std | +
| 696. | +blowfish v0.10.0 | +0.1s | +0.1s (70%) | +0.0s (30%) | ++ |
| 697. | +rustversion v1.0.22 build-script (run) | +0.1s | ++ | + | + |
| 698. | +md-5 v0.10.6 | +0.1s | +0.1s (70%) | +0.0s (30%) | ++ |
| 699. | +num-bigint-dig v0.8.6 build-script | +0.1s | ++ | + | i128, prime, rand, u64_digit, zeroize | +
| 700. | +anyhow v1.0.102 build-script (run) | +0.1s | ++ | + | default, std | +
| 701. | +compression-core v0.4.32 | +0.1s | +0.1s (70%) | +0.0s (30%) | ++ |
| 702. | +unicode-xid v0.2.6 | +0.1s | +0.1s (78%) | +0.0s (22%) | +default | +
| 703. | +approx v0.5.1 | +0.1s | +0.1s (78%) | +0.0s (22%) | +default, std | +
| 704. | +num-iter v0.1.45 | +0.1s | +0.1s (89%) | +0.0s (11%) | +i128, std | +
| 705. | +phf_codegen v0.11.3 | +0.1s | +0.1s (89%) | +0.0s (11%) | ++ |
| 706. | +parking_lot_core v0.9.12 build-script (run) | +0.1s | ++ | + | + |
| 707. | +rstest v0.25.0 | +0.1s | +0.1s (89%) | +0.0s (11%) | +async-timeout, crate-name, default | +
| 708. | +adler2 v2.0.1 | +0.1s | +0.0s (33%) | +0.1s (67%) | ++ |
| 709. | +inout v0.2.2 | +0.1s | +0.1s (89%) | +0.0s (11%) | ++ |
| 710. | +idna_adapter v1.2.2 | +0.1s | +0.1s (78%) | +0.0s (22%) | +compiled_data | +
| 711. | +utf8_iter v1.0.4 | +0.1s | +0.1s (78%) | +0.0s (22%) | ++ |
| 712. | +dunce v1.0.5 | +0.1s | +0.0s (33%) | +0.1s (67%) | ++ |
| 713. | +crypto-common v0.1.7 | +0.1s | +0.1s (89%) | +0.0s (11%) | +std | +
| 714. | +alloc-no-stdlib v2.0.4 | +0.1s | +0.1s (100%) | +0.0s (0%) | ++ |
| 715. | +proc-macro2-diagnostics v0.10.1 build-script (run) | +0.1s | ++ | + | colors, default, yansi | +
| 716. | +oorandom v11.1.5 | +0.1s | +0.1s (75%) | +0.0s (25%) | ++ |
| 717. | +pbkdf2 v0.13.0 | +0.1s | +0.1s (88%) | +0.0s (12%) | +default, hmac | +
| 718. | +utf8_iter v1.0.4 | +0.1s | +0.1s (100%) | +0.0s (0%) | ++ |
| 719. | +castaway v0.2.4 | +0.1s | +0.1s (88%) | +0.0s (12%) | +alloc | +
| 720. | +block-buffer v0.10.4 | +0.1s | +0.1s (88%) | +0.0s (12%) | ++ |
| 721. | +page_size v0.6.0 | +0.1s | +0.1s (75%) | +0.0s (25%) | ++ |
| 722. | +thiserror v1.0.69 | +0.1s | +0.1s (62%) | +0.0s (38%) | ++ |
| 723. | +zstd-safe v7.2.4 | +0.1s | +0.1s (88%) | +0.0s (12%) | +std | +
| 724. | +thiserror v1.0.69 build-script (run) | +0.1s | ++ | + | + |
| 725. | +futures-io v0.3.32 | +0.1s | +0.1s (88%) | +0.0s (12%) | +default, std | +
| 726. | +serde_spanned v0.6.9 | +0.1s | +0.1s (75%) | +0.0s (25%) | +serde | +
| 727. | +generic-array v0.14.7 build-script (run) | +0.1s | ++ | + | more_lengths | +
| 728. | +potential_utf v0.1.5 | +0.1s | +0.1s (75%) | +0.0s (25%) | +zerovec | +
| 729. | +crc32fast v1.5.0 build-script (run) | +0.1s | ++ | + | default, std | +
| 730. | +derive_more v2.1.1 | +0.1s | +0.1s (100%) | +0.0s (0%) | +as_ref, constructor, default, display, from, std | +
| 731. | +cpufeatures v0.2.17 | +0.1s | +0.1s (71%) | +0.0s (29%) | ++ |
| 732. | +lazy_static v1.5.0 | +0.1s | +0.1s (71%) | +0.0s (29%) | +spin, spin_no_std | +
| 733. | +generic-array v0.14.7 build-script (run) | +0.1s | ++ | + | more_lengths | +
| 734. | +idna_adapter v1.2.2 | +0.1s | +0.1s (86%) | +0.0s (14%) | +compiled_data | +
| 735. | +anyhow v1.0.102 build-script (run) | +0.1s | ++ | + | default, std | +
| 736. | +is_terminal_polyfill v1.70.2 | +0.1s | +0.1s (86%) | +0.0s (14%) | +default | +
| 737. | +darling v0.20.11 | +0.1s | +0.1s (86%) | +0.0s (14%) | +default, suggestions | +
| 738. | +binascii v0.1.4 | +0.1s | +0.0s (14%) | +0.1s (86%) | +decode, default, encode | +
| 739. | +thiserror v2.0.18 build-script (run) | +0.1s | ++ | + | default, std | +
| 740. | +icu_normalizer_data v2.2.0 build-script (run) | +0.1s | ++ | + | + |
| 741. | +darling v0.23.0 | +0.1s | +0.1s (86%) | +0.0s (14%) | +default, suggestions | +
| 742. | +static_assertions v1.1.0 | +0.1s | +0.1s (100%) | +0.0s (0%) | ++ |
| 743. | +icu_normalizer_data v2.2.0 | +0.1s | +0.1s (100%) | +0.0s (0%) | ++ |
| 744. | +crc-catalog v2.5.0 | +0.1s | +0.1s (71%) | +0.0s (29%) | ++ |
| 745. | +futures-sink v0.3.32 | +0.1s | +0.0s (57%) | +0.0s (43%) | ++ |
| 746. | +alloca v0.4.0 build-script (run) | +0.1s | ++ | + | + |
| 747. | +home v0.5.12 | +0.1s | +0.1s (71%) | +0.0s (29%) | ++ |
| 748. | +ciborium-io v0.2.2 | +0.1s | +0.1s (71%) | +0.0s (29%) | +alloc, std | +
| 749. | +openssl-sys v0.9.116 build-script (run) | +0.1s | ++ | + | + |
| 750. | +libm v0.2.16 build-script (run) | +0.1s | ++ | + | arch, default | +
| 751. | +icu_normalizer_data v2.2.0 build-script (run) | +0.1s | ++ | + | + |
| 752. | +foreign-types v0.3.2 | +0.1s | +0.1s (86%) | +0.0s (14%) | ++ |
| 753. | +thiserror v2.0.18 | +0.1s | +0.0s (67%) | +0.0s (33%) | +default, std | +
| 754. | +libc v0.2.186 build-script | +0.1s | ++ | + | default, std | +
| 755. | +anstyle-query v1.1.5 | +0.1s | +0.1s (100%) | +0.0s (0%) | ++ |
| 756. | +subtle v2.6.1 | +0.1s | +0.0s (67%) | +0.0s (33%) | ++ |
| 757. | +stable_deref_trait v1.2.1 | +0.1s | +0.1s (100%) | +0.0s (0%) | ++ |
| 758. | +tinyvec_macros v0.1.1 | +0.1s | +0.1s (83%) | +0.0s (17%) | ++ |
| 759. | +rstest_macros v0.25.0 build-script (run) | +0.1s | ++ | + | async-timeout, crate-name | +
| 760. | +crc-catalog v2.5.0 | +0.1s | +0.1s (100%) | +0.0s (0%) | ++ |
| 761. | +thiserror v2.0.18 | +0.1s | +0.1s (83%) | +0.0s (17%) | +default, std | +
| 762. | +portable-atomic v1.13.1 build-script (run) | +0.1s | ++ | + | default, fallback | +
| 763. | +foreign-types v0.3.2 | +0.1s | +0.1s (83%) | +0.0s (17%) | ++ |
| 764. | +ident_case v1.0.1 | +0.1s | +0.1s (83%) | +0.0s (17%) | ++ |
| 765. | +quote v1.0.45 build-script (run) | +0.1s | ++ | + | default, proc-macro | +
| 766. | +stable_deref_trait v1.2.1 | +0.1s | +0.0s (50%) | +0.0s (50%) | ++ |
| 767. | +fs-err v3.3.0 build-script (run) | +0.1s | ++ | + | tokio | +
| 768. | +futures v0.3.32 | +0.1s | +0.0s (67%) | +0.0s (33%) | +alloc, async-await, default, executor, futures-executor, std | +
| 769. | +rustls v0.23.40 build-script | +0.1s | ++ | + | aws-lc-rs, aws_lc_rs, log, logging, ring, std, tls12 | +
| 770. | +rstest_macros v0.26.1 build-script (run) | +0.1s | ++ | + | async-timeout, crate-name | +
| 771. | +fnv v1.0.7 | +0.1s | +0.1s (83%) | +0.0s (17%) | +default, std | +
| 772. | +phf v0.11.3 | +0.1s | +0.1s (83%) | +0.0s (17%) | ++ |
| 773. | +alloca v0.4.0 | +0.1s | +0.1s (83%) | +0.0s (17%) | ++ |
| 774. | +proc-macro2 v1.0.106 build-script | +0.1s | ++ | + | default, proc-macro | +
| 775. | +libm v0.2.16 build-script (run) | +0.1s | ++ | + | arch, default | +
| 776. | +openssl v0.10.80 build-script (run) | +0.1s | ++ | + | default | +
| 777. | +foreign-types-shared v0.1.1 | +0.1s | +0.0s (80%) | +0.0s (20%) | ++ |
| 778. | +serde v1.0.228 build-script | +0.1s | ++ | + | alloc, default, derive, rc, serde_derive, std | +
| 779. | +openssl-sys v0.9.116 build-script (run) | +0.1s | ++ | + | + |
| 780. | +is-terminal v0.4.17 | +0.1s | +0.1s (100%) | +0.0s (0%) | ++ |
| 781. | +itoa v1.0.18 | +0.1s | +0.0s (0%) | +0.1s (100%) | ++ |
| 782. | +uncased v0.9.10 build-script (run) | +0.1s | ++ | + | alloc, default | +
| 783. | +auto_ops v0.3.0 | +0.1s | +0.0s (80%) | +0.0s (20%) | ++ |
| 784. | +tinyvec_macros v0.1.1 | +0.1s | +0.1s (100%) | +0.0s (0%) | ++ |
| 785. | +find-msvc-tools v0.1.9 | +0.1s | +0.0s (0%) | +0.1s (100%) | ++ |
| 786. | +pin-project v1.1.13 | +0.1s | +0.0s (80%) | +0.0s (20%) | ++ |
| 787. | +cpufeatures v0.3.0 | +0.1s | +0.0s (60%) | +0.0s (40%) | ++ |
| 788. | +once_cell v1.21.4 | +0.1s | +0.0s (0%) | +0.1s (100%) | +alloc, default, race, std | +
| 789. | +serde_core v1.0.228 build-script | +0.1s | ++ | + | alloc, default, rc, result, std | +
| 790. | +zstd-sys v2.0.16+zstd.1.5.7 | +0.1s | +0.0s (60%) | +0.0s (40%) | +std | +
| 791. | +zmij v1.0.21 build-script | +0.1s | ++ | + | + |
| 792. | +sync_wrapper v1.0.2 | +0.1s | +0.1s (100%) | +0.0s (0%) | +futures, futures-core | +
| 793. | +mockall v0.14.0 build-script (run) | +0.1s | ++ | + | + |
| 794. | +log v0.4.30 | +0.1s | +0.0s (0%) | +0.1s (100%) | +std | +
| 795. | +httparse v1.10.1 build-script (run) | +0.1s | ++ | + | default, std | +
| 796. | +mockall_derive v0.14.0 build-script (run) | +0.0s | ++ | + | + |
| 797. | +derive_more v1.0.0 | +0.0s | +0.0s (100%) | +0.0s (0%) | +default, display, std | +
| 798. | +getrandom v0.3.4 build-script (run) | +0.0s | ++ | + | std | +
| 799. | +icu_normalizer_data v2.2.0 | +0.0s | +0.0s (75%) | +0.0s (25%) | ++ |
| 800. | +serde_core v1.0.228 build-script (run) | +0.0s | ++ | + | alloc, default, rc, result, std | +
| 801. | +zerocopy v0.8.48 build-script (run) | +0.0s | ++ | + | simd | +
| 802. | +thiserror v2.0.18 build-script (run) | +0.0s | ++ | + | default, std | +
| 803. | +futures-core v0.3.32 | +0.0s | +0.0s (75%) | +0.0s (25%) | +alloc, default, std | +
| 804. | +zmij v1.0.21 build-script (run) | +0.0s | ++ | + | + |
| 805. | +clap v4.6.1 | +0.0s | +0.0s (75%) | +0.0s (25%) | +color, default, derive, env, error-context, help, std, suggestions, usage | +
| 806. | +camino v1.1.12 build-script (run) | +0.0s | ++ | + | serde, serde1 | +
| 807. | +native-tls v0.2.18 build-script (run) | +0.0s | ++ | + | default | +
| 808. | +foreign-types-shared v0.1.1 | +0.0s | +0.0s (75%) | +0.0s (25%) | ++ |
| 809. | +cpufeatures v0.2.17 | +0.0s | +0.0s (100%) | +0.0s (0%) | ++ |
| 810. | +libc v0.2.186 build-script (run) | +0.0s | ++ | + | default, std | +
| 811. | +serde_json v1.0.150 build-script | +0.0s | ++ | + | alloc, default, indexmap, preserve_order, raw_value, std | +
| 812. | +libc v0.2.186 build-script (run) | +0.0s | ++ | + | default, std | +
| 813. | +num-traits v0.2.19 build-script | +0.0s | ++ | + | default, i128, libm, std | +
| 814. | +futures-sink v0.3.32 | +0.0s | +0.0s (75%) | +0.0s (25%) | +alloc, default, std | +
| 815. | +crossbeam-utils v0.8.21 build-script (run) | +0.0s | ++ | + | default, std | +
| 816. | +num-bigint-dig v0.8.6 build-script (run) | +0.0s | ++ | + | i128, prime, rand, u64_digit, zeroize | +
| 817. | +serde_json v1.0.150 build-script (run) | +0.0s | ++ | + | alloc, default, indexmap, preserve_order, raw_value, std | +
| 818. | +mime_guess v2.0.5 build-script (run) | +0.0s | ++ | + | + |
| 819. | +equivalent v1.0.2 | +0.0s | +0.0s (67%) | +0.0s (33%) | ++ |
| 820. | +parking_lot_core v0.9.12 build-script (run) | +0.0s | ++ | + | + |
| 821. | +icu_properties_data v2.2.0 build-script (run) | +0.0s | ++ | + | + |
| 822. | +owo-colors v4.3.0 build-script (run) | +0.0s | ++ | + | + |
| 823. | +figment v0.10.19 build-script (run) | +0.0s | ++ | + | env, parking_lot, parse-value, pear, tempfile, test, toml | +
| 824. | +openssl v0.10.80 build-script (run) | +0.0s | ++ | + | default | +
| 825. | +bollard-buildkit-proto v0.7.0 build-script (run) | +0.0s | ++ | + | default, fetch, ureq | +
| 826. | +serde_json v1.0.150 build-script (run) | +0.0s | ++ | + | default, raw_value, std | +
| 827. | +object v0.37.3 build-script (run) | +0.0s | ++ | + | archive, coff, elf, macho, pe, read_core, unaligned, xcoff | +
| 828. | +num v0.4.3 | +0.0s | +0.0s (100%) | +0.0s (0%) | +default, num-bigint, std | +
| 829. | +rayon-core v1.13.0 build-script (run) | +0.0s | ++ | + | + |
| 830. | +zmij v1.0.21 build-script (run) | +0.0s | ++ | + | + |
| 831. | +tdyne-peer-id-registry v0.1.1 build-script (run) | +0.0s | ++ | + | + |
| 832. | +native-tls v0.2.18 build-script (run) | +0.0s | ++ | + | default | +
| 833. | +quote v1.0.45 build-script | +0.0s | ++ | + | default, proc-macro | +
| 834. | +num-bigint-dig v0.8.6 build-script (run) | +0.0s | ++ | + | i128, prime, rand, u64_digit, zeroize | +
| 835. | +serde v1.0.228 build-script (run) | +0.0s | ++ | + | alloc, default, derive, rc, serde_derive, std | +
| 836. | +unicode-ident v1.0.24 | +0.0s | +0.0s (100%) | +0.0s (0%) | ++ |
| 837. | +crossbeam-utils v0.8.21 build-script (run) | +0.0s | ++ | + | std | +
| 838. | +proc-macro2 v1.0.106 build-script (run) | +0.0s | ++ | + | default, proc-macro | +
| 839. | +serde v1.0.228 build-script (run) | +0.0s | ++ | + | alloc, default, derive, rc, serde_derive, std | +
| 840. | +rustls v0.23.40 build-script (run) | +0.0s | ++ | + | aws-lc-rs, aws_lc_rs, log, logging, ring, std, tls12 | +
| 841. | +zstd-safe v7.2.4 build-script (run) | +0.0s | ++ | + | std | +
| 842. | +lazy_static v1.5.0 | +0.0s | +0.0s (100%) | +0.0s (0%) | +spin, spin_no_std | +
| 843. | +serde_core v1.0.228 build-script (run) | +0.0s | ++ | + | alloc, rc, result, std | +
| 844. | +aws-lc-rs v1.17.0 build-script (run) | +0.0s | ++ | + | aws-lc-sys, prebuilt-nasm | +
| 845. | +cfg-if v1.0.4 | +0.0s | +0.0s (NaN%) | +0.0s (NaN%) | ++ |
| 846. | +pin-project-lite v0.2.17 | +0.0s | +0.0s (NaN%) | +0.0s (NaN%) | ++ |
| 847. | +cfg-if v1.0.4 | +0.0s | +0.0s (NaN%) | +0.0s (NaN%) | ++ |
| 848. | +scopeguard v1.2.0 | +0.0s | +0.0s (NaN%) | +0.0s (NaN%) | ++ |
| 849. | +shlex v1.3.0 | +0.0s | +0.0s (NaN%) | +0.0s (NaN%) | +default, std | +
| 850. | +equivalent v1.0.2 | +0.0s | +0.0s (NaN%) | +0.0s (NaN%) | ++ |