This repository has no description
2.1 kB
64 lines
1mod admission;
2mod cpu;
3mod disk;
4mod fsio;
5mod mem;
6mod slots;
7
8pub use admission::{
9 AdmitGuard, Burst, GlobalInflight, HostKey, HostPacer, LimitConfig, PeerPacer, PerPeerInflight,
10 PreAuthLimiter, RateLimit, RefillMicros, Refusal, SubjectKey, SubjectPacer,
11};
12pub use cpu::{Saturate, ThreadCount, gix_thread_limit, map_chunks, map_spans, saturate, threads};
13pub use disk::{
14 BelowFloor, DiskFloorBytes, DiskGovernor, DiskReservation, FreeBytes, ReserveBytes,
15 free_bytes as disk_free_bytes,
16};
17pub use fsio::{
18 FileMode, FsError, atomic_write, atomic_write_bytes, clear_staging, clear_stale, clear_temps,
19 fsync_path, staging_nonce,
20};
21pub use mem::{
22 AvailableBytes, BudgetSource, ChurnBytes, ConnectivityObjects, DecayMs, MemoryBudget,
23 MemoryHighBytes, PayloadBytes, WorkingSetBytes, advert_cache_bytes, available_bytes,
24 cache_shed_warranted, decay_warrants_apply, externalize_connectivity, ingest_admits,
25 ingest_admits_churn, ingest_base_budget, ingest_thread_limit, object_cache_bytes,
26 pack_cache_bytes, target_decay,
27};
28pub use slots::{PackSlots, ReceiveSlots, ResolveSlots, SlotPermit, Slots};
29
30#[derive(Clone, Copy, Debug, Default)]
31pub struct Ceilings {
32 pub max_threads: Option<ThreadCount>,
33 pub max_memory: Option<MemoryBudget>,
34}
35
36#[derive(Clone, Copy, Debug)]
37pub struct Report {
38 pub threads: ThreadCount,
39 pub memory: Option<MemoryBudget>,
40 pub memory_source: BudgetSource,
41 pub memory_high_bytes: Option<MemoryHighBytes>,
42}
43
44pub fn init(ceilings: Ceilings) -> Report {
45 let threads = cpu::install(
46 ceilings
47 .max_threads
48 .unwrap_or_else(|| ThreadCount::new(default_threads())),
49 );
50 let (memory, memory_source) = mem::install(ceilings.max_memory);
51 let memory_high_bytes = mem::try_set_memory_high();
52 Report {
53 threads,
54 memory,
55 memory_source,
56 memory_high_bytes,
57 }
58}
59
60fn default_threads() -> usize {
61 std::thread::available_parallelism()
62 .map(std::num::NonZeroUsize::get)
63 .unwrap_or(1)
64}