[PATCH v2 00/34] iser target for 3.19

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hey Nic & Co,

I modified the logging patches to come after the stable related
patches. Also, given it's been a while, I'm piggy-backing some
more patches I have laying around to the series hoping they
will land in 3.19.

This series mainly consists:

Patches 1-15: Some error flow fixes for live target stack shutdown
	and cable pull with stress IO scenarios, as well as some
	fixes in the area of bond failover scenarios.
	(stable 3.10+ material)

Patches 16-20: expose t10_pi attribute correctly and fix a crash
	due to a bad dereference.
	(stable 3.15+ material)

Patch 21: Workaround for live target stack unload in the presence
	of multiple (60+) of active sessions.

Patches 22-29: Some completion processing modifications done for
	simplification and enhancements.

Patches 30-31: Some more fixes needed in the live shutdown case.

Patches 32-33: Some logging refactoring. It is much easier to
	instruct a user to increase the log level in this case.

Patch 34: Nit - remove code duplication.

While this set makes things better, there is still some work
left to do especially in the area of multi-session error flows.

I ran some performance benchmarks on this set, I was able to
get iser target to service ~2100K read IOPs and ~1750K write
IOPs using 4 2.6GHz Xeon cores against a single initiator
(single 40GE/FDR link). More work can be done in this area indeed,
no good reason why we wouldn't get these numbers with a single core.
Some of the todos are:
- Avoid data copy for ImmediateData writes (would require to refactor
  the post_recv buffers logic).
- Polling the CQ from a kthread instead of a work-queue which would
  benefit in:
  * better concurrency in the multi-connection case as we won't
    serialize completion works which are bound to the same MSIX vector.
  * Reduce interrupts by avoiding re-arming the CQ to maintain
    fairness between multiple connections, we can just
    schedule()/cond_resched() instead.
- Closer examination of the locking schemes taken in iscsit layer.
- Reordering iser structures to fit hot items into cachelines.

Changes from v1:
- Moved logging patches to the end.
- Reordered patches in the order of:
  1. stable 3.10+
  2. stable 3.15+,
  3. enhancements/improvements
  4. logging
- Changed cma_id context <-> isert_conn and isert_portal mappings (#10)
- Replaced rdma_destroy_qp with ib_destroy_qp and re-positioned it (#11)
- Refactored iser logout sequence instead of removing an uneeded wait (#31)
- Added completion precessing modification patches and some more
  minor fixes that have been laying around.

Changes from v0:
- Fix CHAP and mutual CHAP login breakage introduced in patch #9
  kudos to Slava for staying alert
- Fix mthca/mlx4 HCAs breakage introduced in patch #13 (non supporting PI)
  kudos to Adam for finding this quickly
- Removed patch "Remove t10_pi attribute altogether".
  Instead, included patch "Expose supported protection ops according to t10_pi"
  if t10_pi is not set we fall to SW mode.
- Added patch #21 to get rid of redundant wait for logout completion

Sagi Grimberg (34):
  iscsi-target: Add call to wait_conn in establishment error flow
  iser-target: Destroy the connection when getting a connect error
    event
  iser-target: Initiate connection termination only once
  iser-target: Don't deffer disconnected handler to a work
  iser-target: Reject connect request in failure path
  iser-target: Introduce state ISER_CONN_FULL_FEATURE
  iser-target: Parallelize CM connection establishment
  iser-target: Use kref_get_unless_zero in connected_handler
  iser-target: Acquire conn_mutex when changing connection state
  iser-target: Don't override cm_id context
  iser-traget: destroy connection qp after destroying connection cm_id
  iser-target: Move cma_id setup to a function
  iser-target: Handle ADDR_CHANGE event for listener cm_id
  iser-target: Deffer the last part of wait_conn to a work
  iser-target: Decrement completion context active_qps in error flow
  iser-target: Move pi context allocation to a function
  iser-target: Move protection information handling to a routine
  iser-target: Allocate PI contexts dynamically
  iser-target: Fix NULL dereference in SW mode DIF
  iscsi,iser-target: Expose supported protection ops according to
    t10_pi
  iser-target: Work-around live target stack shutdown resource cleanup
  iser-target: Remove interrupt coalescing
  iser-target: Unite error completion handler for RX and TX
  iser-target: Cast wr_id with uintptr_t instead of unsinged long
  iser-target: Centralize completion elements to a context
  iser-target: Use single CQ for TX and RX
  iser-target: Remove an atomic operation from the IO path
  iser-target: Introduce isert_poll_budget
  iser-target: Reduce CQ lock contention by batch polling
  iser-target: Don't wait for session commands from completion context
  iser-target: Fix logout sequence
  iser-target: Use debug_level parameter to control logging level
  iser-target: Adjust log levels and prettify some prints
  iser-target: Remove code duplication

 drivers/infiniband/ulp/isert/ib_isert.c   | 1612 +++++++++++++++--------------
 drivers/infiniband/ulp/isert/ib_isert.h   |   80 ++-
 drivers/target/iscsi/iscsi_target_login.c |   10 +-
 3 files changed, 904 insertions(+), 798 deletions(-)

--
To unsubscribe from this list: send the line "unsubscribe target-devel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux SCSI]     [Kernel Newbies]     [Linux SCSI Target Infrastructure]     [Share Photos]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Linux IIO]     [Device Mapper]

  Powered by Linux