library: adding IO accounting
This is a modification of MR !122 by @renit1609 to fit the new library. Problem statement: The procps library has no PROC_FILLIO flag to fetch the proc field "/proc/[pid]/io" data process-wise. IO Accounting is not included as part of procps. Requirement: We have a requirement to fetch process wise IO utilization which can be used for monitoring. When looking through the procps library, I see that IO Accounting (/proc/[pid]/io) is not being included as part of procps. There is no such flag like PROC_FILLIO being included in readproc.h . Solution: While looking at the implementation done for other proc fields, I used the spare bits in app code. I renamed PROC_SPARE_1 as PROC_FILLIO, the spare bit from PROC_SPARE_* and used it for fetching /proc/[pid]/io data as part of the procps library similar to other fields. I moved the PROC_SPARE_* bits each by 1 bit to retain the spare bits. Meanwhile added the IO fields in proc_t structure. References: procps-ng/procps!122 procps-ng/procps#184
This commit is contained in:
@@ -97,7 +97,14 @@ typedef struct proc_t {
|
||||
min_flt, // stat number of minor page faults since process start
|
||||
maj_flt, // stat number of major page faults since process start
|
||||
cmin_flt, // stat cumulative min_flt of process and child processes
|
||||
cmaj_flt; // stat cumulative maj_flt of process and child processes
|
||||
cmaj_flt, // stat cumulative maj_flt of process and child processes
|
||||
rchar, // io characters read
|
||||
wchar, // io characters written
|
||||
syscr, // io number of read I/O operations
|
||||
syscw, // io number of write I/O operations
|
||||
read_bytes, // io number of bytes fetched from the storage layer
|
||||
write_bytes, // io number of bytes sent to the storage layer
|
||||
cancelled_write_bytes; // io number of bytes truncating pagecache
|
||||
char
|
||||
*environ, // (special) environment as string (/proc/#/environ)
|
||||
*cmdline, // (special) command line as string (/proc/#/cmdline)
|
||||
@@ -209,6 +216,7 @@ typedef struct PROCTAB {
|
||||
#define PROC_FILL_LXC 0x800000 // fill in proc_t lxcname, if possible
|
||||
#define PROC_FILL_LUID 0x400000 // fill in proc_t luid (login user id)
|
||||
#define PROC_FILL_EXE 0x200000 // fill in proc_t exe path + pgm name
|
||||
#define PROC_FILLIO 0x01000000 // fill in proc_t io information
|
||||
|
||||
// consider only processes with one of the passed:
|
||||
#define PROC_PID 0x1000 // process id numbers ( 0 terminated)
|
||||
@@ -225,10 +233,10 @@ typedef struct PROCTAB {
|
||||
#define PROC_FILL_SUPGRP ( 0x0400 | PROC_FILLSTATUS ) // obtain supplementary group names
|
||||
|
||||
// it helps to give app code a few spare bits
|
||||
#define PROC_SPARE_1 0x01000000
|
||||
#define PROC_SPARE_2 0x02000000
|
||||
#define PROC_SPARE_3 0x04000000
|
||||
#define PROC_SPARE_4 0x08000000
|
||||
#define PROC_SPARE_1 0x02000000
|
||||
#define PROC_SPARE_2 0x04000000
|
||||
#define PROC_SPARE_3 0x08000000
|
||||
#define PROC_SPARE_4 0x10000000
|
||||
|
||||
// Function definitions
|
||||
// Initialize a PROCTAB structure holding needed call-to-call persistent data
|
||||
|
Reference in New Issue
Block a user