summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVivek Goyal <vgoyal@redhat.com>2010-03-31 22:55:15 +0200
committerJens Axboe <jens.axboe@oracle.com>2010-03-31 22:55:15 +0200
commit7de870993035f855e1d1299a2b5c2c90b792c238 (patch)
tree42e65118691ab1b54777d935a590b3c8adfeda7a
parent61eb313e28c0f0ba8eb144c5b5f331b6b74c4fc8 (diff)
downloadfio-7de870993035f855e1d1299a2b5c2c90b792c238.tar.gz
Add an option "cgroup_nodelete" to not delete cgroups after job completion
o Add an option cgroup_nodelete to not remove cgroups created by fio after the job completion. This can help a user in inspecting various cgroup files after fio job completion. Signed-off-by: Vivek Goyal <vgoyal@redhat.com> Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
-rw-r--r--HOWTO6
-rw-r--r--cgroup.c12
-rw-r--r--fio.16
-rw-r--r--fio.h1
-rw-r--r--options.c7
5 files changed, 28 insertions, 4 deletions
diff --git a/HOWTO b/HOWTO
index 6c7f05b9..922db2f0 100644
--- a/HOWTO
+++ b/HOWTO
@@ -1036,6 +1036,12 @@ cgroup_weight=int Set the weight of the cgroup to this value. See
the documentation that comes with the kernel, allowed values
are in the range of 100..1000.
+cgroup_nodelete=bool Normally fio will delete the cgroups it has created after
+ the job completion. To override this behavior and to leave
+ cgroups around after the job completion, set cgroup_nodelete=1.
+ This can be useful if one wants to inspect various cgroup
+ files after job completion. Default: false
+
uid=int Instead of running as the invoking user, set the user ID to
this value before the thread/process does any work.
diff --git a/cgroup.c b/cgroup.c
index 14bbc57b..0e3a71eb 100644
--- a/cgroup.c
+++ b/cgroup.c
@@ -14,6 +14,7 @@ static struct fio_mutex *lock;
struct cgroup_member {
struct flist_head list;
char *root;
+ unsigned int cgroup_nodelete;
};
static char *find_cgroup_mnt(struct thread_data *td)
@@ -43,14 +44,16 @@ static char *find_cgroup_mnt(struct thread_data *td)
return mntpoint;
}
-static void add_cgroup(const char *name, struct flist_head *clist)
+static void add_cgroup(struct thread_data *td, const char *name,
+ struct flist_head *clist)
{
struct cgroup_member *cm;
cm = smalloc(sizeof(*cm));
INIT_FLIST_HEAD(&cm->list);
cm->root = smalloc_strdup(name);
-
+ if (td->o.cgroup_nodelete)
+ cm->cgroup_nodelete = 1;
fio_mutex_down(lock);
flist_add_tail(&cm->list, clist);
fio_mutex_up(lock);
@@ -65,7 +68,8 @@ void cgroup_kill(struct flist_head *clist)
flist_for_each_safe(n, tmp, clist) {
cm = flist_entry(n, struct cgroup_member, list);
- rmdir(cm->root);
+ if (!cm->cgroup_nodelete)
+ rmdir(cm->root);
flist_del(&cm->list);
sfree(cm->root);
sfree(cm);
@@ -144,7 +148,7 @@ int cgroup_setup(struct thread_data *td, struct flist_head *clist, char **mnt)
goto err;
}
} else
- add_cgroup(root, clist);
+ add_cgroup(td, root, clist);
if (td->o.cgroup_weight) {
if (write_int_to_file(td, root, "blkio.weight",
diff --git a/fio.1 b/fio.1
index 5d0988b2..12146c87 100644
--- a/fio.1
+++ b/fio.1
@@ -762,6 +762,12 @@ your system doesn't have it mounted, you can do so with:
Set the weight of the cgroup to this value. See the documentation that comes
with the kernel, allowed values are in the range of 100..1000.
.TP
+.BI cgroup_nodelete \fR=\fPbool
+Normally fio will delete the cgroups it has created after the job completion.
+To override this behavior and to leave cgroups around after the job completion,
+set cgroup_nodelete=1. This can be useful if one wants to inspect various
+cgroup files after job completion. Default: false
+.TP
.BI uid \fR=\fPint
Instead of running as the invoking user, set the user ID to this value before
the thread/process does any work.
diff --git a/fio.h b/fio.h
index 5038e4de..5dc0352a 100644
--- a/fio.h
+++ b/fio.h
@@ -281,6 +281,7 @@ struct thread_options {
*/
char *cgroup;
unsigned int cgroup_weight;
+ unsigned int cgroup_nodelete;
unsigned int uid;
unsigned int gid;
diff --git a/options.c b/options.c
index 974df334..994f2a19 100644
--- a/options.c
+++ b/options.c
@@ -1818,6 +1818,13 @@ static struct fio_option options[FIO_MAX_OPTS] = {
.maxval = 1000,
},
{
+ .name = "cgroup_nodelete",
+ .type = FIO_OPT_BOOL,
+ .off1 = td_var_offset(cgroup_nodelete),
+ .help = "Do not delete cgroups after job completion",
+ .def = "0",
+ },
+ {
.name = "uid",
.type = FIO_OPT_INT,
.off1 = td_var_offset(uid),