xen/blkif: document blkif multi-queue/ring extension
Document the multi-queue/ring feature in terms of XenStore keys to be written by the backend and by the frontend. Signed-off-by: Bob Liu <bob.liu@oracle.com> Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
This commit is contained in:
Родитель
627ccd20b4
Коммит
eb5df87fab
|
@ -27,6 +27,54 @@
|
||||||
typedef uint16_t blkif_vdev_t;
|
typedef uint16_t blkif_vdev_t;
|
||||||
typedef uint64_t blkif_sector_t;
|
typedef uint64_t blkif_sector_t;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Multiple hardware queues/rings:
|
||||||
|
* If supported, the backend will write the key "multi-queue-max-queues" to
|
||||||
|
* the directory for that vbd, and set its value to the maximum supported
|
||||||
|
* number of queues.
|
||||||
|
* Frontends that are aware of this feature and wish to use it can write the
|
||||||
|
* key "multi-queue-num-queues" with the number they wish to use, which must be
|
||||||
|
* greater than zero, and no more than the value reported by the backend in
|
||||||
|
* "multi-queue-max-queues".
|
||||||
|
*
|
||||||
|
* For frontends requesting just one queue, the usual event-channel and
|
||||||
|
* ring-ref keys are written as before, simplifying the backend processing
|
||||||
|
* to avoid distinguishing between a frontend that doesn't understand the
|
||||||
|
* multi-queue feature, and one that does, but requested only one queue.
|
||||||
|
*
|
||||||
|
* Frontends requesting two or more queues must not write the toplevel
|
||||||
|
* event-channel and ring-ref keys, instead writing those keys under sub-keys
|
||||||
|
* having the name "queue-N" where N is the integer ID of the queue/ring for
|
||||||
|
* which those keys belong. Queues are indexed from zero.
|
||||||
|
* For example, a frontend with two queues must write the following set of
|
||||||
|
* queue-related keys:
|
||||||
|
*
|
||||||
|
* /local/domain/1/device/vbd/0/multi-queue-num-queues = "2"
|
||||||
|
* /local/domain/1/device/vbd/0/queue-0 = ""
|
||||||
|
* /local/domain/1/device/vbd/0/queue-0/ring-ref = "<ring-ref#0>"
|
||||||
|
* /local/domain/1/device/vbd/0/queue-0/event-channel = "<evtchn#0>"
|
||||||
|
* /local/domain/1/device/vbd/0/queue-1 = ""
|
||||||
|
* /local/domain/1/device/vbd/0/queue-1/ring-ref = "<ring-ref#1>"
|
||||||
|
* /local/domain/1/device/vbd/0/queue-1/event-channel = "<evtchn#1>"
|
||||||
|
*
|
||||||
|
* It is also possible to use multiple queues/rings together with
|
||||||
|
* feature multi-page ring buffer.
|
||||||
|
* For example, a frontend requests two queues/rings and the size of each ring
|
||||||
|
* buffer is two pages must write the following set of related keys:
|
||||||
|
*
|
||||||
|
* /local/domain/1/device/vbd/0/multi-queue-num-queues = "2"
|
||||||
|
* /local/domain/1/device/vbd/0/ring-page-order = "1"
|
||||||
|
* /local/domain/1/device/vbd/0/queue-0 = ""
|
||||||
|
* /local/domain/1/device/vbd/0/queue-0/ring-ref0 = "<ring-ref#0>"
|
||||||
|
* /local/domain/1/device/vbd/0/queue-0/ring-ref1 = "<ring-ref#1>"
|
||||||
|
* /local/domain/1/device/vbd/0/queue-0/event-channel = "<evtchn#0>"
|
||||||
|
* /local/domain/1/device/vbd/0/queue-1 = ""
|
||||||
|
* /local/domain/1/device/vbd/0/queue-1/ring-ref0 = "<ring-ref#2>"
|
||||||
|
* /local/domain/1/device/vbd/0/queue-1/ring-ref1 = "<ring-ref#3>"
|
||||||
|
* /local/domain/1/device/vbd/0/queue-1/event-channel = "<evtchn#1>"
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* REQUEST CODES.
|
* REQUEST CODES.
|
||||||
*/
|
*/
|
||||||
|
|
Загрузка…
Ссылка в новой задаче