1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127
|
#ifndef HEADER_LinuxMachine
#define HEADER_LinuxMachine
/*
htop - LinuxMachine.h
(C) 2014 Hisham H. Muhammad
Released under the GNU GPLv2+, see the COPYING file
in the source distribution for its full text.
*/
#include <stdbool.h>
#include "Machine.h"
#include "linux/ZramStats.h"
#include "linux/ZswapStats.h"
#include "zfs/ZfsArcStats.h"
#define HTOP_HUGEPAGE_BASE_SHIFT 16
#define HTOP_HUGEPAGE_COUNT 24
typedef struct CPUData_ {
unsigned long long int totalTime;
unsigned long long int userTime;
unsigned long long int systemTime;
unsigned long long int systemAllTime;
unsigned long long int idleAllTime;
unsigned long long int idleTime;
unsigned long long int niceTime;
unsigned long long int ioWaitTime;
unsigned long long int irqTime;
unsigned long long int softIrqTime;
unsigned long long int stealTime;
unsigned long long int guestTime;
unsigned long long int totalPeriod;
unsigned long long int userPeriod;
unsigned long long int systemPeriod;
unsigned long long int systemAllPeriod;
unsigned long long int idleAllPeriod;
unsigned long long int idlePeriod;
unsigned long long int nicePeriod;
unsigned long long int ioWaitPeriod;
unsigned long long int irqPeriod;
unsigned long long int softIrqPeriod;
unsigned long long int stealPeriod;
unsigned long long int guestPeriod;
double frequency;
#ifdef HAVE_SENSORS_SENSORS_H
double temperature;
int physicalID; /* different for each CPU socket */
int coreID; /* same for hyperthreading */
int ccdID; /* same for each AMD chiplet */
#endif
bool online;
} CPUData;
typedef struct GPUEngineData_ {
unsigned long long int prevTime, curTime; /* absolute GPU time in nano seconds */
char* key; /* engine name */
struct GPUEngineData_* next;
} GPUEngineData;
typedef struct LinuxMachine_ {
Machine super;
long jiffies;
int pageSize;
int pageSizeKB;
/* see Linux kernel source for further detail, fs/proc/stat.c */
unsigned int runningTasks; /* procs_running from /proc/stat */
long long boottime; /* btime field from /proc/stat */
double period;
CPUData* cpuData;
#ifdef HAVE_SENSORS_SENSORS_H
int maxPhysicalID;
int maxCoreID;
#endif
memory_t totalHugePageMem;
memory_t usedHugePageMem[HTOP_HUGEPAGE_COUNT];
memory_t availableMem;
unsigned long long int prevGpuTime, curGpuTime; /* total absolute GPU time in nano seconds */
GPUEngineData* gpuEngineData;
ZfsArcStats zfs;
ZramStats zram;
ZswapStats zswap;
} LinuxMachine;
#ifndef PROCDIR
#define PROCDIR "/proc"
#endif
#ifndef PROCCPUINFOFILE
#define PROCCPUINFOFILE PROCDIR "/cpuinfo"
#endif
#ifndef PROCSTATFILE
#define PROCSTATFILE PROCDIR "/stat"
#endif
#ifndef PROCMEMINFOFILE
#define PROCMEMINFOFILE PROCDIR "/meminfo"
#endif
#ifndef PROCARCSTATSFILE
#define PROCARCSTATSFILE PROCDIR "/spl/kstat/zfs/arcstats"
#endif
#ifndef PROCTTYDRIVERSFILE
#define PROCTTYDRIVERSFILE PROCDIR "/tty/drivers"
#endif
#ifndef PROC_LINE_LENGTH
#define PROC_LINE_LENGTH 4096
#endif
#endif
|