Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[tsdb] Improve mergeSeriesSet #5920

Merged
merged 3 commits into from Nov 15, 2019

Conversation

naivewong
Copy link
Contributor

@naivewong naivewong commented Aug 19, 2019

Using the idea similar to tsdb/pr616 to improve both time and alloc.
Currently I use the original mergeSeriesSet if the len of the passed-in seriesset slice = 2, because I think the original one is the most efficient way for merging only 2 seriesset.
Benchmark results of BenchmarkMergedSeriesSet.

benchmark                                             old ns/op     new ns/op     delta
BenchmarkMergedSeriesSet/series=100,blocks=1-8        4746          4807          +1.29%
BenchmarkMergedSeriesSet/series=100,blocks=2-8        43989         44127         +0.31%
BenchmarkMergedSeriesSet/series=100,blocks=4-8        130592        89924         -31.14%
BenchmarkMergedSeriesSet/series=100,blocks=8-8        291087        165807        -43.04%
BenchmarkMergedSeriesSet/series=100,blocks=16-8       653520        331504        -49.27%
BenchmarkMergedSeriesSet/series=100,blocks=32-8       1344424       660384        -50.88%
BenchmarkMergedSeriesSet/series=1000,blocks=1-8       8172          8902          +8.93%
BenchmarkMergedSeriesSet/series=1000,blocks=2-8       441894        443515        +0.37%
BenchmarkMergedSeriesSet/series=1000,blocks=4-8       1311465       939890        -28.33%
BenchmarkMergedSeriesSet/series=1000,blocks=8-8       3088490       1883928       -39.00%
BenchmarkMergedSeriesSet/series=1000,blocks=16-8      6871918       3531934       -48.60%
BenchmarkMergedSeriesSet/series=1000,blocks=32-8      12685259      6169894       -51.36%
BenchmarkMergedSeriesSet/series=10000,blocks=1-8      36889         36654         -0.64%
BenchmarkMergedSeriesSet/series=10000,blocks=2-8      3186629       3136228       -1.58%
BenchmarkMergedSeriesSet/series=10000,blocks=4-8      8641566       6963987       -19.41%
BenchmarkMergedSeriesSet/series=10000,blocks=8-8      18862093      13080495      -30.65%
BenchmarkMergedSeriesSet/series=10000,blocks=16-8     41348147      24343738      -41.12%
BenchmarkMergedSeriesSet/series=10000,blocks=32-8     86234288      48789802      -43.42%
BenchmarkMergedSeriesSet/series=20000,blocks=1-8      69872         68857         -1.45%
BenchmarkMergedSeriesSet/series=20000,blocks=2-8      7255853       7572243       +4.36%
BenchmarkMergedSeriesSet/series=20000,blocks=4-8      17507968      15065738      -13.95%
BenchmarkMergedSeriesSet/series=20000,blocks=8-8      37290957      26177634      -29.80%
BenchmarkMergedSeriesSet/series=20000,blocks=16-8     78885648      48284644      -38.79%
BenchmarkMergedSeriesSet/series=20000,blocks=32-8     173633339     98093248      -43.51%

benchmark                                             old allocs     new allocs     delta
BenchmarkMergedSeriesSet/series=100,blocks=1-8        11             11             +0.00%
BenchmarkMergedSeriesSet/series=100,blocks=2-8        217            217            +0.00%
BenchmarkMergedSeriesSet/series=100,blocks=4-8        628            232            -63.06%
BenchmarkMergedSeriesSet/series=100,blocks=8-8        1449           251            -82.68%
BenchmarkMergedSeriesSet/series=100,blocks=16-8       3090           286            -90.74%
BenchmarkMergedSeriesSet/series=100,blocks=32-8       6371           353            -94.46%
BenchmarkMergedSeriesSet/series=1000,blocks=1-8       11             11             +0.00%
BenchmarkMergedSeriesSet/series=1000,blocks=2-8       2017           2017           +0.00%
BenchmarkMergedSeriesSet/series=1000,blocks=4-8       6028           2032           -66.29%
BenchmarkMergedSeriesSet/series=1000,blocks=8-8       14049          2051           -85.40%
BenchmarkMergedSeriesSet/series=1000,blocks=16-8      30090          2086           -93.07%
BenchmarkMergedSeriesSet/series=1000,blocks=32-8      62171          2153           -96.54%
BenchmarkMergedSeriesSet/series=10000,blocks=1-8      11             11             +0.00%
BenchmarkMergedSeriesSet/series=10000,blocks=2-8      20017          20017          +0.00%
BenchmarkMergedSeriesSet/series=10000,blocks=4-8      60028          20032          -66.63%
BenchmarkMergedSeriesSet/series=10000,blocks=8-8      140049         20051          -85.68%
BenchmarkMergedSeriesSet/series=10000,blocks=16-8     300090         20086          -93.31%
BenchmarkMergedSeriesSet/series=10000,blocks=32-8     620171         20153          -96.75%
BenchmarkMergedSeriesSet/series=20000,blocks=1-8      11             11             +0.00%
BenchmarkMergedSeriesSet/series=20000,blocks=2-8      40017          40017          +0.00%
BenchmarkMergedSeriesSet/series=20000,blocks=4-8      120028         40032          -66.65%
BenchmarkMergedSeriesSet/series=20000,blocks=8-8      280049         40051          -85.70%
BenchmarkMergedSeriesSet/series=20000,blocks=16-8     600090         40086          -93.32%
BenchmarkMergedSeriesSet/series=20000,blocks=32-8     1240171        40153          -96.76%

benchmark                                             old bytes     new bytes     delta
BenchmarkMergedSeriesSet/series=100,blocks=1-8        552           552           +0.00%
BenchmarkMergedSeriesSet/series=100,blocks=2-8        7184          7184          +0.00%
BenchmarkMergedSeriesSet/series=100,blocks=4-8        20448         10920         -46.60%
BenchmarkMergedSeriesSet/series=100,blocks=8-8        46976         18184         -61.29%
BenchmarkMergedSeriesSet/series=100,blocks=16-8       100032        32712         -67.30%
BenchmarkMergedSeriesSet/series=100,blocks=32-8       206144        61768         -70.04%
BenchmarkMergedSeriesSet/series=1000,blocks=1-8       552           552           +0.00%
BenchmarkMergedSeriesSet/series=1000,blocks=2-8       64784         64784         +0.00%
BenchmarkMergedSeriesSet/series=1000,blocks=4-8       193248        97320         -49.64%
BenchmarkMergedSeriesSet/series=1000,blocks=8-8       450176        162184        -63.97%
BenchmarkMergedSeriesSet/series=1000,blocks=16-8      964033        291912        -69.72%
BenchmarkMergedSeriesSet/series=1000,blocks=32-8      1991745       551368        -72.32%
BenchmarkMergedSeriesSet/series=10000,blocks=1-8      552           552           +0.00%
BenchmarkMergedSeriesSet/series=10000,blocks=2-8      640784        640784        +0.00%
BenchmarkMergedSeriesSet/series=10000,blocks=4-8      1921249       961320        -49.96%
BenchmarkMergedSeriesSet/series=10000,blocks=8-8      4482178       1602185       -64.25%
BenchmarkMergedSeriesSet/series=10000,blocks=16-8     9604032       2883913       -69.97%
BenchmarkMergedSeriesSet/series=10000,blocks=32-8     19847753      5447371       -72.55%
BenchmarkMergedSeriesSet/series=20000,blocks=1-8      552           552           +0.00%
BenchmarkMergedSeriesSet/series=20000,blocks=2-8      1280784       1280784       +0.00%
BenchmarkMergedSeriesSet/series=20000,blocks=4-8      3841249       1921320       -49.98%
BenchmarkMergedSeriesSet/series=20000,blocks=8-8      8962178       3202184       -64.27%
BenchmarkMergedSeriesSet/series=20000,blocks=16-8     19204032      5763912       -69.99%
BenchmarkMergedSeriesSet/series=20000,blocks=32-8     39687748      10887368      -72.57%

@naivewong naivewong force-pushed the mergeseriesset branch 4 times, most recently from 6bef6a4 to d7ac452 Compare August 20, 2019 03:56
@krasi-georgiev krasi-georgiev self-assigned this Aug 22, 2019
@krasi-georgiev
Copy link
Contributor

I used the PR to test the new automated bench testing

here are the results:
prometheus-community#7 (comment)

@brian-brazil should be able to comment about the PR changes.

@naivewong
Copy link
Contributor Author

@krasi-georgiev I ran the benchmark on the prometheus machine just now. Actually I found the difference is under 5% for all cases in BenchmarkRangeQuery.

@krasi-georgiev
Copy link
Contributor

yes you are right, I completely forgot that the GH actions are run in shared VM env so the results will be inconsistent. Will refactor the testing to use dedicated machines.

tsdb/querier.go Outdated Show resolved Hide resolved
tsdb/querier.go Outdated Show resolved Hide resolved
tsdb/querier.go Outdated Show resolved Hide resolved
tsdb/querier.go Outdated Show resolved Hide resolved
tsdb/querier.go Outdated Show resolved Hide resolved
tsdb/querier.go Outdated Show resolved Hide resolved
tsdb/querier.go Show resolved Hide resolved
Signed-off-by: naivewong <867245430@qq.com>
@brian-brazil
Copy link
Contributor

This looks good. Do benchmarks show much of a difference for two series sets to justify the separate handling?

@naivewong
Copy link
Contributor Author

The benchmarks results on the op time seem a bit better.

BenchmarkMergedSeriesSet/series=100,blocks=1-48        4806          4828          +0.46%
BenchmarkMergedSeriesSet/series=100,blocks=2-48        36804         35332         -4.00%
BenchmarkMergedSeriesSet/series=100,blocks=4-48        103204        79611         -22.86%
BenchmarkMergedSeriesSet/series=100,blocks=8-48        248132        156220        -37.04%
BenchmarkMergedSeriesSet/series=100,blocks=16-48       544840        311781        -42.78%
BenchmarkMergedSeriesSet/series=100,blocks=32-48       1179173       620354        -47.39%
BenchmarkMergedSeriesSet/series=1000,blocks=1-48       10913         10851         -0.57%
BenchmarkMergedSeriesSet/series=1000,blocks=2-48       331775        325112        -2.01%
BenchmarkMergedSeriesSet/series=1000,blocks=4-48       1032389       765167        -25.88%
BenchmarkMergedSeriesSet/series=1000,blocks=8-48       2530947       1543987       -39.00%
BenchmarkMergedSeriesSet/series=1000,blocks=16-48      5705631       3109198       -45.51%
BenchmarkMergedSeriesSet/series=1000,blocks=32-48      12413230      6263710       -49.54%
BenchmarkMergedSeriesSet/series=10000,blocks=1-48      72075         71672         -0.56%
BenchmarkMergedSeriesSet/series=10000,blocks=2-48      3707168       3659727       -1.28%
BenchmarkMergedSeriesSet/series=10000,blocks=4-48      10936970      8235542       -24.70%
BenchmarkMergedSeriesSet/series=10000,blocks=8-48      26332919      16343411      -37.94%
BenchmarkMergedSeriesSet/series=10000,blocks=16-48     58437574      32342400      -44.65%
BenchmarkMergedSeriesSet/series=10000,blocks=32-48     130768647     65279577      -50.08%
BenchmarkMergedSeriesSet/series=20000,blocks=1-48      139307        139256        -0.04%
BenchmarkMergedSeriesSet/series=20000,blocks=2-48      8976742       9290798       +3.50%
BenchmarkMergedSeriesSet/series=20000,blocks=4-48      23147352      17791593      -23.14%
BenchmarkMergedSeriesSet/series=20000,blocks=8-48      54680802      33260669      -39.17%
BenchmarkMergedSeriesSet/series=20000,blocks=16-48     120038946     65521638      -45.42%
BenchmarkMergedSeriesSet/series=20000,blocks=32-48     261474153     128783898     -50.75%

benchmark                                              old allocs     new allocs     delta
BenchmarkMergedSeriesSet/series=100,blocks=1-48        11             11             +0.00%
BenchmarkMergedSeriesSet/series=100,blocks=2-48        217            217            +0.00%
BenchmarkMergedSeriesSet/series=100,blocks=4-48        628            232            -63.06%
BenchmarkMergedSeriesSet/series=100,blocks=8-48        1449           251            -82.68%
BenchmarkMergedSeriesSet/series=100,blocks=16-48       3090           286            -90.74%
BenchmarkMergedSeriesSet/series=100,blocks=32-48       6371           353            -94.46%
BenchmarkMergedSeriesSet/series=1000,blocks=1-48       11             11             +0.00%
BenchmarkMergedSeriesSet/series=1000,blocks=2-48       2017           2017           +0.00%
BenchmarkMergedSeriesSet/series=1000,blocks=4-48       6028           2032           -66.29%
BenchmarkMergedSeriesSet/series=1000,blocks=8-48       14049          2051           -85.40%
BenchmarkMergedSeriesSet/series=1000,blocks=16-48      30090          2086           -93.07%
BenchmarkMergedSeriesSet/series=1000,blocks=32-48      62171          2153           -96.54%
BenchmarkMergedSeriesSet/series=10000,blocks=1-48      11             11             +0.00%
BenchmarkMergedSeriesSet/series=10000,blocks=2-48      20017          20017          +0.00%
BenchmarkMergedSeriesSet/series=10000,blocks=4-48      60028          20032          -66.63%
BenchmarkMergedSeriesSet/series=10000,blocks=8-48      140049         20051          -85.68%
BenchmarkMergedSeriesSet/series=10000,blocks=16-48     300090         20086          -93.31%
BenchmarkMergedSeriesSet/series=10000,blocks=32-48     620171         20153          -96.75%
BenchmarkMergedSeriesSet/series=20000,blocks=1-48      11             11             +0.00%
BenchmarkMergedSeriesSet/series=20000,blocks=2-48      40017          40017          +0.00%
BenchmarkMergedSeriesSet/series=20000,blocks=4-48      120028         40032          -66.65%
BenchmarkMergedSeriesSet/series=20000,blocks=8-48      280049         40051          -85.70%
BenchmarkMergedSeriesSet/series=20000,blocks=16-48     600090         40086          -93.32%
BenchmarkMergedSeriesSet/series=20000,blocks=32-48     1240171        40153          -96.76%

benchmark                                              old bytes     new bytes     delta
BenchmarkMergedSeriesSet/series=100,blocks=1-48        552           552           +0.00%
BenchmarkMergedSeriesSet/series=100,blocks=2-48        7184          7184          +0.00%
BenchmarkMergedSeriesSet/series=100,blocks=4-48        20448         10936         -46.52%
BenchmarkMergedSeriesSet/series=100,blocks=8-48        46976         18200         -61.26%
BenchmarkMergedSeriesSet/series=100,blocks=16-48       100032        32728         -67.28%
BenchmarkMergedSeriesSet/series=100,blocks=32-48       206146        61785         -70.03%
BenchmarkMergedSeriesSet/series=1000,blocks=1-48       552           552           +0.00%
BenchmarkMergedSeriesSet/series=1000,blocks=2-48       64784         64784         +0.00%
BenchmarkMergedSeriesSet/series=1000,blocks=4-48       193250        97337         -49.63%
BenchmarkMergedSeriesSet/series=1000,blocks=8-48       450182        162201        -63.97%
BenchmarkMergedSeriesSet/series=1000,blocks=16-48      964036        291929        -69.72%
BenchmarkMergedSeriesSet/series=1000,blocks=32-48      1991756       551386        -72.32%
BenchmarkMergedSeriesSet/series=10000,blocks=1-48      552           552           +0.00%
BenchmarkMergedSeriesSet/series=10000,blocks=2-48      640784        640784        +0.00%
BenchmarkMergedSeriesSet/series=10000,blocks=4-48      1921251       961337        -49.96%
BenchmarkMergedSeriesSet/series=10000,blocks=8-48      4482179       1602201       -64.25%
BenchmarkMergedSeriesSet/series=10000,blocks=16-48     9604055       2883928       -69.97%
BenchmarkMergedSeriesSet/series=10000,blocks=32-48     19847750      5447391       -72.55%
BenchmarkMergedSeriesSet/series=20000,blocks=1-48      552           552           +0.00%
BenchmarkMergedSeriesSet/series=20000,blocks=2-48      1280784       1280784       +0.00%
BenchmarkMergedSeriesSet/series=20000,blocks=4-48      3841249       1921336       -49.98%
BenchmarkMergedSeriesSet/series=20000,blocks=8-48      8962182       3202200       -64.27%
BenchmarkMergedSeriesSet/series=20000,blocks=16-48     19204039      5763930       -69.99%
BenchmarkMergedSeriesSet/series=20000,blocks=32-48     39687744      10887384      -72.57%

@brian-brazil
Copy link
Contributor

What's that comparing? It looks largely in the noise.

@naivewong
Copy link
Contributor Author

naivewong commented Sep 4, 2019

The benchmark is still comparing the master and this pr for BenchmarkMergedSeriesSet because I think after I added the error caching, there may be some difference but currently the new benchmark results look fine. And for case of the two series set, it corresponds to the benchmark results where blocks=2, the difference is small.

@brian-brazil
Copy link
Contributor

If there's no big difference, let's go with the simpler approach.

Copy link
Contributor

@krasi-georgiev krasi-georgiev left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I can't seem to find a test that ensures correctness for the NewMergedSeriesSet
Can you verify that we have one or write it if missing.

tsdb/querier.go Outdated
return s.err
}

// This function is to call Next() for all SeriesSet.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please follow Golang commentary guidelines.
https://golang.org/doc/effective_go.html#commentary

tsdb/querier.go Outdated
s.all, s.buf = s.buf, s.all
}

// This function is to call Next() for the SeriesSet with the indices of s.ids.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

doesn't seem to describe the exact behavior of the function and the comment is an exact copy of nextAll

@naivewong
Copy link
Contributor Author

The correctness of NewMergedSeriesSet is verified in

func TestMergedSeriesSet(t *testing.T) {

The behaviors of nextAll and nextWithID are different. It's just like the comments that nextAll will calls Next() for all SeriesSet in all array in mergedSeriesSet and nextWithID only calls Next() for some SeriesSet in the all array.

Copy link
Contributor

@krasi-georgiev krasi-georgiev left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM with the small nit.

tsdb/querier.go Outdated Show resolved Hide resolved
Signed-off-by: naivewong <867245430@qq.com>
@krasi-georgiev
Copy link
Contributor

@codesome @brian-brazil unless you have some comments will merge this in the next 1-2 days.

@brian-brazil
Copy link
Contributor

I still think we should be removing binaryMergedSeriesSet.

@krasi-georgiev
Copy link
Contributor

sure that is fine with me.

@krasi-georgiev
Copy link
Contributor

@naivewong could you address this last comment so we can merge this one.

@naivewong
Copy link
Contributor Author

Sorry, I just realized I misunderstood what Brian said before. I thought he just asked me to compare the original and the current method for two series. As a result, the previous result did not show the results without the binaryMergedSeriesSet for 2 series. The following is the actual results without binaryMergedSeriesSet for 2 series -

benchmark                                            old ns/op     new ns/op     delta
BenchmarkMergedSeriesSet/series=100,blocks=2-8       43791         48534         +10.83%
BenchmarkMergedSeriesSet/series=1000,blocks=2-8      478730        510211        +6.58%
BenchmarkMergedSeriesSet/series=10000,blocks=2-8     3509296       3685314       +5.02%
BenchmarkMergedSeriesSet/series=20000,blocks=2-8     8970934       8713768       -2.87%

That's why I added binaryMergedSeriesSet. Sorry for the mistake again.

@brian-brazil
Copy link
Contributor

Thanks, that looks largely irrelevant to me especially when we get to larger datasets where we care more.

@krasi-georgiev
Copy link
Contributor

@brian-brazil so IIUC you are saying that binaryMergedSeriesSet still should be removed as this improvement is not enough to justify the extra complexity?

@brian-brazil
Copy link
Contributor

Yes.

Signed-off-by: naivewong <867245430@qq.com>
@krasi-georgiev
Copy link
Contributor

@brian-brazil the binary set has been removed, do you notice any other issues?

@brian-brazil
Copy link
Contributor

👍

@krasi-georgiev krasi-georgiev merged commit 23c0299 into prometheus:master Nov 15, 2019
@krasi-georgiev
Copy link
Contributor

@naivewong thanks for the patience and the great work!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

3 participants