Uploaded image for project: 'Lustre'
  1. Lustre
  2. LU-19223

shrinker should set nr_scanned

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Unresolved
    • Icon: Medium Medium
    • None
    • None
    • None
    • 3
    • 9223372036854775807

      If the Lustre shrinkers can't free any pages but don't set nr_scanned, they may be called forever by the kernel - see do_shrink_slab:

      while (total_scan >= batch_size ||
                     total_scan >= freeable) {
                      unsigned long ret;
                      unsigned long nr_to_scan = min(batch_size, total_scan);                shrinkctl->nr_to_scan = nr_to_scan;
                      shrinkctl->nr_scanned = nr_to_scan;
                      ret = shrinker->scan_objects(shrinker, shrinkctl);
                      if (ret == SHRINK_STOP)
                              break;
                      freed += ret;                count_vm_events(SLABS_SCANNED, shrinkctl->nr_scanned);
                      total_scan -= shrinkctl->nr_scanned;
                      scanned += shrinkctl->nr_scanned;                cond_resched();
              }

      This can cause near hangs under heavy memory pressure, where we call the shrinker over and over again but don't make progress.  We tend to eventually free enough pages to continue, but it doesn't work well.

            paf0186 Patrick Farrell
            paf0186 Patrick Farrell
            Votes:
            0 Vote for this issue
            Watchers:
            8 Start watching this issue

              Created:
              Updated: