Add Linux-VServer support,

contributed by Jonathan Sambrook and Benedikt Bohm
This commit is contained in:
Hisham Muhammad 2008-09-23 04:31:13 +00:00
parent 6beb27d803
commit a5dfaa2393
5 changed files with 75 additions and 0 deletions

View File

@ -1,4 +1,9 @@
What's new in version 0.8.1
* Linux-VServer support
(thanks to Jonathan Sambrook and Benedikt Bohm)
What's new in version 0.8 What's new in version 0.8
* Ability to change sort column with the mouse by * Ability to change sort column with the mouse by

View File

@ -49,6 +49,9 @@ typedef enum ProcessField_ {
#ifdef HAVE_OPENVZ #ifdef HAVE_OPENVZ
VEID, VPID, VEID, VPID,
#endif #endif
#ifdef HAVE_VSERVER
VXID,
#endif
#ifdef HAVE_TASKSTATS #ifdef HAVE_TASKSTATS
RCHAR, WCHAR, SYSCR, SYSCW, RBYTES, WBYTES, CNCLWB, IO_READ_RATE, IO_WRITE_RATE, IO_RATE, RCHAR, WCHAR, SYSCR, SYSCW, RBYTES, WBYTES, CNCLWB, IO_READ_RATE, IO_WRITE_RATE, IO_RATE,
#endif #endif
@ -124,6 +127,9 @@ typedef struct Process_ {
unsigned int veid; unsigned int veid;
unsigned int vpid; unsigned int vpid;
#endif #endif
#ifdef HAVE_VSERVER
unsigned int vxid;
#endif
#ifdef HAVE_TASKSTATS #ifdef HAVE_TASKSTATS
unsigned long long io_rchar; unsigned long long io_rchar;
unsigned long long io_wchar; unsigned long long io_wchar;
@ -159,6 +165,9 @@ char *Process_fieldNames[] = {
#ifdef HAVE_OPENVZ #ifdef HAVE_OPENVZ
"VEID", "VPID", "VEID", "VPID",
#endif #endif
#ifdef HAVE_VSERVER
"VXID",
#endif
#ifdef HAVE_TASKSTATS #ifdef HAVE_TASKSTATS
"RCHAR", "WCHAR", "SYSCR", "SYSCW", "RBYTES", "WBYTES", "CNCLWB", "RCHAR", "WCHAR", "SYSCR", "SYSCW", "RBYTES", "WBYTES", "CNCLWB",
"IO_READ_RATE", "IO_WRITE_RATE", "IO_RATE", "IO_READ_RATE", "IO_WRITE_RATE", "IO_RATE",
@ -178,6 +187,9 @@ char *Process_fieldTitles[] = {
#ifdef HAVE_OPENVZ #ifdef HAVE_OPENVZ
" VEID ", " VPID ", " VEID ", " VPID ",
#endif #endif
#ifdef HAVE_VSERVER
" VXID ",
#endif
#ifdef HAVE_TASKSTATS #ifdef HAVE_TASKSTATS
" RD_CHAR ", " WR_CHAR ", " RD_SYSC ", " WR_SYSC ", " IO_RD ", " IO_WR ", " IO_CANCEL ", " RD_CHAR ", " WR_CHAR ", " RD_SYSC ", " WR_SYSC ", " IO_RD ", " IO_WR ", " IO_CANCEL ",
" IORR ", " IOWR ", " IO ", " IORR ", " IOWR ", " IO ",
@ -388,6 +400,9 @@ static void Process_writeField(Process* this, RichString* str, ProcessField fiel
case VEID: snprintf(buffer, n, "%5u ", this->veid); break; case VEID: snprintf(buffer, n, "%5u ", this->veid); break;
case VPID: snprintf(buffer, n, "%5u ", this->vpid); break; case VPID: snprintf(buffer, n, "%5u ", this->vpid); break;
#endif #endif
#ifdef HAVE_VSERVER
case VXID: snprintf(buffer, n, "%5u ", this->vxid); break;
#endif
#ifdef HAVE_TASKSTATS #ifdef HAVE_TASKSTATS
case RCHAR: snprintf(buffer, n, "%10llu ", this->io_rchar); break; case RCHAR: snprintf(buffer, n, "%10llu ", this->io_rchar); break;
case WCHAR: snprintf(buffer, n, "%10llu ", this->io_wchar); break; case WCHAR: snprintf(buffer, n, "%10llu ", this->io_wchar); break;
@ -556,6 +571,10 @@ int Process_compare(const void* v1, const void* v2) {
case VPID: case VPID:
return (p1->vpid - p2->vpid); return (p1->vpid - p2->vpid);
#endif #endif
#ifdef HAVE_VSERVER
case VXID:
return (p1->vxid - p2->vxid);
#endif
#ifdef HAVE_TASKSTATS #ifdef HAVE_TASKSTATS
case RCHAR: diff = p2->io_rchar - p1->io_rchar; goto test_diff; case RCHAR: diff = p2->io_rchar - p1->io_rchar; goto test_diff;
case WCHAR: diff = p2->io_wchar - p1->io_wchar; goto test_diff; case WCHAR: diff = p2->io_wchar - p1->io_wchar; goto test_diff;

View File

@ -51,6 +51,9 @@ typedef enum ProcessField_ {
#ifdef HAVE_OPENVZ #ifdef HAVE_OPENVZ
VEID, VPID, VEID, VPID,
#endif #endif
#ifdef HAVE_VSERVER
VXID,
#endif
#ifdef HAVE_TASKSTATS #ifdef HAVE_TASKSTATS
RCHAR, WCHAR, SYSCR, SYSCW, RBYTES, WBYTES, CNCLWB, IO_READ_RATE, IO_WRITE_RATE, IO_RATE, RCHAR, WCHAR, SYSCR, SYSCW, RBYTES, WBYTES, CNCLWB, IO_READ_RATE, IO_WRITE_RATE, IO_RATE,
#endif #endif
@ -126,6 +129,9 @@ typedef struct Process_ {
unsigned int veid; unsigned int veid;
unsigned int vpid; unsigned int vpid;
#endif #endif
#ifdef HAVE_VSERVER
unsigned int vxid;
#endif
#ifdef HAVE_TASKSTATS #ifdef HAVE_TASKSTATS
unsigned long long io_rchar; unsigned long long io_rchar;
unsigned long long io_wchar; unsigned long long io_wchar;

View File

@ -639,6 +639,40 @@ static bool ProcessList_processEntries(ProcessList* this, char* dirname, Process
fclose(status); fclose(status);
} }
#endif #endif
#ifdef HAVE_VSERVER
snprintf(statusfilename, MAX_NAME, "%s/%s/status", dirname, name);
status = ProcessList_fopen(this, statusfilename, "r");
if (status == NULL)
goto errorReadingProcess;
else {
char buffer[256];
process->vxid = 0;
while (!feof(status)) {
char* ok = fgets(buffer, 255, status);
if (!ok)
break;
if (String_startsWith(buffer, "VxID:")) {
int vxid;
int ok = ProcessList_read(this, buffer, "VxID:\t%d", &vxid);
if (ok >= 1) {
process->vxid = vxid;
}
}
#if defined HAVE_ANCIENT_VSERVER
else if (String_startsWith(buffer, "s_context:")) {
int vxid;
int ok = ProcessList_read(this, buffer, "s_context:\t%d", &vxid);
if (ok >= 1) {
process->vxid = vxid;
}
}
#endif
}
fclose(status);
}
#endif
snprintf(statusfilename, MAX_NAME, "%s/%s/cmdline", dirname, name); snprintf(statusfilename, MAX_NAME, "%s/%s/cmdline", dirname, name);
status = ProcessList_fopen(this, statusfilename, "r"); status = ProcessList_fopen(this, statusfilename, "r");

View File

@ -69,6 +69,17 @@ if test "x$enable_openvz" = xyes; then
AC_DEFINE(HAVE_OPENVZ, 1, [Define if openvz support enabled.]) AC_DEFINE(HAVE_OPENVZ, 1, [Define if openvz support enabled.])
fi fi
AC_ARG_ENABLE(vserver, [AC_HELP_STRING([--enable-vserver], [enable VServer support])], ,enable_vserver="no")
if test "x$enable_vserver" = xyes; then
AC_DEFINE(HAVE_VSERVER, 1, [Define if vserver support enabled.])
fi
AC_ARG_ENABLE(ancient_vserver, [AC_HELP_STRING([--enable-ancient-vserver], [enable ancient VServer support (implies --enable-vserver)])], ,enable_ancient_vserver="no")
if test "x$enable_ancient_vserver" = xyes; then
AC_DEFINE(HAVE_VSERVER, 1, [Define if vserver support enabled.])
AC_DEFINE(HAVE_ANCIENT_VSERVER, 1, [Define if ancient vserver support enabled.])
fi
AC_ARG_ENABLE(taskstats, [AC_HELP_STRING([--enable-taskstats], [enable per-task IO Stats (taskstats kernel sup required)])], ,enable_taskstats="yes") AC_ARG_ENABLE(taskstats, [AC_HELP_STRING([--enable-taskstats], [enable per-task IO Stats (taskstats kernel sup required)])], ,enable_taskstats="yes")
if test "x$enable_taskstats" = xyes; then if test "x$enable_taskstats" = xyes; then
AC_DEFINE(HAVE_TASKSTATS, 1, [Define if taskstats support enabled.]) AC_DEFINE(HAVE_TASKSTATS, 1, [Define if taskstats support enabled.])