]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
interval_set: optimize intersect_of for identical spans 17514/head
authorZac Medico <zmedico@gmail.com>
Sun, 27 Aug 2017 12:25:01 +0000 (05:25 -0700)
committerNathan Cutler <ncutler@suse.com>
Wed, 6 Sep 2017 08:40:43 +0000 (10:40 +0200)
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 <zmedico@gmail.com>
(cherry picked from commit b6a035666c2765f8895ee9991348dbc025613ed7)

src/include/interval_set.h

index 6a7dcc6d12734c43920dc8ea2022be75fb3ba735..d35a11f57c12ce6b9090e62b1337045b98a82014 100644 (file)
@@ -455,6 +455,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);