Uploaded image for project: 'WiredTiger'
  1. WiredTiger
  2. WT-1098

Performance drop in wtperf medium-btree

    • Type: Icon: Task Task
    • Resolution: Done
    • WT2.3.0
    • Affects Version/s: None
    • Component/s: None
    • None

      The wtperf medium-btree workload exhibited a performance drop caused by one of:

      Have the eviction server concentrate on walking when there are other threads waiting to do eviction.  This is an attempt to avoid cases where the eviction server is busy doing eviction and stalls all other threads. (commit: e507154a88920c98ae0d1b34896ea86fd5e7785e) (detail)
      Only threads that try to read pages when the cache is full should block for eviction. (commit: c32ab9672b8b24677c3064eb88ee1082e2ee23d8) (detail)
      Add statistics to track eviction server candidate list sizes. (commit: 90864466860b2563842fbac53329e2742d169005) (detail)
      Update how multiple eviction threads interact. (commit: 77ff8e033a994362cc7f7a18eaefe727039db8fc) (detail)
      Fix build warning. (commit: db3a6da4e1944e3ed194b7a266721c8663a6dace) (detail)
      update (commit: 4a0de999237bcf7389846c8dce22b22c2dd261c7) (detail)
      Update the list of configuration options: remove --enable-debug, add (commit: 03e18abde844a2cf3aa856807844a45067f33efb) (detail)
      

      The drop is significant. Further investigation shows that the drop relates to the change to stop the eviction server doing eviction. The following change reverts the performance:

      --- a/src/btree/bt_evict.c
      +++ b/src/btree/bt_evict.c
      @@ -670,6 +670,7 @@ __evict_lru(WT_SESSION_IMPL *session, uint32_t flags)
               * are eviction workers running or application threads are waiting
               * for candidates to evict.
               */
      +#if 0
              if (cache->eviction_workers > 0 ||
                  __wt_cond_has_waiters(session, cache->evict_waiter_cond)) {
                      WT_STAT_FAST_CONN_INCR(
      @@ -684,6 +685,11 @@ __evict_lru(WT_SESSION_IMPL *session, uint32_t flags)
                      WT_STAT_FAST_CONN_INCR(session, cache_eviction_server_evicting);
                      WT_RET(__evict_lru_pages(session, 0));
              }
      +#else
      +       WT_RET(__wt_cond_signal(session, cache->evict_waiter_cond));
      +       WT_RET(__evict_lru_pages(session, 0));
      +#endif
      +
              return (0);
       }
       
      

      There are 16 application threads running - so it isn't clear to me why having the eviction server doing actual eviction isn't helping. It could be related to the read-only nature of the workload. I'll dig deeper.

            Assignee:
            Unassigned Unassigned
            Reporter:
            alexander.gorrod@mongodb.com Alexander Gorrod
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

              Created:
              Updated:
              Resolved: