New API to retrieve process io stats, with Linux implementation
This commit is contained in:
@@ -9,6 +9,7 @@ glibtop_HEADERS = close.h loadavg.h prockernel.h procstate.h \
|
||||
parameter.h mountlist.h fsusage.h procmap.h signal.h \
|
||||
sysinfo.h ppp.h procargs.h netload.h \
|
||||
procwd.h procaffinity.h \
|
||||
procdiskio.h \
|
||||
netlist.h procopenfiles.h open.h
|
||||
|
||||
noinst_HEADERS = error.h write.h read_data.h read.h init_hooks.h machine.h \
|
||||
|
@@ -59,8 +59,9 @@ G_BEGIN_DECLS
|
||||
#define GLIBTOP_CMND_PROC_OPEN_FILES 25
|
||||
#define GLIBTOP_CMND_PROC_WD 26
|
||||
#define GLIBTOP_CMND_PROC_AFFINITY 27
|
||||
#define GLIBTOP_CMND_PROC_DISKIO 28
|
||||
|
||||
#define GLIBTOP_MAX_CMND 28
|
||||
#define GLIBTOP_MAX_CMND 29
|
||||
|
||||
#define _GLIBTOP_PARAM_SIZE 16
|
||||
|
||||
|
90
include/glibtop/procdiskio.h
Normal file
90
include/glibtop/procdiskio.h
Normal file
@@ -0,0 +1,90 @@
|
||||
/* Copyright (C) 2017 Robert Roth
|
||||
This file is part of LibGTop.
|
||||
|
||||
Contributed by Robert Roth <robert.roth.off@gmail.com>, February 2017.
|
||||
|
||||
LibGTop is free software; you can redistribute it and/or modify it
|
||||
under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License,
|
||||
or (at your option) any later version.
|
||||
|
||||
LibGTop is distributed in the hope that it will be useful, but WITHOUT
|
||||
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with LibGTop; see the file COPYING. If not, write to the
|
||||
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
||||
Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
#ifndef __GLIBTOP_PROCDISKIO_H__
|
||||
#define __GLIBTOP_PROCDISKIO_H__
|
||||
|
||||
#include <glibtop.h>
|
||||
#include <glibtop/global.h>
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
#define GLIBTOP_PROC_DISKIO_RCHAR 0
|
||||
#define GLIBTOP_PROC_DISKIO_WCHAR 1
|
||||
#define GLIBTOP_PROC_DISKIO_RBYTES 2
|
||||
#define GLIBTOP_PROC_DISKIO_WBYTES 3
|
||||
|
||||
#define GLIBTOP_MAX_PROC_TIME 3
|
||||
|
||||
typedef struct _glibtop_proc_diskio glibtop_proc_diskio;
|
||||
|
||||
/* Time section */
|
||||
|
||||
/**
|
||||
* glibtop_proc_diskio:
|
||||
* @rchar: The number of bytes which this task has caused to be read from storage. This
|
||||
* is simply the sum of bytes which this process passed to read() and pread(), also including tty IO,
|
||||
* and it is unaffected by whether or not actual physical disk IO was required.
|
||||
* @wchar: The number of bytes which this task has caused, or shall cause to be written
|
||||
* to disk. Similar caveats apply here as with rchar.
|
||||
* @rbytes: Attempt to count the number of bytes which this process really did cause to
|
||||
* be fetched from the storage layer. Done at the submit_bio() level, so it is
|
||||
* accurate for block-backed filesystems.
|
||||
* @wbytes: Attempt to count the number of bytes which this process caused to be sent to
|
||||
* the storage layer. This is done at page-dirtying time.
|
||||
*
|
||||
* Process disk io data filled by glibtop_get_proc_diskio().
|
||||
*
|
||||
*/
|
||||
struct _glibtop_proc_diskio
|
||||
{
|
||||
/*< private >*/
|
||||
guint64 flags;
|
||||
/*< public >*/
|
||||
guint64 rchar;
|
||||
guint64 wchar;
|
||||
guint64 rbytes;
|
||||
guint64 wbytes;
|
||||
};
|
||||
|
||||
|
||||
void glibtop_get_proc_diskio (glibtop_proc_diskio *buf, pid_t pid);
|
||||
|
||||
#if GLIBTOP_SUID_PROC_DISKIO
|
||||
#define glibtop_get_proc_diskio_r glibtop_get_proc_diskio_p
|
||||
#else
|
||||
#define glibtop_get_proc_diskio_r glibtop_get_proc_diskio_s
|
||||
#endif
|
||||
|
||||
void glibtop_get_proc_diskio_l (glibtop *server, glibtop_proc_diskio *buf, pid_t pid);
|
||||
|
||||
#if GLIBTOP_SUID_PROC_DISKIO
|
||||
void _glibtop_init_proc_diskio_p (glibtop *server);
|
||||
void glibtop_get_proc_diskio_p (glibtop *server, glibtop_proc_diskio *buf, pid_t pid);
|
||||
#else
|
||||
void _glibtop_init_proc_diskio_s (glibtop *server);
|
||||
void glibtop_get_proc_diskio_s (glibtop *server, glibtop_proc_diskio *buf, pid_t pid);
|
||||
#endif
|
||||
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#endif
|
@@ -53,8 +53,9 @@ G_BEGIN_DECLS
|
||||
#define GLIBTOP_SYSDEPS_PROC_OPEN_FILES 24
|
||||
#define GLIBTOP_SYSDEPS_PROC_WD 25
|
||||
#define GLIBTOP_SYSDEPS_PROC_AFFINITY 26
|
||||
#define GLIBTOP_SYSDEPS_PROC_DISKIO 27
|
||||
|
||||
#define GLIBTOP_MAX_SYSDEPS 27
|
||||
#define GLIBTOP_MAX_SYSDEPS 28
|
||||
|
||||
/* The 'features' args to glibtop_init_* is an unsigned long */
|
||||
G_STATIC_ASSERT((1UL << (GLIBTOP_MAX_SYSDEPS - 1)) <= ULONG_MAX);
|
||||
@@ -93,6 +94,7 @@ struct _glibtop_sysdeps
|
||||
guint64 ppp; /* glibtop_ppp */
|
||||
guint64 proc_wd; /* glibtop_proc_wd */
|
||||
guint64 proc_affinity; /* glibtop_proc_affinity */
|
||||
guint64 proc_diskio; /* glibtop_proc_diskio */
|
||||
};
|
||||
|
||||
void glibtop_get_sysdeps (glibtop_sysdeps *buf);
|
||||
|
@@ -44,6 +44,7 @@
|
||||
#include <glibtop/procopenfiles.h>
|
||||
#include <glibtop/procwd.h>
|
||||
#include <glibtop/procaffinity.h>
|
||||
#include <glibtop/procdiskio.h>
|
||||
|
||||
#include <glibtop/mountlist.h>
|
||||
#include <glibtop/fsusage.h>
|
||||
@@ -84,6 +85,7 @@ union _glibtop_union
|
||||
glibtop_proc_open_files proc_open_files;
|
||||
glibtop_proc_wd proc_wd;
|
||||
glibtop_proc_affinity proc_affinity;
|
||||
glibtop_proc_diskio proc_diskio;
|
||||
};
|
||||
|
||||
G_END_DECLS
|
||||
|
Reference in New Issue
Block a user