]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
interval_set: optimize intersect_of for identical spans 17265/head
authorZac Medico <zmedico@gmail.com>
Sun, 27 Aug 2017 12:25:01 +0000 (05:25 -0700)
committerZac Medico <zmedico@gmail.com>
Wed, 30 Aug 2017 20:04:06 +0000 (13:04 -0700)
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>
src/include/interval_set.h

index 46e37de79928d98d2da6b7be15bdd55770ab5244..e05eacae41efacf6383731da8aa09706ea9e2bc8 100644 (file)
@@ -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);