Skip to content

Commit

Permalink
Added support for the job memory limit (#29)
Browse files Browse the repository at this point in the history
  • Loading branch information
lowleveldesign committed Oct 17, 2021
1 parent 0ec0584 commit 7a98c96
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 10 deletions.
24 changes: 14 additions & 10 deletions ProcessGovernor/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,8 @@ public static int Main(string[] args)
{
{ "m|maxmem=", "Max committed memory usage in bytes (accepted suffixes: K, M, or G).",
v => { session.MaxProcessMemory = ParseMemoryString(v); } },
{ "maxjobmem=", "Max committed memory usage for all the processes in the job (accepted suffixes: K, M, or G).",
v => { session.MaxJobMemory = ParseMemoryString(v); } },
{ "maxws=", "Max working set size in bytes (accepted suffixes: K, M, or G). Must be set with minws.",
v => { session.MaxWorkingSetSize = ParseMemoryString(v); } },
{ "minws=", "Min working set size in bytes (accepted suffixes: K, M, or G). Must be set with maxws.",
Expand Down Expand Up @@ -333,25 +335,27 @@ static void ShowHelp(OptionSet p)

static void ShowLimits(SessionSettings session)
{
Console.WriteLine("CPU affinity mask: {0}", session.CpuAffinityMask != 0 ?
Console.WriteLine("CPU affinity mask: {0}", session.CpuAffinityMask != 0 ?
$"0x{session.CpuAffinityMask:X}" : "(not set)");
Console.WriteLine("Max CPU rate: {0}", session.CpuMaxRate > 0 ?
Console.WriteLine("Max CPU rate: {0}", session.CpuMaxRate > 0 ?
$"{session.CpuMaxRate}%" : "(not set)");
Console.WriteLine("Max bandwidth (B): {0}", session.MaxBandwidth > 0 ?
Console.WriteLine("Max bandwidth (B): {0}", session.MaxBandwidth > 0 ?
$"{(session.MaxBandwidth):#,0}" : "(not set)");
Console.WriteLine("Maximum committed memory (MB): {0}", session.MaxProcessMemory > 0 ?
Console.WriteLine("Maximum committed memory (MB): {0}", session.MaxProcessMemory > 0 ?
$"{(session.MaxProcessMemory / 1048576):0,0}" : "(not set)");
Console.WriteLine("Minimum WS memory (MB): {0}", session.MinWorkingSetSize > 0 ?
Console.WriteLine("Maximum job committed memory (MB): {0}", session.MaxJobMemory > 0 ?
$"{(session.MaxJobMemory / 1048576):0,0}" : "(not set)");
Console.WriteLine("Minimum WS memory (MB): {0}", session.MinWorkingSetSize > 0 ?
$"{(session.MinWorkingSetSize / 1048576):0,0}" : "(not set)");
Console.WriteLine("Maximum WS memory (MB): {0}", session.MaxWorkingSetSize > 0 ?
Console.WriteLine("Maximum WS memory (MB): {0}", session.MaxWorkingSetSize > 0 ?
$"{(session.MaxWorkingSetSize / 1048576):0,0}" : "(not set)");
Console.WriteLine("Preferred NUMA node: {0}", session.NumaNode != 0xffff ?
Console.WriteLine("Preferred NUMA node: {0}", session.NumaNode != 0xffff ?
$"{session.NumaNode}" : "(not set)");
Console.WriteLine("Process user-time execution limit (ms): {0}", session.ProcessUserTimeLimitInMilliseconds > 0 ?
Console.WriteLine("Process user-time execution limit (ms): {0}", session.ProcessUserTimeLimitInMilliseconds > 0 ?
$"{session.ProcessUserTimeLimitInMilliseconds:0,0}" : "(not set)");
Console.WriteLine("Job user-time execution limit (ms): {0}", session.JobUserTimeLimitInMilliseconds > 0 ?
Console.WriteLine("Job user-time execution limit (ms): {0}", session.JobUserTimeLimitInMilliseconds > 0 ?
$"{session.JobUserTimeLimitInMilliseconds:0,0}" : "(not set)");
Console.WriteLine("Clock-time execution limit (ms): {0}", session.ClockTimeLimitInMilliseconds > 0 ?
Console.WriteLine("Clock-time execution limit (ms): {0}", session.ClockTimeLimitInMilliseconds > 0 ?
$"{session.ClockTimeLimitInMilliseconds:0,0}" : "(not set)");

if (session.PropagateOnChildProcesses)
Expand Down
2 changes: 2 additions & 0 deletions ProcessGovernor/SessionSettings.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@ public sealed class SessionSettings
new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);

public ulong MaxProcessMemory { get; set; }

public ulong MaxJobMemory { get; set; }

public ulong MaxWorkingSetSize { get; set; }

Expand Down
7 changes: 7 additions & 0 deletions ProcessGovernor/Win32JobModule.cs
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,13 @@ private static unsafe void SetBasicLimits(Win32Job job, SessionSettings session,
flags |= JOB_OBJECT_LIMIT.JOB_OBJECT_LIMIT_PROCESS_MEMORY;
limitInfo.ProcessMemoryLimit = (UIntPtr)session.MaxProcessMemory;
}

if (session.MaxJobMemory > 0)
{
flags |= JOB_OBJECT_LIMIT.JOB_OBJECT_LIMIT_JOB_MEMORY;
limitInfo.JobMemoryLimit = (UIntPtr)session.MaxJobMemory;
}

if (session.MaxWorkingSetSize > 0)
{
flags |= JOB_OBJECT_LIMIT.JOB_OBJECT_LIMIT_WORKINGSET;
Expand Down

0 comments on commit 7a98c96

Please sign in to comment.