1. 29 May, 2014 2 commits
    • Jens Axboe's avatar
      block: add queue flag for disabling SG merging · 05f1dd53
      Jens Axboe authored
      If devices are not SG starved, we waste a lot of time potentially
      collapsing SG segments. Enough that 1.5% of the CPU time goes
      to this, at only 400K IOPS. Add a queue flag, QUEUE_FLAG_NO_SG_MERGE,
      which just returns the number of vectors in a bio instead of looping
      over all segments and checking for collapsible ones.
      
      Add a BLK_MQ_F_SG_MERGE flag so that drivers can opt-in on the sg
      merging, if they so desire.
      Signed-off-by: default avatarJens Axboe <axboe@fb.com>
      05f1dd53
    • Jens Axboe's avatar
      block: remove 'magic' from struct blk_plug · 4d92a9be
      Jens Axboe authored
      I don't think we've ever caught any bugs with this, and there's the
      list poisoning for the plug lists to catch uninitialized cases.
      So remove the magic member and save 8 bytes in the struct.
      Signed-off-by: default avatarJens Axboe <axboe@fb.com>
      4d92a9be
  2. 28 May, 2014 9 commits
  3. 27 May, 2014 5 commits
  4. 26 May, 2014 2 commits
  5. 23 May, 2014 2 commits
  6. 22 May, 2014 1 commit
    • Jens Axboe's avatar
      blk-mq: split make request handler for multi and single queue · 07068d5b
      Jens Axboe authored
      We want slightly different behavior from them:
      
      - On single queue devices, we currently use the per-process plug
        for deferred IO and for merging.
      
      - On multi queue devices, we don't use the per-process plug, but
        we want to go straight to hardware for SYNC IO.
      
      Split blk_mq_make_request() into a blk_sq_make_request() for single
      queue devices, and retain blk_mq_make_request() for multi queue
      devices. Then we don't need multiple checks for q->nr_hw_queues
      in the request mapping.
      Signed-off-by: default avatarJens Axboe <axboe@fb.com>
      07068d5b
  7. 21 May, 2014 2 commits
  8. 20 May, 2014 5 commits
  9. 19 May, 2014 5 commits
  10. 13 May, 2014 1 commit
    • Jens Axboe's avatar
      blk-mq: improve support for shared tags maps · 0d2602ca
      Jens Axboe authored
      This adds support for active queue tracking, meaning that the
      blk-mq tagging maintains a count of active users of a tag set.
      This allows us to maintain a notion of fairness between users,
      so that we can distribute the tag depth evenly without starving
      some users while allowing others to try unfair deep queues.
      
      If sharing of a tag set is detected, each hardware queue will
      track the depth of its own queue. And if this exceeds the total
      depth divided by the number of active queues, the user is actively
      throttled down.
      
      The active queue count is done lazily to avoid bouncing that data
      between submitter and completer. Each hardware queue gets marked
      active when it allocates its first tag, and gets marked inactive
      when 1) the last tag is cleared, and 2) the queue timeout grace
      period has passed.
      Signed-off-by: default avatarJens Axboe <axboe@fb.com>
      0d2602ca
  11. 10 May, 2014 5 commits
  12. 09 May, 2014 1 commit