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

Performance drop in wtperf medium-btree

    XMLWordPrintable

    Details

    • Type: Task
    • Status: Closed
    • Resolution: Done
    • Affects Version/s: None
    • Fix Version/s: WT2.3.0
    • Component/s: None
    • Labels:
      None

      Description

      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.

        Attachments

          Issue Links

            Activity

              People

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

                Dates

                Created:
                Updated:
                Resolved: