lio and the tcmu userspace passthrough the best of both
play

LIO and the TCMU Userspace Passthrough: The Best of Both Worlds - PowerPoint PPT Presentation

LIO and the TCMU Userspace Passthrough: The Best of Both Worlds Andy Grover <agrover@redhat.com> @iamagrover March 11, 2015 1 LIO AND TCMU What is LIO? Multi-protocol in-kernel SCSI target 2 LIO AND TCMU Multi-protocol in - kernel


  1. LIO and the TCMU Userspace Passthrough: The Best of Both Worlds Andy Grover <agrover@redhat.com> @iamagrover March 11, 2015 1 LIO AND TCMU

  2. What is LIO? Multi-protocol in-kernel SCSI target 2 LIO AND TCMU

  3. Multi-protocol in - kernel SCSI target Unlike other targets like IET, tgt, and SCST, LIO is entirely kernel code. 3 LIO AND TCMU

  4. targetcli rtslib Configuration User Kernel /sys/kernel/config/target Fabrics block /dev/vg0/vol0 iscsi LIO core tcm_fc file disk.img pscsi /dev/sdc iSCSI commands Backstores 4 LIO AND TCMU

  5. Why add userspace command handling? ● Enable wider variety of backstores without kernel code ● Clustered network storage fjlesystems like Ceph, GlusterFS, & other things that have shared libraries available ● File formats beyond .img, such as qcow2 & vmdk for more interesting features & compatibility ● SCSI devices beyond mass storage ● Enable experimentation just like FUSE did for fjlesystems 5 LIO AND TCMU

  6. Userspace handling challenges: perf ● I/O latency ● I/O throughput ● Parallelism within a dev (OoO cmd completion) ● Parallelism across devs, we're good. 6 LIO AND TCMU

  7. Userspace handling challenges: usability ● Confjguration as simple as existing backstores ● Userspace daemon failure ● Userspace daemon activation/restart ● Balance ultimate fmexibility with common use ● Avoid “multiple personalities” ● Reasonable resource usage 7 LIO AND TCMU

  8. SCSI Command processing cmd handling daemon targetcli rtslib Configuration uio0 uio1 User Kernel ! W ! W tcm-user E E N /sys/kernel/config/target N Fabrics block /dev/vg0/vol0 iscsi LIO core tcm_fc file disk.img pscsi /dev/sdc iSCSI commands Backstores 8 LIO AND TCMU

  9. User/Kernel Communication Shared Memory Region Layout (not to scale) cmd handling daemon Mailbox cmdr_off Mailbox cmdr_size cmd_head ● read (wait for cmd) ● read to get ● write (cmds done) cmd_tail configuration dev ● mmap (get SMR) Command Ring add/remove Command Ring (netlink) cmd_entry opcode iovec[] /dev/uio0 /sys/class/uio/uio0 ... uio0 Data Area Data Area in/out data ... tcm-user from LIO core 9 LIO AND TCMU

  10. tcm-user merged in 3.18 ● Initial patch as simple as possible ● Performance tuning not done, BUT an interface fmexible enough to not block likely perf optimization strategies ● Acceptance enabled phase 2: userspace usability pieces 10 LIO AND TCMU

  11. Performance Opportunities for Later ● Larger vmalloc()ed shared mem region ● -> Demand-allocate pages to avoid bloat ● Block size == PAGE_SIZE preferred ● Complete commands out of order ● Must handle data area fragmentation ● Fabrics copy into already-mapped pages ● Just moves the cache misses? ● Fabrics don't have per-lun device queues anyway. Just IB reimplemented poorly? ● Userspace busywait on ring cmd_head 11 LIO AND TCMU

  12. Our user-kernel API ended up fmexible, but fraught with danger! ● Ring operations easy to mess up ● Make every handler write daemon boilerplate? ● And support Netlink? ● And maybe D-Bus??? 12 LIO AND TCMU

  13. tcmu-runner: A standard handler daemon ● Handle the messy ring bits ● Expose a C plugin API ● Implement library routines for common handler code, e.g. mandatory SCSI commands ● Permissively licensed: Apache 2.0 ● Doubles as sample code for do-it-yourself-ers ● Needed a prototype daemon in any case 13 LIO AND TCMU

  14. tape vmdk mmc smc glfs ! W ! targetcli W tcmu-runner E E N N rtslib Configuration User uio0 uio1 Kernel tcm-user /sys/kernel/config/target Fabrics block /dev/vg0/vol0 iscsi LIO core tcm_fc file disk.img pscsi /dev/sdc iSCSI commands Backstores 14 LIO AND TCMU

  15. Handlers Need Confjg Info ● All confjguration should still be through standard LIO mechanisms (i.e. targetcli) ● User backstore create includes a URL-like “confjgstring” that gives handler and per-device handler-specifjc stuf ● This is published in uio sysfs, and netlink add_device message ● Also has info to allow going from uio dev back to matching LIO backstore ● Handler needs attribs, block size, etc. 15 LIO AND TCMU

  16. Confjg tools need Info on Handlers Too! ● Users should call “backstores/foo create x y z” not “backstores/user <confjgstring>” ● targetcli needs param and help strings for xyz ● Verify backstore params are correct before creating the device ● Must be loosely coupled – no hard dependencies on targetcli or tcmu-handler ● Solution: D-Bus! 16 LIO AND TCMU

  17. ! W ! W E E N N tape vmdk mmc smc glfs DBus targetcli tcmu-runner rtslib Configuration User uio0 uio1 Kernel tcm-user /sys/kernel/config/target Fabrics block /dev/vg0/vol0 iscsi LIO core tcm_fc file disk.img pscsi /dev/sdc iSCSI commands Backstores 17 LIO AND TCMU

  18. The QEMU Question ● QEMU has great support for many image formats and other backstores ● Can we reuse or integrate somehow? ● How? ● Build qemu handler code separately and integrate as a tcmu-runner handler? ● Extend qemu to implement TCMU directly, and possibly also enable it to confjgure LIO exports? ● Deferred for now 18 LIO AND TCMU

  19. Getting Involved ● Give feedback! ● agrover@redhat.com, target-devel@vger.kernel.org ● Check out tcmu-runner: https://github.com/agrover/tcmu-runner and its included sample handlers. ● Use github PRs and issue tracking. ● Much help needed, esp. QEMU hackers! ● Start doing some TCMU performance benchmarking ● Start thinking of interesting device types, userspace libraries to use, or weird things to do with a SCSI command sandbox 19 LIO AND TCMU

  20. Thanks! Thanks! Questions? Questions? 20 LIO AND TCMU

  21. lsmcli (libstoragemgmt) Remote Local targetcli targetd tcmu-runner rtslib liblvm User Kernel ! tcm-user W ! W E E N /sys/kernel/config/target N Fabrics block /dev/vg0/vol0 iscsi LIO core tcm_fc file disk.img pscsi /dev/sdc ISCSI commands 21 LIO AND TCMU

  22. User/Kernel Communication Shared Memory Region Layout (not to scale) tcmu-runner Mailbox cmdr_off Mailbox cmdr_size cmd_head ● read (wait for cmd) ● read to get ● write (cmds done) cmd_tail configuration ● mmap (get SMR) Command Ring Command Ring cmd_entry opcode iovec[] /dev/uio0 /sys/class/uio/uio0 ... uio0 Data Area Data Area in/out data ... tcm-user from LIO core 22 LIO AND TCMU

  23. SCSI A set of standards for physically connecting and transferring data between computers and peripheral devices* * http://en.wikipedia.org/wiki/SCSI 23 LIO AND TCMU

  24. SCSI target Initiator sends commands, Target handles them 24 LIO AND TCMU

  25. Multi-protocol SCSI target SCSI commands & data can be sent over many types of physical links and protocols. e.g: ● SCSI Parallel Interface (original) ● iSCSI (over TCP/IP) ● SAS (over SATA cables) ● Fibre Channel (over FCP) ● FCoE (over Ethernet) ● SRP (over Infiniband) ● SBP-2 (over Firewire) 25 LIO AND TCMU

  26. tgtadm Configuration libglfs ! W ! W E tgtd E N N librbd User Kernel Backed by local files or block devices iSCSI commands from initiator disk.img /dev/vg0/vol0 26 LIO AND TCMU

  27. g g n n i m i m ! o n ! o n C o C o o o S S qcow2 vmdk vdi rbd* glfs* others librbd libglfs qemu-lio-tcmu tcmu-runner User Kernel tcm-user /sys/kernel/config/target Fabrics block /dev/vg0/vol0 iscsi LIO core tcm_fc file disk.img pscsi /dev/sdc ISCSI commands 27 LIO AND TCMU

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend