Implemented process disk IO metrics on Windows
This commit is contained in:
parent
a62558af50
commit
273889f827
|
@ -345,6 +345,8 @@ typedef struct {
|
||||||
sigar_uint64_t handles;
|
sigar_uint64_t handles;
|
||||||
sigar_uint64_t threads;
|
sigar_uint64_t threads;
|
||||||
sigar_uint64_t page_faults;
|
sigar_uint64_t page_faults;
|
||||||
|
sigar_uint64_t bytes_read;
|
||||||
|
sigar_uint64_t bytes_written;
|
||||||
} sigar_win32_pinfo_t;
|
} sigar_win32_pinfo_t;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
|
|
@ -62,6 +62,8 @@ typedef enum {
|
||||||
#define PERF_TITLE_PPID 1410
|
#define PERF_TITLE_PPID 1410
|
||||||
#define PERF_TITLE_PRIORITY 682
|
#define PERF_TITLE_PRIORITY 682
|
||||||
#define PERF_TITLE_START_TIME 684
|
#define PERF_TITLE_START_TIME 684
|
||||||
|
#define PERF_TITLE_IO_READ_BYTES_SEC 1420
|
||||||
|
#define PERF_TITLE_IO_WRITE_BYTES_SEC 1422
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
PERF_IX_CPUTIME,
|
PERF_IX_CPUTIME,
|
||||||
|
@ -74,6 +76,8 @@ typedef enum {
|
||||||
PERF_IX_PPID,
|
PERF_IX_PPID,
|
||||||
PERF_IX_PRIORITY,
|
PERF_IX_PRIORITY,
|
||||||
PERF_IX_START_TIME,
|
PERF_IX_START_TIME,
|
||||||
|
PERF_IX_IO_READ_BYTES_SEC,
|
||||||
|
PERF_IX_IO_WRITE_BYTES_SEC,
|
||||||
PERF_IX_MAX
|
PERF_IX_MAX
|
||||||
} perf_proc_offsets_t;
|
} perf_proc_offsets_t;
|
||||||
|
|
||||||
|
@ -1210,6 +1214,22 @@ SIGAR_DECLARE(int) sigar_proc_mem_get(sigar_t *sigar, sigar_pid_t pid,
|
||||||
return SIGAR_OK;
|
return SIGAR_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SIGAR_DECLARE(int) sigar_proc_disk_io_get(sigar_t *sigar, sigar_pid_t pid,
|
||||||
|
sigar_proc_disk_io_t *proc_disk_io)
|
||||||
|
{
|
||||||
|
int status = get_proc_info(sigar, pid);
|
||||||
|
sigar_win32_pinfo_t *pinfo = &sigar->pinfo;
|
||||||
|
|
||||||
|
if (status != SIGAR_OK) {
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
proc_disk_io->bytes_read = pinfo->bytes_read;
|
||||||
|
proc_disk_io->bytes_written = pinfo->bytes_written;
|
||||||
|
|
||||||
|
return SIGAR_OK;
|
||||||
|
}
|
||||||
|
|
||||||
#define TOKEN_DAC (STANDARD_RIGHTS_READ | READ_CONTROL | TOKEN_QUERY)
|
#define TOKEN_DAC (STANDARD_RIGHTS_READ | READ_CONTROL | TOKEN_QUERY)
|
||||||
|
|
||||||
SIGAR_DECLARE(int)
|
SIGAR_DECLARE(int)
|
||||||
|
@ -1441,6 +1461,12 @@ static int get_proc_info(sigar_t *sigar, sigar_pid_t pid)
|
||||||
case PERF_TITLE_START_TIME:
|
case PERF_TITLE_START_TIME:
|
||||||
perf_offsets[PERF_IX_START_TIME] = offset;
|
perf_offsets[PERF_IX_START_TIME] = offset;
|
||||||
break;
|
break;
|
||||||
|
case PERF_TITLE_IO_READ_BYTES_SEC:
|
||||||
|
perf_offsets[PERF_IX_IO_READ_BYTES_SEC] = offset;
|
||||||
|
break;
|
||||||
|
case PERF_TITLE_IO_WRITE_BYTES_SEC:
|
||||||
|
perf_offsets[PERF_IX_IO_WRITE_BYTES_SEC] = offset;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1466,6 +1492,8 @@ static int get_proc_info(sigar_t *sigar, sigar_pid_t pid)
|
||||||
pinfo->handles = PERF_VAL(PERF_IX_HANDLE_CNT);
|
pinfo->handles = PERF_VAL(PERF_IX_HANDLE_CNT);
|
||||||
pinfo->threads = PERF_VAL(PERF_IX_THREAD_CNT);
|
pinfo->threads = PERF_VAL(PERF_IX_THREAD_CNT);
|
||||||
pinfo->page_faults = PERF_VAL(PERF_IX_PAGE_FAULTS);
|
pinfo->page_faults = PERF_VAL(PERF_IX_PAGE_FAULTS);
|
||||||
|
pinfo->bytes_read = PERF_VAL(PERF_IX_IO_READ_BYTES_SEC);
|
||||||
|
pinfo->bytes_written = PERF_VAL(PERF_IX_IO_WRITE_BYTES_SEC);
|
||||||
|
|
||||||
return SIGAR_OK;
|
return SIGAR_OK;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue