| //! Shutup clippy |
| |
| type KrateSet = std::collections::BTreeSet<String>; |
| |
| fn main() { |
| let rt = tokio::runtime::Runtime::new().unwrap(); |
| let _rt = rt.enter(); |
| |
| let bdir = tempfile::tempdir().unwrap(); |
| let adir = tempfile::tempdir().unwrap(); |
| |
| // The setup of the indices is the same, and is not interesting to measure |
| let bindex = { |
| let loc = tame_index::IndexLocation { |
| url: tame_index::IndexUrl::CratesIoSparse, |
| root: tame_index::IndexPath::Exact(bdir.path().to_owned().try_into().unwrap()), |
| }; |
| |
| tame_index::index::RemoteSparseIndex::new( |
| tame_index::SparseIndex::new(loc).unwrap(), |
| tame_index::external::reqwest::blocking::ClientBuilder::new() |
| .http2_prior_knowledge() |
| .build() |
| .unwrap(), |
| ) |
| }; |
| |
| let aindex = { |
| let loc = tame_index::IndexLocation { |
| url: tame_index::IndexUrl::CratesIoSparse, |
| root: tame_index::IndexPath::Exact(adir.path().to_owned().try_into().unwrap()), |
| }; |
| |
| tame_index::index::AsyncRemoteSparseIndex::new( |
| tame_index::SparseIndex::new(loc).unwrap(), |
| tame_index::external::reqwest::ClientBuilder::new() |
| .http2_prior_knowledge() |
| .build() |
| .unwrap(), |
| ) |
| }; |
| |
| let ks: KrateSet = KRATES.iter().map(|s| (*s).to_owned()).collect(); |
| |
| let label = "sparse_fetch"; |
| let cfg = tiny_bench::BenchmarkConfig { |
| num_samples: 10, |
| ..Default::default() |
| }; |
| tiny_bench::bench_with_setup_configuration_labeled( |
| label, |
| &cfg, |
| || std::fs::remove_dir_all(bdir.path()), |
| |_| blocking(&bindex, &ks), |
| ); |
| tiny_bench::bench_with_setup_configuration_labeled( |
| label, |
| &cfg, |
| || std::fs::remove_dir_all(adir.path()), |
| |_| asunc(&aindex, &ks), |
| ); |
| } |
| |
| fn blocking(rsi: &tame_index::index::RemoteSparseIndex, krates: &KrateSet) { |
| let krates = rsi.krates(krates.clone(), true); |
| |
| for (krate, res) in krates { |
| if let Err(err) = res { |
| panic!("failed to download '{krate}': {err}"); |
| } |
| } |
| } |
| |
| fn asunc(rsi: &tame_index::index::AsyncRemoteSparseIndex, krates: &KrateSet) { |
| let krates = rsi.krates_blocking(krates.clone(), true, None).unwrap(); |
| |
| for (krate, res) in krates { |
| if let Err(err) = res { |
| panic!("failed to download '{krate}': {err}"); |
| } |
| } |
| } |
| |
| /// The krates we want to sync. This is a "large" number to actually surpass |
| /// the core count of whatever machine the benchmarks are run on as well as |
| /// actually sending enough requests to see if there is a meaningful difference |
| /// between parallel + blocking and async |
| const KRATES: &[&str] = &[ |
| "ab_glyph", |
| "ab_glyph_rasterizer", |
| "accesskit", |
| "addr2line", |
| "adler", |
| "aead", |
| "aes", |
| "aes-gcm", |
| "ahash", |
| "aho-corasick", |
| "alsa", |
| "alsa-sys", |
| "ambient-authority", |
| "android-activity", |
| "android-properties", |
| "anstream", |
| "anstyle", |
| "anstyle-parse", |
| "anstyle-query", |
| "anstyle-wincon", |
| "anyhow", |
| "anymap2", |
| "app_dirs2", |
| "arbitrary", |
| "array-init", |
| "arrayvec", |
| "ash", |
| "ash-molten", |
| "ash-window", |
| "assert-json-diff", |
| "async-backtrace", |
| "async-backtrace-attributes", |
| "async-channel", |
| "async-compression", |
| "async-io", |
| "async-lock", |
| "async-recursion", |
| "async-stream", |
| "async-stream-impl", |
| "async-trait", |
| "atk-sys", |
| "atomic_refcell", |
| "autocfg", |
| "autometrics", |
| "autometrics-macros", |
| "axum", |
| "axum-core", |
| "axum-extra", |
| "axum-macros", |
| "backtrace", |
| "base-x", |
| "base64", |
| "bb8", |
| "bb8-postgres", |
| "bincode", |
| "bindgen", |
| "bit-set", |
| "bit-vec", |
| "bitflags", |
| "bitvec", |
| "block", |
| "block-buffer", |
| "block-sys", |
| "block2", |
| "bstr", |
| "bumpalo", |
| "bytemuck", |
| "bytemuck_derive", |
| "byteorder", |
| "bytes", |
| "bytes-varint", |
| "cairo-sys-rs", |
| "calloop", |
| "camino", |
| "cap-fs-ext", |
| "cap-primitives", |
| "cap-rand", |
| "cap-std", |
| "cap-time-ext", |
| "cargo-manifest", |
| "cargo-platform", |
| "cargo_metadata", |
| "cc", |
| "cervo-asset", |
| "cervo-core", |
| "cervo-nnef", |
| "cervo-onnx", |
| "cervo-runtime", |
| "cesu8", |
| "cexpr", |
| "cfg-expr", |
| "cfg-if", |
| "cfg_aliases", |
| "cint", |
| "cipher", |
| "clang-sys", |
| "clap", |
| "clap_builder", |
| "clap_derive", |
| "clap_lex", |
| "clipboard-win", |
| "cocoa", |
| "cocoa-foundation", |
| "color_quant", |
| "colorchoice", |
| "combine", |
| "concurrent-queue", |
| "console", |
| "console-api", |
| "console-subscriber", |
| "cookie", |
| "copypasta", |
| "core-foundation", |
| "core-foundation-sys", |
| "core-graphics", |
| "core-graphics-types", |
| "coreaudio-rs", |
| "coreaudio-sys", |
| "coremidi", |
| "coremidi-sys", |
| "cpp_demangle", |
| "cpufeatures", |
| "cranelift-bforest", |
| "cranelift-codegen", |
| "cranelift-codegen-meta", |
| "cranelift-codegen-shared", |
| "cranelift-control", |
| "cranelift-entity", |
| "cranelift-frontend", |
| "cranelift-isle", |
| "cranelift-native", |
| "cranelift-wasm", |
| "crash-context", |
| "crash-handler", |
| "crc32fast", |
| "crossbeam-channel", |
| "crossbeam-deque", |
| "crossbeam-epoch", |
| "crossbeam-utils", |
| "crunchy", |
| "crypto-common", |
| "ctr", |
| "custom_debug", |
| "custom_debug_derive", |
| "darling", |
| "darling_core", |
| "darling_macro", |
| "dashmap", |
| "dasp_sample", |
| "data-encoding", |
| "data-encoding-macro", |
| "data-encoding-macro-internal", |
| "data-url", |
| "debugid", |
| "derive-new", |
| "derive_arbitrary", |
| "derive_builder", |
| "derive_builder_core", |
| "derive_builder_macro", |
| "derive_more", |
| "digest", |
| "dirs", |
| "dirs-sys", |
| "discord-sdk", |
| "dispatch", |
| "dmsort", |
| "doc-comment", |
| "dolly", |
| "downcast-rs", |
| "dyn-clone", |
| "ecolor", |
| "educe", |
| "egui", |
| "egui-winit", |
| "either", |
| "emath", |
| "embed-resource", |
| "encode_unicode", |
| "endian-type", |
| "enum-ordinalize", |
| "enum-primitive-derive", |
| "enumn", |
| "env_logger", |
| "epaint", |
| "errno", |
| "errno-dragonfly", |
| "euclid", |
| "event-listener", |
| "fallible-iterator", |
| "fastrand", |
| "fd-lock", |
| "fdeflate", |
| "filetime", |
| "findshlibs", |
| "fixedbitset", |
| "fixedvec", |
| "flate2", |
| "float-cmp", |
| "float_eq", |
| "float_next_after", |
| "fnv", |
| "foreign-types", |
| "foreign-types-shared", |
| "form_urlencoded", |
| "fs-set-times", |
| "fs2", |
| "fsevent-sys", |
| "funty", |
| "futures", |
| "futures-channel", |
| "futures-core", |
| "futures-executor", |
| "futures-io", |
| "futures-lite", |
| "futures-macro", |
| "futures-sink", |
| "futures-task", |
| "futures-util", |
| "fxhash", |
| "fxprof-processed-profile", |
| "gdk-pixbuf-sys", |
| "gdk-sys", |
| "generator", |
| "generic-array", |
| "gethostname", |
| "getrandom", |
| "ghash", |
| "gimli", |
| "gio-sys", |
| "glam", |
| "glib-sys", |
| "glob", |
| "gltf", |
| "gltf-derive", |
| "gltf-json", |
| "gobject-sys", |
| "goblin", |
| "google-cloud-gax", |
| "google-cloud-googleapis", |
| "google-cloud-pubsub", |
| "google-cloud-token", |
| "gpu-allocator", |
| "gtk-sys", |
| "h2", |
| "half", |
| "hashbag", |
| "hashbrown", |
| "hdrhistogram", |
| "headers", |
| "headers-core", |
| "heck", |
| "hermit-abi", |
| "hex", |
| "highway", |
| "hmac", |
| "home", |
| "hound", |
| "http", |
| "http-body", |
| "http-range-header", |
| "httparse", |
| "httpdate", |
| "humantime", |
| "hyper", |
| "hyper-rustls", |
| "hyper-timeout", |
| "ident_case", |
| "idna", |
| "image", |
| "include_dir", |
| "include_dir_macros", |
| "indexmap", |
| "inflections", |
| "inotify", |
| "inotify-sys", |
| "inout", |
| "insta", |
| "instant", |
| "io-extras", |
| "io-kit-sys", |
| "io-lifetimes", |
| "ipnet", |
| "iri-string", |
| "is-terminal", |
| "itertools", |
| "itoa", |
| "ittapi", |
| "ittapi-sys", |
| "jni", |
| "jni-sys", |
| "jobserver", |
| "js-sys", |
| "jsonwebtoken", |
| "kqueue", |
| "kqueue-sys", |
| "kstring", |
| "lazy-bytes-cast", |
| "lazy_static", |
| "lazycell", |
| "leb128", |
| "lewton", |
| "libc", |
| "libloading", |
| "libm", |
| "libmimalloc-sys", |
| "libudev-sys", |
| "line-wrap", |
| "linked-hash-map", |
| "linux-raw-sys", |
| "liquid", |
| "liquid-core", |
| "liquid-derive", |
| "liquid-lib", |
| "lock_api", |
| "log", |
| "loom", |
| "lyon_geom", |
| "lyon_path", |
| "lyon_tessellation", |
| "lz4_flex", |
| "mach", |
| "mach2", |
| "malloc_buf", |
| "maplit", |
| "mapr", |
| "matchers", |
| "matchit", |
| "matrixmultiply", |
| "maybe-owned", |
| "md-5", |
| "memchr", |
| "memfd", |
| "memmap2", |
| "memoffset", |
| "metal", |
| "metrics", |
| "metrics-exporter-prometheus", |
| "metrics-macros", |
| "metrics-util", |
| "mimalloc", |
| "mime", |
| "minidump-common", |
| "minidump-writer", |
| "minidumper", |
| "minimal-lexical", |
| "miniz_oxide", |
| "mio", |
| "mockito", |
| "multibase", |
| "multimap", |
| "named_pipe", |
| "natord", |
| "ndarray", |
| "ndk", |
| "ndk-context", |
| "ndk-sys", |
| "nibble_vec", |
| "nix", |
| "no-std-compat", |
| "nohash-hasher", |
| "nom", |
| "normpath", |
| "notify", |
| "ntapi", |
| "nu-ansi-term", |
| "num-bigint", |
| "num-complex", |
| "num-derive", |
| "num-integer", |
| "num-rational", |
| "num-traits", |
| "num_cpus", |
| "num_enum", |
| "num_enum_derive", |
| "objc", |
| "objc-foundation", |
| "objc-sys", |
| "objc2", |
| "objc2-encode", |
| "objc_exception", |
| "objc_id", |
| "object", |
| "oboe", |
| "oboe-sys", |
| "ogg", |
| "once_cell", |
| "opaque-debug", |
| "openapiv3", |
| "opener", |
| "openssl-probe", |
| "opentelemetry", |
| "opentelemetry-http", |
| "opentelemetry-otlp", |
| "opentelemetry-proto", |
| "opentelemetry-semantic-conventions", |
| "opentelemetry-zipkin", |
| "opentelemetry_api", |
| "opentelemetry_sdk", |
| "orbclient", |
| "ordered-float", |
| "os_info", |
| "overload", |
| "owned_ttf_parser", |
| "pango-sys", |
| "paranoid-android", |
| "parking", |
| "parking_lot", |
| "parking_lot_core", |
| "paste", |
| "path_abs", |
| "peeking_take_while", |
| "pem", |
| "percent-encoding", |
| "perchance", |
| "pest", |
| "pest_derive", |
| "pest_generator", |
| "pest_meta", |
| "petgraph", |
| "phf", |
| "phf_shared", |
| "physx", |
| "physx-sys", |
| "pin-project", |
| "pin-project-internal", |
| "pin-project-lite", |
| "pin-utils", |
| "pkg-config", |
| "plain", |
| "plist", |
| "png", |
| "polling", |
| "polyval", |
| "portable-atomic", |
| "postgres-protocol", |
| "postgres-types", |
| "pprof", |
| "ppv-lite86", |
| "presser", |
| "prettyplease", |
| "proc-macro-crate", |
| "proc-macro-error", |
| "proc-macro-error-attr", |
| "proc-macro2", |
| "prost", |
| "prost-build", |
| "prost-derive", |
| "prost-types", |
| "psm", |
| "public-api", |
| "puffin", |
| "puffin_egui", |
| "puffin_http", |
| "quanta", |
| "quick-xml", |
| "quickcheck", |
| "quickcheck_macros", |
| "quote", |
| "radium", |
| "radix_trie", |
| "rand", |
| "rand_chacha", |
| "rand_core", |
| "rand_distr", |
| "range-map", |
| "raw-cpuid", |
| "raw-window-handle", |
| "raw-window-metal", |
| "rawpointer", |
| "rayon", |
| "rayon-core", |
| "redis-async", |
| "redox_syscall", |
| "redox_users", |
| "regalloc2", |
| "regex", |
| "regex-automata", |
| "regex-syntax", |
| "ring", |
| "ron", |
| "rspirv", |
| "rspirv-reflect", |
| "rustc-demangle", |
| "rustc-hash", |
| "rustc_version", |
| "rustdoc-json", |
| "rustdoc-types", |
| "rustix", |
| "rustls", |
| "rustls-native-certs", |
| "rustls-pemfile", |
| "rustls-webpki", |
| "rustversion", |
| "rymder", |
| "ryu", |
| "sadness-generator", |
| "safemem", |
| "same-file", |
| "scan_fmt", |
| "schannel", |
| "schemars", |
| "schemars_derive", |
| "scoped-tls", |
| "scopeguard", |
| "scroll", |
| "scroll_derive", |
| "sct", |
| "security-framework", |
| "security-framework-sys", |
| "self_cell", |
| "semver", |
| "sentry-types", |
| "serde", |
| "serde_derive", |
| "serde_derive_internals", |
| "serde_json", |
| "serde_path_to_error", |
| "serde_qs", |
| "serde_repr", |
| "serde_spanned", |
| "serde_urlencoded", |
| "serde_yaml", |
| "serial_test", |
| "serial_test_derive", |
| "sha1", |
| "sha2", |
| "sharded-slab", |
| "shellexpand", |
| "shlex", |
| "signal-hook", |
| "signal-hook-registry", |
| "simd-adler32", |
| "similar", |
| "simple_asn1", |
| "siphasher", |
| "sketches-ddsketch", |
| "slab", |
| "sled", |
| "slice-group-by", |
| "slotmap", |
| "smallvec", |
| "smart-default", |
| "socket2", |
| "spez", |
| "spin", |
| "spirv", |
| "spirv-std", |
| "spirv-std-macros", |
| "spirv-std-types", |
| "sptr", |
| "stable-vec", |
| "stable_deref_trait", |
| "static_assertions", |
| "std_prelude", |
| "stfu8", |
| "string-interner", |
| "stringprep", |
| "strsim", |
| "strum", |
| "strum_macros", |
| "subtle", |
| "superluminal-perf", |
| "superluminal-perf-sys", |
| "symbolic-common", |
| "symbolic-debuginfo", |
| "symbolic-demangle", |
| "syn", |
| "sync_wrapper", |
| "synstructure", |
| "sysinfo", |
| "system-deps", |
| "system-interface", |
| "tame-gcs", |
| "tame-oauth", |
| "tame-oidc", |
| "tame-webpurify", |
| "tap", |
| "tar", |
| "target-lexicon", |
| "tempfile", |
| "thiserror", |
| "thiserror-impl", |
| "thread_local", |
| "time", |
| "time-core", |
| "time-macros", |
| "tiny-bench", |
| "tinyvec", |
| "tinyvec_macros", |
| "tokio", |
| "tokio-io-timeout", |
| "tokio-macros", |
| "tokio-postgres", |
| "tokio-retry", |
| "tokio-rustls", |
| "tokio-stream", |
| "tokio-test", |
| "tokio-tungstenite", |
| "tokio-util", |
| "toml", |
| "toml_datetime", |
| "toml_edit", |
| "tonic", |
| "tower", |
| "tower-http", |
| "tower-layer", |
| "tower-service", |
| "tracing", |
| "tracing-appender", |
| "tracing-attributes", |
| "tracing-core", |
| "tracing-futures", |
| "tracing-log", |
| "tracing-logfmt", |
| "tracing-opentelemetry", |
| "tracing-subscriber", |
| "tract-core", |
| "tract-data", |
| "tract-hir", |
| "tract-nnef", |
| "tract-onnx", |
| "tract-onnx-opl", |
| "tracy-client", |
| "tracy-client-sys", |
| "try-lock", |
| "tryhard", |
| "ttf-parser", |
| "tungstenite", |
| "twox-hash", |
| "typed-builder", |
| "typenum", |
| "ucd-trie", |
| "uds", |
| "uname", |
| "unicode-bidi", |
| "unicode-ident", |
| "unicode-normalization", |
| "unicode-segmentation", |
| "unicode-xid", |
| "universal-hash", |
| "unsafe-libyaml", |
| "untrusted", |
| "url", |
| "urlencoding", |
| "utf-8", |
| "utf8parse", |
| "uuid", |
| "valuable", |
| "vec1", |
| "vec_map", |
| "version-compare", |
| "version_check", |
| "vswhom", |
| "vswhom-sys", |
| "waker-fn", |
| "walkdir", |
| "want", |
| "wasi", |
| "wasi-cap-std-sync", |
| "wasi-common", |
| "wasm-bindgen", |
| "wasm-bindgen-backend", |
| "wasm-bindgen-futures", |
| "wasm-bindgen-macro", |
| "wasm-bindgen-macro-support", |
| "wasm-bindgen-shared", |
| "wasmbin", |
| "wasmbin-derive", |
| "wasmparser", |
| "wasmtime", |
| "wasmtime-asm-macros", |
| "wasmtime-cranelift", |
| "wasmtime-cranelift-shared", |
| "wasmtime-environ", |
| "wasmtime-jit", |
| "wasmtime-jit-debug", |
| "wasmtime-jit-icache-coherence", |
| "wasmtime-runtime", |
| "wasmtime-types", |
| "wasmtime-wasi", |
| "wast", |
| "web-sys", |
| "webbrowser", |
| "webpki-roots", |
| "which", |
| "wiggle", |
| "wiggle-generate", |
| "wiggle-macro", |
| "winapi", |
| "winapi-i686-pc-windows-gnu", |
| "winapi-util", |
| "winapi-wsapoll", |
| "winapi-x86_64-pc-windows-gnu", |
| "windows", |
| "windows-core", |
| "windows-sys", |
| "windows-targets", |
| "windows_aarch64_gnullvm", |
| "windows_aarch64_msvc", |
| "windows_i686_gnu", |
| "windows_i686_msvc", |
| "windows_x86_64_gnu", |
| "windows_x86_64_gnullvm", |
| "windows_x86_64_msvc", |
| "winnow", |
| "winreg", |
| "winx", |
| "witx", |
| "wyz", |
| "x11-clipboard", |
| "x11-dl", |
| "x11rb", |
| "x11rb-protocol", |
| "xattr", |
| "xdg", |
| "yaml-rust", |
| "zip", |
| "zstd", |
| "zstd-safe", |
| "zstd-sys", |
| ]; |