Skip to content

Commit

Permalink
make getdelays cgroupstats aware
Browse files Browse the repository at this point in the history
Update the getdelays utility to become cgroupstats aware.  A new -C option has
been added.  It takes in a control group path and prints out a summary of the
states of tasks in the control group

Signed-off-by: Balbir Singh <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
  • Loading branch information
Balbir Singh authored and Linus Torvalds committed Nov 15, 2007
1 parent dbc0e4c commit 546040d
Showing 1 changed file with 42 additions and 1 deletion.
43 changes: 42 additions & 1 deletion Documentation/accounting/getdelays.c
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@

#include <linux/genetlink.h>
#include <linux/taskstats.h>
#include <linux/cgroupstats.h>

/*
* Generic macros for dealing with netlink sockets. Might be duplicated
Expand Down Expand Up @@ -78,6 +79,7 @@ static void usage(void)
fprintf(stderr, " -i: print IO accounting (works only with -p)\n");
fprintf(stderr, " -l: listen forever\n");
fprintf(stderr, " -v: debug on\n");
fprintf(stderr, " -C: container path\n");
}

/*
Expand Down Expand Up @@ -212,6 +214,14 @@ void task_context_switch_counts(struct taskstats *t)
t->nvcsw, t->nivcsw);
}

void print_cgroupstats(struct cgroupstats *c)
{
printf("sleeping %llu, blocked %llu, running %llu, stopped %llu, "
"uninterruptible %llu\n", c->nr_sleeping, c->nr_io_wait,
c->nr_running, c->nr_stopped, c->nr_uninterruptible);
}


void print_ioacct(struct taskstats *t)
{
printf("%s: read=%llu, write=%llu, cancelled_write=%llu\n",
Expand Down Expand Up @@ -239,11 +249,14 @@ int main(int argc, char *argv[])
int maskset = 0;
char *logfile = NULL;
int loop = 0;
int containerset = 0;
char containerpath[1024];
int cfd = 0;

struct msgtemplate msg;

while (1) {
c = getopt(argc, argv, "qdiw:r:m:t:p:vl");
c = getopt(argc, argv, "qdiw:r:m:t:p:vlC:");
if (c < 0)
break;

Expand All @@ -260,6 +273,10 @@ int main(int argc, char *argv[])
printf("printing task/process context switch rates\n");
print_task_context_switch_counts = 1;
break;
case 'C':
containerset = 1;
strncpy(containerpath, optarg, strlen(optarg) + 1);
break;
case 'w':
logfile = strdup(optarg);
printf("write to file %s\n", logfile);
Expand Down Expand Up @@ -334,6 +351,11 @@ int main(int argc, char *argv[])
}
}

if (tid && containerset) {
fprintf(stderr, "Select either -t or -C, not both\n");
goto err;
}

if (tid) {
rc = send_cmd(nl_sd, id, mypid, TASKSTATS_CMD_GET,
cmd_type, &tid, sizeof(__u32));
Expand All @@ -344,6 +366,20 @@ int main(int argc, char *argv[])
}
}

if (containerset) {
cfd = open(containerpath, O_RDONLY);
if (cfd < 0) {
perror("error opening container file");
goto err;
}
rc = send_cmd(nl_sd, id, mypid, CGROUPSTATS_CMD_GET,
CGROUPSTATS_CMD_ATTR_FD, &cfd, sizeof(__u32));
if (rc < 0) {
perror("error sending cgroupstats command");
goto err;
}
}

do {
int i;

Expand Down Expand Up @@ -422,6 +458,9 @@ int main(int argc, char *argv[])
}
break;

case CGROUPSTATS_TYPE_CGROUP_STATS:
print_cgroupstats(NLA_DATA(na));
break;
default:
fprintf(stderr, "Unknown nla_type %d\n",
na->nla_type);
Expand All @@ -443,5 +482,7 @@ int main(int argc, char *argv[])
close(nl_sd);
if (fd)
close(fd);
if (cfd)
close(cfd);
return 0;
}

0 comments on commit 546040d

Please sign in to comment.