Skip to content

Commit

Permalink
#31 Suffix cgroup names with DEmOS process PID to allow running multi…
Browse files Browse the repository at this point in the history
…ple instances in parallel

TODO: cleanup_crash.sh
  • Loading branch information
MatejKafka committed Nov 13, 2022
1 parent f6d6435 commit d8a8f1a
Showing 1 changed file with 7 additions and 4 deletions.
11 changes: 7 additions & 4 deletions src/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@

using namespace std;

static string opt_demos_cg_name = "demos";
static const string CGROUP_NAME_PREFIX = "demos-";

static string pluralize(unsigned long count, const string &noun)
{
Expand Down Expand Up @@ -61,7 +61,7 @@ static void print_help()
" <POWER_POLICY> has the following form: <NAME>[:ARG1[,ARG2[,...]]]; \n"
" if multiple instances of DEmOS are running in parallel, this parameter \n"
" must not be passed to more than a single one\n"
" [-g <CGROUP_NAME>] name of root cgroups, default \"" << opt_demos_cg_name << "\"\n"
" [-g <CGROUP_NAME>] name of root cgroups, default \"" << CGROUP_NAME_PREFIX << "<process_pid>\"\n"
" NOTE: this name must be unique for each running instance of DEmOS\n"
" [-m <WINDOW_MESSAGE>] print WINDOW_MESSAGE to stdout at the beginning of each window;\n"
" this may be useful for external synchronization with scheduler windows\n"
Expand Down Expand Up @@ -90,6 +90,9 @@ int main(int argc, char *argv[])
bool dump_config = false;
bool systemd_run = false;
std::optional<std::chrono::milliseconds> scheduler_timeout{};
// to support multiple instances of DEmOS running at once (primarily for testing),
// default root cgroup name includes the scheduler process PID
string root_cgroup_name = CGROUP_NAME_PREFIX + to_string(getpid());

while ((opt = getopt(argc, argv, "c:C:p:g:m:M:t:sdhV")) != -1) {
switch (opt) {
Expand All @@ -103,7 +106,7 @@ int main(int argc, char *argv[])
power_policy_name = optarg;
break;
case 'g': // custom root cgroup name
opt_demos_cg_name = optarg;
root_cgroup_name = optarg;
break;
case 'm': // window start sync message
window_sync_message = optarg;
Expand Down Expand Up @@ -174,7 +177,7 @@ int main(int argc, char *argv[])
logger->trace("Creating top-level cgroups");
Cgroup unified_root, freezer_root, cpuset_root;
if (!cgroup_setup::create_toplevel_cgroups(
unified_root, freezer_root, cpuset_root, opt_demos_cg_name)) {
unified_root, freezer_root, cpuset_root, root_cgroup_name)) {
// cgroup creation failed
return 1;
}
Expand Down

0 comments on commit d8a8f1a

Please sign in to comment.