Basic CCheckQueue Benchmarks #9498

pull JeremyRubin wants to merge 2 commits into bitcoin:master from JeremyRubin:checkqueue_bench changing 2 files +104 −0
  1. JeremyRubin commented at 7:06 PM on January 9, 2017: contributor

    Some basic benchmarks for the CCheckQueue, for future work to compare to.

  2. Add Basic CheckQueue Benchmark 9f03110f32
  3. JeremyRubin force-pushed on Jan 9, 2017
  4. fanquake added the label Tests on Jan 9, 2017
  5. in src/bench/checkqueue.cpp:None in 9f03110f32 outdated
      14 | +
      15 | +// This Benchmark tests the CheckQueue with the lightest
      16 | +// weight Checks, so it should make any lock contention
      17 | +// particularly visible
      18 | +static void CCheckQueueSpeed(benchmark::State& state)
      19 | +{
    


    ryanofsky commented at 9:00 PM on January 11, 2017:

    Maybe declare some constants here with the various magic numbers & things that could be tuned in the benchmark, like size of the queue, number of threads, number of jobs to add, number of times to call add, etc.

  6. in src/bench/checkqueue.cpp:None in 9f03110f32 outdated
      30 | +       tg.create_thread([&]{queue.Thread();});
      31 | +    }
      32 | +    while (state.KeepRunning()) {
      33 | +        CCheckQueueControl<FakeJobNoWork> control(&queue);
      34 | +        // We can make vChecks out of the loop because calling Add doesn't
      35 | +        // change the size of the vector.
    


    ryanofsky commented at 9:05 PM on January 11, 2017:

    Maybe add an assert to the end of the benchmark to check this? It's be easy to imagine the vector being moved from in the future, which would invalidate the benchmark.


    ryanofsky commented at 9:11 PM on January 11, 2017:

    Also, if this is true, any reason not to move vChecks declaration out of the while loop too?

  7. in src/bench/checkqueue.cpp:None in 9f03110f32 outdated
      32 | +    while (state.KeepRunning()) {
      33 | +        CCheckQueueControl<FakeJobNoWork> control(&queue);
      34 | +        // We can make vChecks out of the loop because calling Add doesn't
      35 | +        // change the size of the vector.
      36 | +        std::vector<FakeJobNoWork> vChecks;
      37 | +        vChecks.resize(30);
    


    ryanofsky commented at 9:13 PM on January 11, 2017:

    Could call the vector constructor taking a size to eliminate the resize line.

  8. in src/bench/checkqueue.cpp:None in 9f03110f32 outdated
      72 | +    for (auto x = 0; x < std::max(2, GetNumCores()); ++x) {
      73 | +       tg.create_thread([&]{queue.Thread();});
      74 | +    }
      75 | +    while (state.KeepRunning()) {
      76 | +        // Make insecure_rand here so that each iteration is identical.
      77 | +        FastRandomContext insecure_rand(true);
    


    ryanofsky commented at 9:18 PM on January 11, 2017:

    Maybe move this outside while loop, if whatever time this takes isn't meaningful to the benchmark.


    JeremyRubin commented at 9:38 PM on January 11, 2017:

    It is meaningful for each iteration to be identical.


    ryanofsky commented at 11:19 PM on January 11, 2017:

    Oops, should have read the comment above. Though maybe I would reword it to something like "Start with a fresh insecure_rand here" rather than "Make insecure_rand here."

  9. in src/bench/checkqueue.cpp:None in 9f03110f32 outdated
      57 | +    struct PrevectorJob {
      58 | +        prevector<28, uint8_t> p;
      59 | +        PrevectorJob(){
      60 | +        }
      61 | +        PrevectorJob(FastRandomContext& insecure_rand){
      62 | +            p.resize(insecure_rand.rand32() % 56);
    


    ryanofsky commented at 9:24 PM on January 11, 2017:

    Why do this in the constructor instead of the call operator? Wouldn't it be more realistic to have the work done in the worker threads instead of the control thread? Maybe add a comment if this is the intended behavior.


    JeremyRubin commented at 9:40 PM on January 11, 2017:

    FastRandomContext is not thread safe.

    Also we do want the main thread to be doing some work while the worker threads process.

  10. ryanofsky approved
  11. ryanofsky commented at 9:35 PM on January 11, 2017: member

    utACK 9f03110f3256e81173c65c2ed1810efaa74fbc5b. Looks fine, just minor comments.

  12. Address ryanofsky feedback on CCheckQueue benchmarks. Eliminated magic numbers, fixed scoping of vectors (and memory movement component of benchmark). aad4cb5059
  13. ryanofsky approved
  14. ryanofsky commented at 11:20 PM on January 11, 2017: member

    utACK aad4cb50599b15d6fc439e465a616635e96466d1

  15. fanquake commented at 1:59 AM on January 12, 2017: member
    CCheckQueueSpeed,576,0.001812756061554,0.001984249800444,0.001944298545520,6149498,6731089,6595898
    CCheckQueueSpeed,576,0.001704573631287,0.001963026821613,0.001897984494766,5782270,6659114,6438475
    CCheckQueueSpeed,576,0.001838877797127,0.001967173069715,0.001926153070397,6237919,6675994,6534347
    CCheckQueueSpeed,576,0.001697123050690,0.001930065453053,0.001841966890626,5757193,6547343,6248762
    CCheckQueueSpeed,576,0.001837179064751,0.001974612474442,0.001906548523241,6232267,6698444,6467841
    
    CCheckQueueSpeedPrevectorJob,448,0.002283558249474,0.002333313226700,0.002298991062811,7746465,7915155,7799211
    CCheckQueueSpeedPrevectorJob,448,0.002310715615749,0.002362936735153,0.002330580460174,7838558,8015741,7906361
    CCheckQueueSpeedPrevectorJob,448,0.002285875380039,0.002489343285561,0.002338334918022,7754281,8444561,7932261
    CCheckQueueSpeedPrevectorJob,448,0.002281628549099,0.002457186579704,0.002311725169420,7739965,8335454,7842407
    CCheckQueueSpeedPrevectorJob,448,0.002286218106747,0.002332687377930,0.002305187284946,7755492,7913158,7820222
    
  16. laanwj commented at 2:29 PM on January 19, 2017: member

    utack aad4cb5

  17. laanwj merged this on Jan 19, 2017
  18. laanwj closed this on Jan 19, 2017

  19. laanwj referenced this in commit 054d664215 on Jan 19, 2017
  20. codablock referenced this in commit 9e17b0dfc1 on Jan 19, 2018
  21. codablock referenced this in commit 2ef2986b8c on Jan 20, 2018
  22. codablock referenced this in commit a84f8da136 on Jan 21, 2018
  23. andvgal referenced this in commit cd5359b883 on Jan 6, 2019
  24. CryptoCentric referenced this in commit 14864c57f3 on Feb 27, 2019
  25. zkbot referenced this in commit aa225ebb0b on Jan 24, 2020
  26. zkbot referenced this in commit 74ff73abab on Jan 24, 2020
  27. furszy referenced this in commit 4ed15cc69d on Jun 8, 2020
  28. MarcoFalke locked this on Sep 8, 2021

github-metadata-mirror

This is a metadata mirror of the GitHub repository bitcoin/bitcoin. This site is not affiliated with GitHub. Content is generated from a GitHub metadata backup.
generated: 2026-05-02 18:15 UTC

This site is hosted by @0xB10C
More mirrored repositories can be found on mirror.b10c.me