From: Elijah Newren <newren@gmail.com>
To: git@vger.kernel.org
Cc: pclouds@gmail.com, Elijah Newren <newren@gmail.com>
Subject: [RFC PATCH] fix-v1: revert "pack-objects: shrink delta_size field in struct object_entry"
Date: Wed, 18 Jul 2018 15:51:09 -0700 [thread overview]
Message-ID: <20180718225110.17639-2-newren@gmail.com> (raw)
In-Reply-To: <20180718225110.17639-1-newren@gmail.com>
This reverts commit 0aca34e8269514ebb67676e0470a314615494ae8.
---
builtin/pack-objects.c | 26 ++++++++++----------------
pack-objects.h | 23 +----------------------
2 files changed, 11 insertions(+), 38 deletions(-)
diff --git a/builtin/pack-objects.c b/builtin/pack-objects.c
index 71056d8294..4775b4b4e5 100644
--- a/builtin/pack-objects.c
+++ b/builtin/pack-objects.c
@@ -35,12 +35,10 @@
#define IN_PACK(obj) oe_in_pack(&to_pack, obj)
#define SIZE(obj) oe_size(&to_pack, obj)
#define SET_SIZE(obj,size) oe_set_size(&to_pack, obj, size)
-#define DELTA_SIZE(obj) oe_delta_size(&to_pack, obj)
#define DELTA(obj) oe_delta(&to_pack, obj)
#define DELTA_CHILD(obj) oe_delta_child(&to_pack, obj)
#define DELTA_SIBLING(obj) oe_delta_sibling(&to_pack, obj)
#define SET_DELTA(obj, val) oe_set_delta(&to_pack, obj, val)
-#define SET_DELTA_SIZE(obj, val) oe_set_delta_size(&to_pack, obj, val)
#define SET_DELTA_CHILD(obj, val) oe_set_delta_child(&to_pack, obj, val)
#define SET_DELTA_SIBLING(obj, val) oe_set_delta_sibling(&to_pack, obj, val)
@@ -148,7 +146,7 @@ static void *get_delta(struct object_entry *entry)
oid_to_hex(&DELTA(entry)->idx.oid));
delta_buf = diff_delta(base_buf, base_size,
buf, size, &delta_size, 0);
- if (!delta_buf || delta_size != DELTA_SIZE(entry))
+ if (!delta_buf || delta_size != entry->delta_size)
die("delta size changed");
free(buf);
free(base_buf);
@@ -299,14 +297,14 @@ static unsigned long write_no_reuse_object(struct hashfile *f, struct object_ent
FREE_AND_NULL(entry->delta_data);
entry->z_delta_size = 0;
} else if (entry->delta_data) {
- size = DELTA_SIZE(entry);
+ size = entry->delta_size;
buf = entry->delta_data;
entry->delta_data = NULL;
type = (allow_ofs_delta && DELTA(entry)->idx.offset) ?
OBJ_OFS_DELTA : OBJ_REF_DELTA;
} else {
buf = get_delta(entry);
- size = DELTA_SIZE(entry);
+ size = entry->delta_size;
type = (allow_ofs_delta && DELTA(entry)->idx.offset) ?
OBJ_OFS_DELTA : OBJ_REF_DELTA;
}
@@ -1518,7 +1516,7 @@ static void check_object(struct object_entry *entry)
oe_set_type(entry, entry->in_pack_type);
SET_SIZE(entry, in_pack_size); /* delta size */
SET_DELTA(entry, base_entry);
- SET_DELTA_SIZE(entry, in_pack_size);
+ entry->delta_size = in_pack_size;
entry->delta_sibling_idx = base_entry->delta_child_idx;
SET_DELTA_CHILD(base_entry, entry);
unuse_pack(&w_curs);
@@ -1954,7 +1952,7 @@ static int try_delta(struct unpacked *trg, struct unpacked *src,
max_size = trg_size/2 - the_hash_algo->rawsz;
ref_depth = 1;
} else {
- max_size = DELTA_SIZE(trg_entry);
+ max_size = trg_entry->delta_size;
ref_depth = trg->depth;
}
max_size = (uint64_t)max_size * (max_depth - src->depth) /
@@ -2023,14 +2021,10 @@ static int try_delta(struct unpacked *trg, struct unpacked *src,
delta_buf = create_delta(src->index, trg->data, trg_size, &delta_size, max_size);
if (!delta_buf)
return 0;
- if (delta_size >= (1U << OE_DELTA_SIZE_BITS)) {
- free(delta_buf);
- return 0;
- }
if (DELTA(trg_entry)) {
/* Prefer only shallower same-sized deltas. */
- if (delta_size == DELTA_SIZE(trg_entry) &&
+ if (delta_size == trg_entry->delta_size &&
src->depth + 1 >= trg->depth) {
free(delta_buf);
return 0;
@@ -2045,7 +2039,7 @@ static int try_delta(struct unpacked *trg, struct unpacked *src,
free(trg_entry->delta_data);
cache_lock();
if (trg_entry->delta_data) {
- delta_cache_size -= DELTA_SIZE(trg_entry);
+ delta_cache_size -= trg_entry->delta_size;
trg_entry->delta_data = NULL;
}
if (delta_cacheable(src_size, trg_size, delta_size)) {
@@ -2058,7 +2052,7 @@ static int try_delta(struct unpacked *trg, struct unpacked *src,
}
SET_DELTA(trg_entry, src_entry);
- SET_DELTA_SIZE(trg_entry, delta_size);
+ trg_entry->delta_size = delta_size;
trg->depth = src->depth + 1;
return 1;
@@ -2181,11 +2175,11 @@ static void find_deltas(struct object_entry **list, unsigned *list_size,
if (entry->delta_data && !pack_to_stdout) {
unsigned long size;
- size = do_compress(&entry->delta_data, DELTA_SIZE(entry));
+ size = do_compress(&entry->delta_data, entry->delta_size);
if (size < (1U << OE_Z_DELTA_BITS)) {
entry->z_delta_size = size;
cache_lock();
- delta_cache_size -= DELTA_SIZE(entry);
+ delta_cache_size -= entry->delta_size;
delta_cache_size += entry->z_delta_size;
cache_unlock();
} else {
diff --git a/pack-objects.h b/pack-objects.h
index edf74dabdd..0e08f10437 100644
--- a/pack-objects.h
+++ b/pack-objects.h
@@ -14,7 +14,6 @@
* above this limit. Don't lower it too much.
*/
#define OE_SIZE_BITS 31
-#define OE_DELTA_SIZE_BITS 20
/*
* State flags for depth-first search used for analyzing delta cycles.
@@ -92,8 +91,7 @@ struct object_entry {
uint32_t delta_sibling_idx; /* other deltified objects who
* uses the same base as me
*/
- unsigned delta_size_:OE_DELTA_SIZE_BITS; /* delta data size (uncompressed) */
- unsigned delta_size_valid:1;
+ unsigned long delta_size; /* delta data size (uncompressed) */
unsigned in_pack_idx:OE_IN_PACK_BITS; /* already in pack */
unsigned z_delta_size:OE_Z_DELTA_BITS;
unsigned type_valid:1;
@@ -327,23 +325,4 @@ static inline void oe_set_size(struct packing_data *pack,
}
}
-static inline unsigned long oe_delta_size(struct packing_data *pack,
- const struct object_entry *e)
-{
- if (e->delta_size_valid)
- return e->delta_size_;
- return oe_size(pack, e);
-}
-
-static inline void oe_set_delta_size(struct packing_data *pack,
- struct object_entry *e,
- unsigned long size)
-{
- e->delta_size_ = size;
- e->delta_size_valid = e->delta_size_ == size;
- if (!e->delta_size_valid && size != oe_size(pack, e))
- BUG("this can only happen in check_object() "
- "where delta size is the same as entry size");
-}
-
#endif
--
2.18.0.1.gd83e732e4e
next prev parent reply other threads:[~2018-07-18 22:51 UTC|newest]
Thread overview: 44+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-07-18 22:51 2.18.0 Regression: packing performance and effectiveness Elijah Newren
2018-07-18 22:51 ` Elijah Newren [this message]
2018-07-18 22:51 ` [RFC PATCH] fix-v2: make OE_DELTA_SIZE_BITS a bit bigger Elijah Newren
2018-07-19 5:41 ` 2.18.0 Regression: packing performance and effectiveness Duy Nguyen
2018-07-19 5:49 ` Jeff King
2018-07-19 15:27 ` Elijah Newren
2018-07-19 15:43 ` Duy Nguyen
2018-07-19 5:44 ` Jeff King
2018-07-19 5:57 ` Duy Nguyen
2018-07-19 15:16 ` Duy Nguyen
2018-07-19 16:42 ` Elijah Newren
2018-07-19 17:23 ` Jeff King
2018-07-19 17:31 ` Duy Nguyen
2018-07-19 18:24 ` Duy Nguyen
2018-07-19 19:17 ` Jeff King
2018-07-19 23:11 ` Elijah Newren
2018-07-20 5:28 ` Jeff King
2018-07-20 5:30 ` Jeff King
2018-07-20 5:47 ` Duy Nguyen
2018-07-20 17:21 ` Elijah Newren
2018-07-19 17:04 ` Jeff King
2018-07-19 19:25 ` Junio C Hamano
2018-07-19 19:27 ` Junio C Hamano
2018-07-20 15:39 ` [PATCH] pack-objects: fix performance issues on packing large deltas Nguyễn Thái Ngọc Duy
2018-07-20 17:40 ` Jeff King
2018-07-21 4:23 ` Duy Nguyen
2018-07-23 21:37 ` Jeff King
2018-07-20 17:43 ` Elijah Newren
2018-07-20 23:52 ` Elijah Newren
2018-07-21 4:07 ` Duy Nguyen
2018-07-21 7:08 ` Duy Nguyen
2018-07-21 4:47 ` Duy Nguyen
2018-07-21 6:56 ` Elijah Newren
2018-07-21 7:14 ` Duy Nguyen
2018-07-22 6:22 ` Elijah Newren
2018-07-22 6:49 ` Duy Nguyen
2018-07-23 12:34 ` Elijah Newren
2018-07-23 15:50 ` Duy Nguyen
2018-07-22 8:04 ` [PATCH v2] " Nguyễn Thái Ngọc Duy
2018-07-23 18:04 ` Junio C Hamano
2018-07-23 18:38 ` Duy Nguyen
2018-07-23 18:49 ` Duy Nguyen
2018-07-23 21:30 ` Jeff King
2018-07-26 8:12 ` Johannes Sixt
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20180718225110.17639-2-newren@gmail.com \
--to=newren@gmail.com \
--cc=git@vger.kernel.org \
--cc=pclouds@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.