From cff818411879583e66b6985b4179be0e9d4c525c Mon Sep 17 00:00:00 2001 From: Martin Mares Date: Sat, 10 Feb 2007 20:45:59 +0100 Subject: [PATCH] Fix bucket estimator. --- lib/sorter/govern.c | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/lib/sorter/govern.c b/lib/sorter/govern.c index c1ef332c..8380f926 100644 --- a/lib/sorter/govern.c +++ b/lib/sorter/govern.c @@ -178,13 +178,12 @@ sorter_radix_bits(struct sort_context *ctx, struct sort_bucket *b) u64 in = sbuck_size(b); u64 mem = ctx->internal_estimate(ctx, b); - if (in < mem) + if (in <= mem) return 0; - uns n; - for (n = sorter_min_radix_bits; n < sorter_max_radix_bits && n < b->hash_bits; n++) - if ((in >> n) < mem) - break; + uns n = sorter_min_radix_bits; + while (n < sorter_max_radix_bits && n < b->hash_bits && (in >> n) > mem) + n++; return n; } @@ -192,7 +191,7 @@ static void sorter_radix(struct sort_context *ctx, struct sort_bucket *b, uns bits) { uns nbuck = 1 << bits; - SORT_XTRACE(2, "Running radix sort on %s with %d bits of %d (expected size %s)", + SORT_XTRACE(2, "Running radix split on %s with hash %d bits of %d (expecting %s buckets)", F_BSIZE(b), bits, b->hash_bits, stk_fsize(sbuck_size(b) / nbuck)); sorter_start_timer(ctx); -- 2.39.2