Recent changes (master)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



The following changes since commit 9caaf02b06deecf0b0a13c16b6d59dddc64b8c35:

  Merge branch 'doc-norandommap' of https://github.com/larrystevenwise/fio (2018-06-21 11:22:41 -0600)

are available in the git repository at:

  git://git.kernel.dk/fio.git master

for you to fetch changes up to 354d50e771451f510e5886275768abb63b602798:

  Fix compilation without cgroups (2018-06-29 08:00:29 -0600)

----------------------------------------------------------------
Jens Axboe (1):
      Fix compilation without cgroups

Josef Bacik (2):
      fio: work with cgroup2 as well
      fio: add job_runtime to the thread json output

 backend.c |  5 ++---
 cgroup.c  | 64 ++++++++++++++++++++++++++++++++++++++++++++-------------------
 cgroup.h  | 15 +++++++++++----
 stat.c    |  1 +
 4 files changed, 59 insertions(+), 26 deletions(-)

---

Diff of recent changes:

diff --git a/backend.c b/backend.c
index c52eba5..a7e9184 100644
--- a/backend.c
+++ b/backend.c
@@ -50,7 +50,7 @@
 
 static struct fio_sem *startup_sem;
 static struct flist_head *cgroup_list;
-static char *cgroup_mnt;
+static struct cgroup_mnt *cgroup_mnt;
 static int exit_value;
 static volatile int fio_abort;
 static unsigned int nr_process = 0;
@@ -1886,7 +1886,7 @@ err:
 	close_and_free_files(td);
 	cleanup_io_u(td);
 	close_ioengine(td);
-	cgroup_shutdown(td, &cgroup_mnt);
+	cgroup_shutdown(td, cgroup_mnt);
 	verify_free_state(td);
 
 	if (td->zone_state_index) {
@@ -2508,7 +2508,6 @@ int fio_backend(struct sk_out *sk_out)
 		cgroup_kill(cgroup_list);
 		sfree(cgroup_list);
 	}
-	sfree(cgroup_mnt);
 
 	fio_sem_remove(startup_sem);
 	stat_exit();
diff --git a/cgroup.c b/cgroup.c
index 629047b..77e31a4 100644
--- a/cgroup.c
+++ b/cgroup.c
@@ -18,12 +18,13 @@ struct cgroup_member {
 	unsigned int cgroup_nodelete;
 };
 
-static char *find_cgroup_mnt(struct thread_data *td)
+static struct cgroup_mnt *find_cgroup_mnt(struct thread_data *td)
 {
-	char *mntpoint = NULL;
+	struct cgroup_mnt *cgroup_mnt = NULL;
 	struct mntent *mnt, dummy;
 	char buf[256] = {0};
 	FILE *f;
+	bool cgroup2 = false;
 
 	f = setmntent("/proc/mounts", "r");
 	if (!f) {
@@ -35,15 +36,29 @@ static char *find_cgroup_mnt(struct thread_data *td)
 		if (!strcmp(mnt->mnt_type, "cgroup") &&
 		    strstr(mnt->mnt_opts, "blkio"))
 			break;
+		if (!strcmp(mnt->mnt_type, "cgroup2")) {
+			cgroup2 = true;
+			break;
+		}
 	}
 
-	if (mnt)
-		mntpoint = smalloc_strdup(mnt->mnt_dir);
-	else
+	if (mnt) {
+		cgroup_mnt = smalloc(sizeof(*cgroup_mnt));
+		if (cgroup_mnt) {
+			cgroup_mnt->path = smalloc_strdup(mnt->mnt_dir);
+			if (!cgroup_mnt->path) {
+				sfree(cgroup_mnt);
+				log_err("fio: could not allocate memory\n");
+			} else {
+				cgroup_mnt->cgroup2 = cgroup2;
+			}
+		}
+	} else {
 		log_err("fio: cgroup blkio does not appear to be mounted\n");
+	}
 
 	endmntent(f);
-	return mntpoint;
+	return cgroup_mnt;
 }
 
 static void add_cgroup(struct thread_data *td, const char *name,
@@ -96,14 +111,14 @@ void cgroup_kill(struct flist_head *clist)
 	fio_sem_up(lock);
 }
 
-static char *get_cgroup_root(struct thread_data *td, char *mnt)
+static char *get_cgroup_root(struct thread_data *td, struct cgroup_mnt *mnt)
 {
 	char *str = malloc(64);
 
 	if (td->o.cgroup)
-		sprintf(str, "%s/%s", mnt, td->o.cgroup);
+		sprintf(str, "%s/%s", mnt->path, td->o.cgroup);
 	else
-		sprintf(str, "%s/%s", mnt, td->o.name);
+		sprintf(str, "%s/%s", mnt->path, td->o.name);
 
 	return str;
 }
@@ -128,22 +143,25 @@ static int write_int_to_file(struct thread_data *td, const char *path,
 
 }
 
-static int cgroup_write_pid(struct thread_data *td, const char *root)
+static int cgroup_write_pid(struct thread_data *td, char *path, bool cgroup2)
 {
 	unsigned int val = td->pid;
 
-	return write_int_to_file(td, root, "tasks", val, "cgroup write pid");
+	if (cgroup2)
+		return write_int_to_file(td, path, "cgroup.procs",
+					 val, "cgroup write pid");
+	return write_int_to_file(td, path, "tasks", val, "cgroup write pid");
 }
 
 /*
  * Move pid to root class
  */
-static int cgroup_del_pid(struct thread_data *td, char *mnt)
+static int cgroup_del_pid(struct thread_data *td, struct cgroup_mnt *mnt)
 {
-	return cgroup_write_pid(td, mnt);
+	return cgroup_write_pid(td, mnt->path, mnt->cgroup2);
 }
 
-int cgroup_setup(struct thread_data *td, struct flist_head *clist, char **mnt)
+int cgroup_setup(struct thread_data *td, struct flist_head *clist, struct cgroup_mnt **mnt)
 {
 	char *root;
 
@@ -172,13 +190,17 @@ int cgroup_setup(struct thread_data *td, struct flist_head *clist, char **mnt)
 		add_cgroup(td, root, clist);
 
 	if (td->o.cgroup_weight) {
+		if ((*mnt)->cgroup2) {
+			log_err("fio: cgroup weit doesn't work with cgroup2\n");
+			goto err;
+		}
 		if (write_int_to_file(td, root, "blkio.weight",
 					td->o.cgroup_weight,
 					"cgroup open weight"))
 			goto err;
 	}
 
-	if (!cgroup_write_pid(td, root)) {
+	if (!cgroup_write_pid(td, root, (*mnt)->cgroup2)) {
 		free(root);
 		return 0;
 	}
@@ -188,14 +210,18 @@ err:
 	return 1;
 }
 
-void cgroup_shutdown(struct thread_data *td, char **mnt)
+void cgroup_shutdown(struct thread_data *td, struct cgroup_mnt *mnt)
 {
-	if (*mnt == NULL)
+	if (mnt == NULL)
 		return;
 	if (!td->o.cgroup_weight && !td->o.cgroup)
-		return;
+		goto out;
 
-	cgroup_del_pid(td, *mnt);
+	cgroup_del_pid(td, mnt);
+out:
+	if (mnt->path)
+		sfree(mnt->path);
+	sfree(mnt);
 }
 
 static void fio_init cgroup_init(void)
diff --git a/cgroup.h b/cgroup.h
index 0bbe25a..10313b7 100644
--- a/cgroup.h
+++ b/cgroup.h
@@ -3,21 +3,28 @@
 
 #ifdef FIO_HAVE_CGROUPS
 
-int cgroup_setup(struct thread_data *, struct flist_head *, char **);
-void cgroup_shutdown(struct thread_data *, char **);
+struct cgroup_mnt {
+	char *path;
+	bool cgroup2;
+};
+
+int cgroup_setup(struct thread_data *, struct flist_head *, struct cgroup_mnt **);
+void cgroup_shutdown(struct thread_data *, struct cgroup_mnt *);
 
 void cgroup_kill(struct flist_head *list);
 
 #else
 
+struct cgroup_mnt;
+
 static inline int cgroup_setup(struct thread_data *td, struct flist_head *list,
-			       char **mnt)
+			       struct cgroup_mnt **mnt)
 {
 	td_verror(td, EINVAL, "cgroup_setup");
 	return 1;
 }
 
-static inline void cgroup_shutdown(struct thread_data *td, char **mnt)
+static inline void cgroup_shutdown(struct thread_data *td, struct cgroup_mnt *mnt)
 {
 }
 
diff --git a/stat.c b/stat.c
index d5240d9..a308eb8 100644
--- a/stat.c
+++ b/stat.c
@@ -1288,6 +1288,7 @@ static struct json_object *show_thread_status_json(struct thread_stat *ts,
 		usr_cpu = 0;
 		sys_cpu = 0;
 	}
+	json_object_add_value_int(root, "job_runtime", ts->total_run_time);
 	json_object_add_value_float(root, "usr_cpu", usr_cpu);
 	json_object_add_value_float(root, "sys_cpu", sys_cpu);
 	json_object_add_value_int(root, "ctx", ts->ctx);
--
To unsubscribe from this list: send the line "unsubscribe fio" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux Kernel]     [Linux SCSI]     [Linux IDE]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux SCSI]

  Powered by Linux