forks/sorcery

git clone https://git.gae.moe/forks/sorcery

Charlotte Somperf: use mimalloc instead of the musl allocator5e5b89f

main
2.1 KiB73 linesraw
1use std::path::PathBuf;
2use std::time::Duration;
3
4use anyhow::Result;
5use clap::Parser;
6use sorcery::daemon::{self, Config};
7
8// The static musl allocator serializes allocation-heavy rayon workers
9// badly (highlighting llama.cpp took ~13x longer); mimalloc scales.
10#[global_allocator]
11static GLOBAL: mimalloc::MiMalloc = mimalloc::MiMalloc;
12
13#[derive(Parser)]
14struct Args {
15    #[arg(long, env = "SORCERY_REPOSITORIES", value_name = "DIR")]
16    repositories: PathBuf,
17    #[arg(long, env = "SORCERY_CACHE", value_name = "DIR")]
18    cache: PathBuf,
19    #[arg(long, env = "SORCERY_SOCKET", value_name = "PATH")]
20    socket: PathBuf,
21    #[arg(long, env = "SORCERY_INSTANCE_NAME", value_name = "NAME")]
22    instance_name: String,
23    #[arg(
24        long,
25        env = "SORCERY_INTERNAL_PREFIX",
26        default_value = "/_sorcery",
27        value_name = "PATH"
28    )]
29    internal_prefix: String,
30    #[arg(
31        long,
32        env = "SORCERY_GIT_INTERNAL_PREFIX",
33        default_value = "/_sorcery-git",
34        value_name = "PATH"
35    )]
36    git_internal_prefix: String,
37    #[arg(
38        long,
39        env = "SORCERY_CHECK_INTERVAL",
40        default_value_t = 2,
41        value_name = "SECONDS"
42    )]
43    check_interval: u64,
44    #[arg(
45        long,
46        env = "SORCERY_MAX_GIT_PROCESSES",
47        default_value_t = 8,
48        value_name = "COUNT"
49    )]
50    max_git_processes: usize,
51    #[arg(long, env = "SORCERY_CONTROL_SOCKET", value_name = "PATH")]
52    control_socket: Option<PathBuf>,
53    #[arg(long, env = "SORCERY_CLONE_URL_BASE", value_name = "URL")]
54    clone_url_base: Option<String>,
55}
56
57#[tokio::main]
58async fn main() -> Result<()> {
59    let args = Args::parse();
60    daemon::run(Config {
61        repositories: args.repositories,
62        cache: args.cache,
63        socket: args.socket,
64        instance_name: args.instance_name,
65        internal_prefix: args.internal_prefix,
66        git_internal_prefix: args.git_internal_prefix,
67        check_interval: Duration::from_secs(args.check_interval),
68        max_git_processes: args.max_git_processes,
69        control_socket: args.control_socket,
70        clone_url_base: args.clone_url_base,
71    })
72    .await
73}