• 検索結果がありません。

背景 : クライアント仮想化と USB クライアント仮想化では ユーザ VM と同時に複数のサービス VM が実行され さまざまな機能を提供する 一例を挙げると 認証機能の提供 : USB 接続のスマートカードリーダや生体認証装置を利用 インスタントオンの VoIP やメッセンジャーアプリケーション

N/A
N/A
Protected

Academic year: 2021

シェア "背景 : クライアント仮想化と USB クライアント仮想化では ユーザ VM と同時に複数のサービス VM が実行され さまざまな機能を提供する 一例を挙げると 認証機能の提供 : USB 接続のスマートカードリーダや生体認証装置を利用 インスタントオンの VoIP やメッセンジャーアプリケーション"

Copied!
12
0
0

読み込み中.... (全文を見る)

全文

(1)

Xenの準仮想化USBドライバの開発

岩松 昇

n_iwamatsu@jp.fujitsu.com

(2)

背景: クライアント仮想化とUSB

クライアント仮想化では、ユーザVMと同時に複数のサービスVMが実行され、さ

まざまな機能を提供する。一例を挙げると、

認証機能の提供: USB接続のスマートカードリーダや生体認証装置を利用

インスタントオンのVoIPやメッセンジャーアプリケーション: USB接続のカメラやオーディオを利用

このような場合、ユーザVMとサービスVMから同時に同じUSBホストコントローラ

を利用する必要がある。

Hypervisor

User VM Service VM Service VM

Laptop

USB Host Controller

User OS Service OS Service OS

Authentication VoIP/ Messenger Office/Music apps

USB devices

Usage example of

client-side virtualization

(3)

XenとUSB対応の歴史、準仮想化USB開発の動機

Xen 2.0.x

(in PV-only age)

準仮想化USBドライバが一時的に開発ツリーに入ったが、

結局削除されリリースされることはなかった。

Xen 3.0

QemuによりHVMドメインでUHCIが使えるようになった。

Xen 3.2

PCIパススルー(IOMMU)でHVMドメインにUSBホストコント

ローラを渡せるようになった。

Xen 3.4

(current unstable)

サポートが不十分だった

USB1.1 だけ

良好に動作するが、1つのドメインにコントローラ

を占有されて、他ドメインからは利用できない

従来のオプションは、クライアント仮想化でのUSBデバイ

ス利用は不十分であり、準仮想化USBドライバを開発し

はじめ、XCIで提案しました。

“PV USB support” がロードマップに載っています

本発表では、実装詳細と開発状況を報告します。

(4)

概要:準仮想化USBドライバとは?

ゲストVMからUSBデバイスを利用するためのドライバ

frontend: USB2.0仮想ホストコントローラでbackendのプロキシとして動作する

backend: 実際にデバイスを制御するUSBファンクションドライバ

urb (USB request block):

Linuxカーネル内の全てのUSBドライバとサブシステム

はurbにより通信を行う。urb は、include/linux/usb.hで

定義されている構造体で、ネットワークドライバにおけ

る skbuff構造体のようなもの。

frontendはXenを介してbackendにurbを転送し、backendは受信したurbをUSB

デバイスに転送する。

Xen Hypervisor

Dom 0

Dom0 OS

Guest VM 1

Guest VM 2

Guest OS Guest OS PV USB frontend driver PV USB frontend driver PV USB backend driver

USB native driver

USB Host Controller

USB devices

(5)

実装詳細(1/5)

USBの基礎:Linuxドライバ構成とurbライフサイクル

Linuxカーネル内では、USBは3層のモジュールで実装されている

USB Function Driver – USBデバイスごとのドライバ(マスストレージ、プリンタ、など)

Urbはここで生成され、USB coreに転送される。転送が完了するとコールバックハンドラが呼ばれる。

USB Core – LinuxカーネルのUSBサブシステム

Urbはデバイスに合わせて特定のホストコントローラに転送される

USB Host Controller Driver – ホストコントローラハードウェア用のドライバ

転送されてきたUrbはコントローラに転送され、その応答後、USB coreに返却される。

USB Function Driver

USB Core

USB Host Controller Driver

usb_submit_urb()

usb_hcd_giveback_urb()

.urb_enqueue()

calling completion handler

usb_alloc_urb()

usb_free_urb()

Hardware

(USB Host Controller)

User-space or other kernel subsystems

urb

urb

(6)

実装詳細(2/5):

準仮想化USBドライバ構成とurbライフサイクル

Frontend ドライバ (ホストコントローラドライバとして実装)

 転送されてきたurbはRINGリクエストにマップされ、backendに送られる。

 RINGレスポンスのステータスを付与し、urbを USB coreに返却する。

Backend ドライバ (USB functionドライバとして実装)

 RINGリクエストから元のurbを再構成し、指定されたデバイスに転送する。

 urb転送が完了すると、コールバックハンドラからRINGレスポンスをfrontendに返す。

既存コードの変更は不要で、カーネル内の全USBドライバをサポートできるはず。

PV USB backend

PV USB frontend Xen frontend interface

RING xenbus Virtual USB 2.0 Host Controller Driver

USB Function Driver

USB Core

Host Controller Driver USB Core

USB Function Driver Xen backend interface

RING xenbus

urb urb

Cloned urb

Dom0 kernel-space DomU kernel-space

Cloned urb

Hardware (USB Host Controller)

.urb_enqueue() usb_hcd_giveback_urb()

usb_submit_urb () completion handler alloc

(7)

実装詳細(3/5):

urbのRINGリクエスト・レスポンスへのマッピング方法

urb 構造体は以下のようにRINGにマッピングされる。

urbのデータバッファは、grant tableによりfrontendとbackendで該当するページを

共有する。

共有ページ数が10の時, RING_SIZEは32になる。恐らくほとんどのドライバではこ

の値で問題ないと考えられる

structurb {

unsigned int pipe;

unsigned int transfer_flags;

void *transfer_buffer;

int transfer_buffer_length;

unsigned char *setup_packet;

int interval;

int start_frame;

int number_of_packets;

struct usb_iso_packet_descriptor iso_frame_desc[0];

int status; int actual_length; int error_count; … }; structusbif_response { ... }; structusbif_request { … segs[]; };

Mapping to RING request

Mapping to RING response

(8)

実装詳細(4/5)

仮想ホストコントローラの内部実装

仮想ホストコントローラはurbをスケジューリングするための3つのキューを持つ

submit_waiting

ホストコントローラにエンキューされたurbは、このキューの末尾に追加され、backendに送信されるのを待つ。 

submit_in_progress

RINGリクエストが完了してレスポンスを待っている間、urbはこのキューに追加される。 

giveback_waiting

RINGレスポンスを受信しUSB coreに返却されるのを待つ間、urbはこのキューで待機する。 RINGレスポンスは割込みから呼 ばれ、キューのフラッシュはタイ マー呼び出しにより行われる。

Virtual USB Host Controller

submit_waiting_queue submit_in_progress_queue giveback_waiting_queue urb .urb_enqueue() usb_hcd_giveback_urb() RING request RING response urb

urb urb urb urb urb

urb

after send, move to tail

move matched urb to tail

add to tail

delete from queue

(9)

実装詳細(5/5)

ゲストドメインへのデバイス接続方法

BackendドライバのsysfsインタフェースからHotplugルールを設定する。

Hotplugルールのフォーマット

• <usbbusname>:<domid>:<vusb number>:<virtual port number>

設定例

% echo 1-2.3:1:0:3 > /sys/bus/usb/drivers/usbback/new_vport % echo 1-4:2:0:1 > /sys/bus/usb/drivers/usbback/new_vport % echo 1-2.1:2:0:2 > /sys/bus/usb/drivers/usbback/new_vport

新しいデバイスが接続されると、backendドライバはそのバス名と設定を確認し、一致する

場合はそのデバイスを要求する。FrontendはXenbusイベントによりhotplug通知を受ける。

Guest VM 1 (domain ID:1) Virtual Host Controller (vusb-0) Virtual roothub Guest VM 2 (domain ID:2) Virtual Host Controller (vusb-0) Virtual roothub device

Dom 0

Host Controller (usb1) roothub hub device

device device device device

device 1-4

(10)

開発状況

準仮想化USBドライバはちょうど動き始めたところです

動作確認済みデバイス

性能は約6MB/s (USBメモリの読み書きにおいて)

• ネイティブ性能の1/5だが、それでもUSB1.1の4倍以上

• まだまだ改善の余地がある。

実装状況

• ホットプラグと切断に関して未実装箇所あり

Type Name Manufacturer Driver Status

キーボード FKB-108-EU FILCO usbhid マウス Cordless Notebook Mouse Logitech usbhid メモリ RUF2-R2GS Buffalo usb-storage メモリ RUF-C1G/U2 Buffalo usb-storage

HDD HDCN-U500 IO DATA usb-storage [1]

ウェブカム WebCam 3 USB Creative Labs ov511 [2]

Works

Works with issues

Not worked yet

1. SCSI command [READ_CAPCITY] fails.

(11)

TODO と 今後の予定

TODO

たくさんのクリーンナップとバグフィックス

性能向上

最近のウェブカムのサポート

• UVC (USB Video Class)対応Webカメラは広帯域が必要

サスペンド・レジュームのサポート

Xend サポート

今後の予定

Netchannel2への対応

FrontendドライバのStubドメインへの移植

年内にはソースコードをポストする予定です

(12)

参照

関連したドキュメント

If the interval [0, 1] can be mapped continuously onto the square [0, 1] 2 , then after partitioning [0, 1] into 2 n+m congruent subintervals and [0, 1] 2 into 2 n+m congruent

クチャになった.各NFは複数のNF  ServiceのAPI を提供しNFの処理を行う.UDM(Unified  Data  Management) *11 を例にとれば,UDMがNF  Service

これはつまり十進法ではなく、一進法を用いて自然数を表記するということである。とは いえ数が大きくなると見にくくなるので、.. 0, 1,

※1 多核種除去設備或いは逆浸透膜処理装置 ※2 サンプルタンクにて確認するが、念のため、ガンマ線を検出するモニタを設置する。

○事 業 名 海と日本プロジェクト Sea級グルメスタジアム in 石川 ○実施日程・場所 令和元年 7月26日(金) 能登高校(石川県能登町) ○主 催

現行の HDTV デジタル放送では 4:2:0 が採用されていること、また、 Main 10 プロファイルおよ び Main プロファイルは Y′C′ B C′ R 4:2:0 のみをサポートしていることから、 Y′C′ B

Q-Flash Plus では、システムの電源が切れているとき(S5シャットダウン状態)に BIOS を更新する ことができます。最新の BIOS を USB

26‑1 ・ 2‑162 (香法 2 0 0