From: Zac Medico Date: Sun, 27 Aug 2017 12:25:01 +0000 (-0700) Subject: interval_set: optimize intersect_of for identical spans X-Git-Tag: v13.0.1~1073^2 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=b6a035666c2765f8895ee9991348dbc025613ed7;p=ceph-ci.git interval_set: optimize intersect_of for identical spans Optimize comparisons for identical spans of intervals. When this patch is combined with the previous map insert optimization, a benchmark using 400000 identical intervals shows a 7 times performance improvement in comparison to without the patches. Signed-off-by: Zac Medico --- diff --git a/src/include/interval_set.h b/src/include/interval_set.h index 46e37de7992..e05eacae41e 100644 --- a/src/include/interval_set.h +++ b/src/include/interval_set.h @@ -471,6 +471,17 @@ class interval_set { { pa++; continue; } if (pb->first + pb->second <= pa->first) { pb++; continue; } + + if (*pa == *pb) { + do { + mi = m.insert(mi, *pa); + _size += pa->second; + ++pa; + ++pb; + } while (pa != a.m.end() && pb != b.m.end() && *pa == *pb); + continue; + } + T start = MAX(pa->first, pb->first); T en = MIN(pa->first+pa->second, pb->first+pb->second); assert(en > start);