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

Reduce CPU overhead and performance degradation with larger striped files while reading uncached data in 1.8

    XMLWordPrintable

Details

    • Improvement
    • Resolution: Won't Fix
    • Minor
    • None
    • Lustre 1.8.7
    • Tested on RHEL 5.6, OFED 1.5.3.1, and Lustre 1.8.6
    • 9738

    Description

      Wile looking at functions with high CPU utilization for LU-1056 we came across lov_stripe_size as one of the top functions for files with larger striping. After looking into this it appears the reason can be summarized as:

      With the current read implementation in Lustre 1.8 ll_readpage->ll_readahead->odd_merge_lvb is called for every page of a file at least once. Even if the read ahead pre-fetched the data into cache it still requires a subsequent call to ll_readpage to set the page flags to uptodate. obd_merge_lvb is used to calculate the kms for an inode and calls lov_stripe_size for every stripe in a file. So the larger the striping of a file the larger the overhead in this calculation. To reduce the overhead on calculating the kms i_size_read() could be used for the inode instead of locking the stripe and calling obd_merge_lvb. The inode size should be updated by ll_extent_lock which is called by ll_file_aio_read.

      Attachments

        1. stripe_perf.png
          2.92 MB
          Jeremy Filizetti

        Issue Links

          Activity

            People

              adilger Andreas Dilger
              jfilizetti Jeremy Filizetti
              Votes:
              0 Vote for this issue
              Watchers:
              5 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: