changeset 801:610dea97626e

objstore: inline the vector clock in objver There is no point in having the clock be allocated separately. The only place where having it inline may impact performance the objver lookup where we now have to copy the looked up clock into the key structure. This should be relatively cheap compared to the tree traversal and repeated clock comparison calls. Signed-off-by: Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
author Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
date Sun, 05 Apr 2020 11:06:50 -0400
parents f679541c8142
children e03d04a2eaa1
files src/objstore/include/nomad/objstore_backend.h src/objstore/obj.c src/objstore/posix/obj.c
diffstat 3 files changed, 16 insertions(+), 28 deletions(-) [+]
line wrap: on
line diff
--- a/src/objstore/include/nomad/objstore_backend.h	Fri Apr 03 15:54:51 2020 -0400
+++ b/src/objstore/include/nomad/objstore_backend.h	Sun Apr 05 11:06:50 2020 -0400
@@ -71,7 +71,7 @@
 
 struct objver {
 	/* key */
-	struct nvclock *clock;
+	struct nvclock clock;
 
 	/* value */
 	/*
--- a/src/objstore/obj.c	Fri Apr 03 15:54:51 2020 -0400
+++ b/src/objstore/obj.c	Sun Apr 05 11:06:50 2020 -0400
@@ -37,7 +37,7 @@
 	const struct objver *a = va;
 	const struct objver *b = vb;
 
-	return nvclock_cmp_total(a->clock, b->clock);
+	return nvclock_cmp_total(&a->clock, &b->clock);
 }
 
 /*
@@ -102,18 +102,12 @@
 {
 	struct objver *ver;
 	size_t i;
-	int ret;
 
 	ver = mem_cache_alloc(objver_cache);
 	if (!ver)
 		return ERR_PTR(-ENOMEM);
 
-	ver->clock = nvclock_alloc(false);
-	if (!ver->clock) {
-		ret = -ENOMEM;
-		goto err;
-	}
-
+	nvclock_reset(&ver->clock);
 	memset(&ver->attrs, 0, sizeof(ver->attrs));
 
 	ver->private = NULL;
@@ -122,11 +116,6 @@
 	ver->obj = NULL;
 
 	return ver;
-
-err:
-	mem_cache_free(objver_cache, ver);
-
-	return ERR_PTR(ret);
 }
 
 /*
@@ -143,7 +132,6 @@
 	for (i = 0; i < ARRAY_LEN(ver->open); i++)
 		ASSERT3P(ver->open[i], ==, NULL);
 
-	nvclock_free(ver->clock);
 	mem_cache_free(objver_cache, ver);
 }
 
@@ -332,7 +320,7 @@
 		 * backend to fetch it.
 		 */
 		struct objver key = {
-			.clock = (struct nvclock *) clock,
+			.clock = *clock,
 		};
 
 		/* check the cache */
@@ -407,7 +395,7 @@
 	rb_for_each(&obj->heads, head) {
 		ASSERT3P(head, !=, new);
 
-		switch (nvclock_cmp(head->clock, new->clock)) {
+		switch (nvclock_cmp(&head->clock, &new->clock)) {
 			case NVC_EQ:
 				panic("found duplicate head version");
 			case NVC_LT:
@@ -445,7 +433,7 @@
 		return ver;
 
 	ver->obj = obj;
-	*ver->clock = *clock;
+	ver->clock = *clock;
 
 	ret = obj->ops->getattr(ver, &ver->attrs);
 	if (ret)
@@ -476,7 +464,7 @@
 	struct obj *obj = open->obj;
 	int ret;
 
-	ret = open->obj->ops->cow(open->cow.prev_ver, open->ver->clock);
+	ret = open->obj->ops->cow(open->cow.prev_ver, &open->ver->clock);
 	if (ret)
 		return ret;
 
@@ -526,7 +514,7 @@
 
 	old = open->ver;
 
-	new_clock = *old->clock;
+	new_clock = old->clock;
 	ret = nvclock_inc(&new_clock);
 	if (ret)
 		return ret;
@@ -537,7 +525,7 @@
 		return PTR_ERR(new);
 
 	new->obj = open->obj;
-	*new->clock = new_clock;
+	new->clock = new_clock;
 	new->attrs = old->attrs;
 
 	/* substitute the new version in the open structure */
--- a/src/objstore/posix/obj.c	Fri Apr 03 15:54:51 2020 -0400
+++ b/src/objstore/posix/obj.c	Sun Apr 05 11:06:50 2020 -0400
@@ -135,7 +135,7 @@
 	int ret;
 
 	if (!existing_fd) {
-		fd = open_ver(ver->obj, ver->clock, false, false);
+		fd = open_ver(ver->obj, &ver->clock, false, false);
 		if (fd < 0)
 			return fd;
 	}
@@ -174,7 +174,7 @@
 	int ret;
 
 	if (!existing_fd) {
-		fd = open_ver(ver->obj, ver->clock, false, true);
+		fd = open_ver(ver->obj, &ver->clock, false, true);
 		if (fd < 0)
 			return fd;
 	}
@@ -209,7 +209,7 @@
 	ssize_t ret;
 
 	if (!existing_fd) {
-		fd = open_ver(ver->obj, ver->clock, false, true);
+		fd = open_ver(ver->obj, &ver->clock, false, true);
 		if (fd < 0)
 			return fd;
 	}
@@ -229,7 +229,7 @@
 	int ret;
 
 	if (!existing_fd) {
-		fd = open_ver(ver->obj, ver->clock, false, true);
+		fd = open_ver(ver->obj, &ver->clock, false, true);
 		if (fd < 0)
 			return fd;
 	}
@@ -260,7 +260,7 @@
 	off_t off;
 	int ret;
 
-	src_fd = open_ver(old->obj, old->clock, false, false);
+	src_fd = open_ver(old->obj, &old->clock, false, false);
 	if (src_fd < 0)
 		return src_fd;
 
@@ -335,7 +335,7 @@
 	int ret;
 	int fd;
 
-	fd = open_ver(ver->obj, ver->clock, false, true);
+	fd = open_ver(ver->obj, &ver->clock, false, true);
 	if (fd < 0)
 		return fd;
 
@@ -400,7 +400,7 @@
 	int ret;
 	int fd;
 
-	fd = open_ver(ver->obj, ver->clock, false, false);
+	fd = open_ver(ver->obj, &ver->clock, false, false);
 	if (fd < 0)
 		return fd;