Mercurial > nomad
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;