public void Show_Raw_Process_Usage() { if (CrossInfo.ThePlatform == CrossInfo.Platform.Windows) { Console.WriteLine($"LinuxResourceUsageReader is not supported on platform {CrossInfo.ThePlatform}"); return; } var resources = LinuxResourceUsageInterop.GetRawUsageResources(LinuxResourceUsageInterop.RUSAGE_SELF); Console.WriteLine($"GetRawUsageResources(RUSAGE_SELF):{Environment.NewLine}{AsString(resources)}"); }
private static unsafe CpuUsage?GetLinuxCpuUsageByScope(int scope) { if (IntPtr.Size == 4) { int *rawResourceUsage = stackalloc int[RESOURCE_USAGE_FIELDS_COUNT]; int result = LinuxResourceUsageInterop.getrusage_heapless(scope, new IntPtr(rawResourceUsage)); if (result != 0) { return(null); } return(new CpuUsage() { UserUsage = new TimeValue() { Seconds = *rawResourceUsage, MicroSeconds = rawResourceUsage[1] }, KernelUsage = new TimeValue() { Seconds = rawResourceUsage[2], MicroSeconds = rawResourceUsage[3] }, }); } else { long *rawResourceUsage = stackalloc long[RESOURCE_USAGE_FIELDS_COUNT]; int result = LinuxResourceUsageInterop.getrusage_heapless(scope, new IntPtr(rawResourceUsage)); if (result != 0) { return(null); } // microseconds are 4 bytes length on mac os and 8 bytes on linux return(new CpuUsage() { UserUsage = new TimeValue() { Seconds = *rawResourceUsage, MicroSeconds = rawResourceUsage[1] & 0xFFFFFFFF }, KernelUsage = new TimeValue() { Seconds = rawResourceUsage[2], MicroSeconds = rawResourceUsage[3] & 0xFFFFFFFF }, }); } }
internal static unsafe PosixResourceUsage?GetResourceUsageByScope(int scope) { if (IntPtr.Size == 4) { int *rawResourceUsage = stackalloc int[RESOURCE_USAGE_FIELDS_COUNT]; int result = LinuxResourceUsageInterop.getrusage_heapless(scope, new IntPtr(rawResourceUsage)); if (result != 0) { return(null); } return(new PosixResourceUsage() { UserUsage = new TimeValue() { Seconds = *rawResourceUsage, MicroSeconds = rawResourceUsage[1] }, KernelUsage = new TimeValue() { Seconds = rawResourceUsage[2], MicroSeconds = rawResourceUsage[3] }, MaxRss = rawResourceUsage[4], SoftPageFaults = rawResourceUsage[8], HardPageFaults = rawResourceUsage[9], Swaps = rawResourceUsage[10], ReadOps = rawResourceUsage[11], WriteOps = rawResourceUsage[12], SentIpcMessages = rawResourceUsage[13], ReceivedIpcMessages = rawResourceUsage[14], ReceivedSignals = rawResourceUsage[15], VoluntaryContextSwitches = rawResourceUsage[16], InvoluntaryContextSwitches = rawResourceUsage[17], }); } else { long *rawResourceUsage = stackalloc long[RESOURCE_USAGE_FIELDS_COUNT]; int result = LinuxResourceUsageInterop.getrusage_heapless(scope, new IntPtr(rawResourceUsage)); if (result != 0) { return(null); } // microseconds are 4 bytes length on mac os and 8 bytes on linux return(new PosixResourceUsage() { UserUsage = new TimeValue() { Seconds = *rawResourceUsage, MicroSeconds = rawResourceUsage[1] & 0xFFFFFFFF }, KernelUsage = new TimeValue() { Seconds = rawResourceUsage[2], MicroSeconds = rawResourceUsage[3] & 0xFFFFFFFF }, MaxRss = rawResourceUsage[4], SoftPageFaults = rawResourceUsage[8], HardPageFaults = rawResourceUsage[9], Swaps = rawResourceUsage[10], ReadOps = rawResourceUsage[11], WriteOps = rawResourceUsage[12], SentIpcMessages = rawResourceUsage[13], ReceivedIpcMessages = rawResourceUsage[14], ReceivedSignals = rawResourceUsage[15], VoluntaryContextSwitches = rawResourceUsage[16], InvoluntaryContextSwitches = rawResourceUsage[17], }); } }