xref: /openbmc/qemu/docs/system/pr-manager.rst (revision 272fa7491ff782588cc9cc1449fe8ca522dd4cfd)
1*c6ff7856SPeter Maydell===============================
20daf34fdSPeter MaydellPersistent reservation managers
3*c6ff7856SPeter Maydell===============================
40daf34fdSPeter Maydell
5*c6ff7856SPeter MaydellSCSI persistent reservations allow restricting access to block devices
60daf34fdSPeter Maydellto specific initiators in a shared storage setup.  When implementing
70daf34fdSPeter Maydellclustering of virtual machines, it is a common requirement for virtual
80daf34fdSPeter Maydellmachines to send persistent reservation SCSI commands.  However,
90daf34fdSPeter Maydellthe operating system restricts sending these commands to unprivileged
100daf34fdSPeter Maydellprograms because incorrect usage can disrupt regular operation of the
110daf34fdSPeter Maydellstorage fabric.
120daf34fdSPeter Maydell
130daf34fdSPeter MaydellFor this reason, QEMU's SCSI passthrough devices, ``scsi-block``
140daf34fdSPeter Maydelland ``scsi-generic`` (both are only available on Linux) can delegate
150daf34fdSPeter Maydellimplementation of persistent reservations to a separate object,
160daf34fdSPeter Maydellthe "persistent reservation manager".  Only PERSISTENT RESERVE OUT and
170daf34fdSPeter MaydellPERSISTENT RESERVE IN commands are passed to the persistent reservation
180daf34fdSPeter Maydellmanager object; other commands are processed by QEMU as usual.
190daf34fdSPeter Maydell
200daf34fdSPeter Maydell-----------------------------------------
210daf34fdSPeter MaydellDefining a persistent reservation manager
220daf34fdSPeter Maydell-----------------------------------------
230daf34fdSPeter Maydell
240daf34fdSPeter MaydellA persistent reservation manager is an instance of a subclass of the
250daf34fdSPeter Maydell"pr-manager" QOM class.
260daf34fdSPeter Maydell
270daf34fdSPeter MaydellRight now only one subclass is defined, ``pr-manager-helper``, which
280daf34fdSPeter Maydellforwards the commands to an external privileged helper program
290daf34fdSPeter Maydellover Unix sockets.  The helper program only allows sending persistent
300daf34fdSPeter Maydellreservation commands to devices for which QEMU has a file descriptor,
310daf34fdSPeter Maydellso that QEMU will not be able to effect persistent reservations
320daf34fdSPeter Maydellunless it has access to both the socket and the device.
330daf34fdSPeter Maydell
340daf34fdSPeter Maydell``pr-manager-helper`` has a single string property, ``path``, which
350daf34fdSPeter Maydellaccepts the path to the helper program's Unix socket.  For example,
360daf34fdSPeter Maydellthe following command line defines a ``pr-manager-helper`` object and
370daf34fdSPeter Maydellattaches it to a SCSI passthrough device::
380daf34fdSPeter Maydell
390daf34fdSPeter Maydell      $ qemu-system-x86_64
400daf34fdSPeter Maydell          -device virtio-scsi \
410daf34fdSPeter Maydell          -object pr-manager-helper,id=helper0,path=/var/run/qemu-pr-helper.sock
420daf34fdSPeter Maydell          -drive if=none,id=hd,driver=raw,file.filename=/dev/sdb,file.pr-manager=helper0
430daf34fdSPeter Maydell          -device scsi-block,drive=hd
440daf34fdSPeter Maydell
450daf34fdSPeter MaydellAlternatively, using ``-blockdev``::
460daf34fdSPeter Maydell
470daf34fdSPeter Maydell      $ qemu-system-x86_64
480daf34fdSPeter Maydell          -device virtio-scsi \
490daf34fdSPeter Maydell          -object pr-manager-helper,id=helper0,path=/var/run/qemu-pr-helper.sock
500daf34fdSPeter Maydell          -blockdev node-name=hd,driver=raw,file.driver=host_device,file.filename=/dev/sdb,file.pr-manager=helper0
510daf34fdSPeter Maydell          -device scsi-block,drive=hd
520daf34fdSPeter Maydell
53773ee3f1SPeter MaydellYou will also need to ensure that the helper program
54773ee3f1SPeter Maydell:command:`qemu-pr-helper` is running, and that it has been
55773ee3f1SPeter Maydellset up to use the same socket filename as your QEMU commandline
56773ee3f1SPeter Maydellspecifies. See the qemu-pr-helper documentation or manpage for
57773ee3f1SPeter Maydellfurther details.
580daf34fdSPeter Maydell
590daf34fdSPeter Maydell---------------------------------------------
600daf34fdSPeter MaydellMultipath devices and persistent reservations
610daf34fdSPeter Maydell---------------------------------------------
620daf34fdSPeter Maydell
630daf34fdSPeter MaydellProper support of persistent reservation for multipath devices requires
640daf34fdSPeter Maydellcommunication with the multipath daemon, so that the reservation is
650daf34fdSPeter Maydellregistered and applied when a path is newly discovered or becomes online
660daf34fdSPeter Maydellagain.  :command:`qemu-pr-helper` can do this if the ``libmpathpersist``
670daf34fdSPeter Maydelllibrary was available on the system at build time.
680daf34fdSPeter Maydell
690daf34fdSPeter MaydellAs of August 2017, a reservation key must be specified in ``multipath.conf``
700daf34fdSPeter Maydellfor ``multipathd`` to check for persistent reservation for newly
710daf34fdSPeter Maydelldiscovered paths or reinstated paths.  The attribute can be added
720daf34fdSPeter Maydellto the ``defaults`` section or the ``multipaths`` section; for example::
730daf34fdSPeter Maydell
740daf34fdSPeter Maydell    multipaths {
750daf34fdSPeter Maydell        multipath {
760daf34fdSPeter Maydell            wwid   XXXXXXXXXXXXXXXX
770daf34fdSPeter Maydell            alias      yellow
780daf34fdSPeter Maydell            reservation_key  0x123abc
790daf34fdSPeter Maydell        }
800daf34fdSPeter Maydell    }
810daf34fdSPeter Maydell
820daf34fdSPeter MaydellLinking :program:`qemu-pr-helper` to ``libmpathpersist`` does not impede
830daf34fdSPeter Maydellits usage on regular SCSI devices.
84