From a7113bb16304b751aedd6d438f6c2c20bf7b5979 Mon Sep 17 00:00:00 2001 From: Antonio SJ Musumeci Date: Wed, 25 Jan 2023 23:38:31 -0500 Subject: [PATCH] Allow setting of scheduling priority --- README.md | 5 ++++- src/config.cpp | 3 +++ src/config.hpp | 2 ++ src/mergerfs.cpp | 8 +++----- 4 files changed, 12 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 84b8bf79..14173df4 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ % mergerfs(1) mergerfs user manual % Antonio SJ Musumeci -% 2023-01-24 +% 2023-01-25 # NAME @@ -203,6 +203,9 @@ These options are the same regardless of whether you use them with the `mergerfs `read-thread-count` refers to the number of threads reading FUSE messages which are dispatched to process threads. -1 means disabled otherwise acts like `read-thread-count`. (default: -1) +* **scheduling-priority=INT**: Set mergerfs' scheduling + priority. Valid values range from -20 to 19. See `setpriority` man + page for more details. (default: -10) * **fsname=STR**: Sets the name of the filesystem as seen in **mount**, **df**, etc. Defaults to a list of the source paths concatenated together with the longest common prefix removed. diff --git a/src/config.cpp b/src/config.cpp index 93f9000d..2825a82b 100644 --- a/src/config.cpp +++ b/src/config.cpp @@ -64,6 +64,7 @@ namespace l IFERT("readdirplus"); IFERT("threads"); IFERT("version"); + IFERT("scheduling-priority"); return false; } @@ -103,6 +104,7 @@ Config::Config() readdir(ReadDir::ENUM::POSIX), readdirplus(false), rename_exdev(RenameEXDEV::ENUM::PASSTHROUGH), + scheduling_priority(-10), security_capability(true), srcmounts(branches), statfs(StatFS::ENUM::BASE), @@ -171,6 +173,7 @@ Config::Config() // _map["readdir"] = &readdir; _map["readdirplus"] = &readdirplus; _map["rename-exdev"] = &rename_exdev; + _map["scheduling-priority"] = &scheduling_priority; _map["security_capability"] = &security_capability; _map["srcmounts"] = &srcmounts; _map["statfs"] = &statfs; diff --git a/src/config.hpp b/src/config.hpp index 2053d19b..d113a21e 100644 --- a/src/config.hpp +++ b/src/config.hpp @@ -133,6 +133,7 @@ public: ReadDir readdir; ConfigBOOL readdirplus; RenameEXDEV rename_exdev; + ConfigINT scheduling_priority; ConfigBOOL security_capability; SrcMounts srcmounts; StatFS statfs; @@ -145,6 +146,7 @@ public: ConfigBOOL writeback_cache; XAttr xattr; + public: friend std::ostream& operator<<(std::ostream &s, const Config &c); diff --git a/src/mergerfs.cpp b/src/mergerfs.cpp index 52778bf4..eb84bc3a 100644 --- a/src/mergerfs.cpp +++ b/src/mergerfs.cpp @@ -139,15 +139,13 @@ namespace l static void - setup_resources(void) + setup_resources(const int scheduling_priority_) { - const int prio = -10; - std::srand(time(NULL)); resources::reset_umask(); resources::maxout_rlimit_nofile(); resources::maxout_rlimit_fsize(); - resources::setpriority(prio); + resources::setpriority(scheduling_priority_); } static @@ -204,7 +202,7 @@ namespace l if(cfg->branches_mount_timeout > 0) l::wait_for_mount(cfg); - l::setup_resources(); + l::setup_resources(cfg->scheduling_priority); l::get_fuse_operations(ops,cfg->nullrw); return fuse_main(args.argc,