Print this page
13389 After persistent L2ARC import, cache device has constant 8KB/sec load
Reviewed by: Brian Behlendorf <behlendorf1@llnl.gov>
Reviewed by: Dan McDonald <danmcd@joyent.com>
Reviewed by: Toomas Soome <tsoome@me.com>

Split Close
Expand all
Collapse all
          --- old/usr/src/uts/common/fs/zfs/arc.c
          +++ new/usr/src/uts/common/fs/zfs/arc.c
↓ open down ↓ 8339 lines elided ↑ open up ↑
8340 8340   */
8341 8341  static uint64_t
8342 8342  l2arc_write_buffers(spa_t *spa, l2arc_dev_t *dev, uint64_t target_sz)
8343 8343  {
8344 8344          arc_buf_hdr_t           *hdr, *hdr_prev, *head;
8345 8345          uint64_t                write_asize, write_psize, write_lsize, headroom;
8346 8346          boolean_t               full;
8347 8347          l2arc_write_callback_t  *cb = NULL;
8348 8348          zio_t                   *pio, *wzio;
8349 8349          uint64_t                guid = spa_load_guid(spa);
     8350 +        l2arc_dev_hdr_phys_t    *l2dhdr = dev->l2ad_dev_hdr;
8350 8351  
8351 8352          ASSERT3P(dev->l2ad_vdev, !=, NULL);
8352 8353  
8353 8354          pio = NULL;
8354 8355          write_lsize = write_asize = write_psize = 0;
8355 8356          full = B_FALSE;
8356 8357          head = kmem_cache_alloc(hdr_l2only_cache, KM_PUSHPAGE);
8357 8358          arc_hdr_set_flags(head, ARC_FLAG_L2_WRITE_HEAD | ARC_FLAG_HAS_L2HDR);
8358 8359  
8359 8360          /*
↓ open down ↓ 198 lines elided ↑ open up ↑
8558 8559          /* No buffers selected for writing? */
8559 8560          if (pio == NULL) {
8560 8561                  ASSERT0(write_lsize);
8561 8562                  ASSERT(!HDR_HAS_L1HDR(head));
8562 8563                  kmem_cache_free(hdr_l2only_cache, head);
8563 8564  
8564 8565                  /*
8565 8566                   * Although we did not write any buffers l2ad_evict may
8566 8567                   * have advanced.
8567 8568                   */
8568      -                l2arc_dev_hdr_update(dev);
     8569 +                if (dev->l2ad_evict != l2dhdr->dh_evict)
     8570 +                        l2arc_dev_hdr_update(dev);
8569 8571  
8570 8572                  return (0);
8571 8573          }
8572 8574  
8573 8575          if (!dev->l2ad_first)
8574 8576                  ASSERT3U(dev->l2ad_hand, <=, dev->l2ad_evict);
8575 8577  
8576 8578          ASSERT3U(write_asize, <=, target_sz);
8577 8579          ARCSTAT_BUMP(arcstat_l2_writes_sent);
8578 8580          ARCSTAT_INCR(arcstat_l2_write_bytes, write_psize);
↓ open down ↓ 1296 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX