본문 바로가기
개발 저장소/가상화

spice 스파이스 프로토콜 구조정의

by 팡삼이 2016. 2. 17.

페이지 1

새내기를위한 스파이스

초안 2

저작권 © 2009 레드햇, 주식 회사

3.0 동일 조건 변경 허락 크리에이티브 커먼즈 저작자 표시 - 아래 라이센스

미국 라이센스 (참조

http://creativecommons.org/licenses/by-sa/3.0/us/legalcode ).

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


2 페이지

차례

1 Introduction......................................................................................................................................3

2 기본 Architecture............................................................................................................................3

2.1 그래픽 명령 Flow.........................................................................................................3

2.2 에이전트 명령 Flow............................................................................................................4

2.3 스파이스 Client...............................................................................................................................5

2.3.1 클라이언트 기본 Structure.......................................................................................................5

2.3.2 클라이언트 Classes....................................................................................................................5

2.3.2.1 Channels....................................................................................................................5

2.3.2.2 화면 및 Windows...............................................................................................6

2.4 스파이스 Server..............................................................................................................................6

2.4.1 서버 Structure.................................................................................................................7

2.4.1.1 레드 서버 (reds.c)....................................................................................................7

2.4.1.2 그래픽 subsystem...................................................................................................8

2.5 스파이스 Protocol...........................................................................................................................9

2.6 QXL Device..............................................................................................................................9

2.7 QXL 고객 Drivers...................................................................................................................9

2.8 스파이스 Agent.............................................................................................................................10

2.9 VDIPort 장치 및 Driver....................................................................................................10

 Features...........................................................................................................................................10

3.1 그래픽 Commands................................................................................................................10

3.2 하드웨어 Acceleration...........................................................................................................10

3.3 이미지 Compression................................................................................................................10

3.4 비디오 Compression.................................................................................................................11

3.5 Caching...................................................................................................................................11

3.6 마우스 Modes..........................................................................................................................11

3.7 여러 Monitors...................................................................................................................12

3.8 양방향 오디오 및 Lip-sync.....................................................................................................12

3.9 하드웨어 Cursor.....................................................................................................................12

라이브 3.10 Migration......................................................................................................................12

4 References......................................................................................................................................12


3 페이지

소개

스파이스는 원격 컴퓨터 디스플레이와 클라이언트 액세스를 제공하는 오픈 원격 컴퓨팅 솔루션

장치 ( : 키보드, 마우스, 음성). 스파이스 작용과 유사한 사용자 경험을 실현

로컬 컴퓨터와 클라이언트에 집중 CPU GPU 작업의 대부분을 오프로드하는 동안.

Spice는 사용자 경험을 손상시키지 않고, LAN WAN 모두에 사용하기에 적합하다.

 

기본 아키텍처

 

 

스파이스 기본 구조는 스파이스 프로토콜, Spice 서버와 Spice 클라이언트입니다.

 스파이스 관련구성 요소는 QXL 장치 및 게스트 QXL 드라이버를 포함한다.

 

2.1 그래픽 명령 흐름

 

위의 그림은 그래픽의 기본 Spice 아키텍처 및 게스트와 클라이언트 데이터 흐름을 보여줍니다

명령은 QEMU libspice를 사용하는 경우. libspice는 다른 VDI에 의해 사용될 수있다 [2]  대응 뿐만 아니라 응용 프로그램을 호스팅그래픽 OS를 요청하는 사용자 응용 프로그램에 의해 데이터 흐름을 시작 명령

그래픽 엔진 (X 또는 GDI)은 렌더링 작업을 수행한다그래픽 엔진이 경과

QXL 명령에 OS의 명령을 번역하고 푸시 QXL 드라이버에 명령

그 명령 링에명령 링 장치 메모리에 상주합니다. libspice이 끌어

링에서 명령 및 그래픽 명령 트리에 추가합니다그래픽 명령 트리

그 실행 표시 내용을 재현 할 명령 세트를 포함합니다나무가 사용됩니다

libspice 의해 숨겨 삭제 명령에 의해 클라이언트에 명령 전송을 최적화

다른 명령커맨드 트리는 비디오 스트림 검출을 위해 사용된다. libspice

명령 큐의 표시를 갱신하는 클라이언트로 전송하는 유지한다때 명령

클라이언트로 전송 큐에서 가져, 그것은 스파이스 프로토콜 메시지로 변환됩니다.

트리에서 제거 명령뿐만 아니라, 송신 큐에서 제거됩니다경우 명령은

더이상 libspice에 필요한, 그것은 장치 이형 고리로 푸시되지 않는다드라이버는이 링을 사용

명령의 리소스를 해제클라이언트 그래픽 명령을 받으면 그 명령을 사용하여

디스플레이를 업데이트합니다.


4 페이지

2.2 에이전트 명령 흐름

스파이스 에이전트는 게스트에 실행되는 소프트웨어 모듈이다스파이스 서버 및 클라이언트에 대한 에이전트를 사용

필요한 작업은 게스트 디스플레이 설정 구성과 같은, 게스트 문맥에서 수행 될 수있다.

위 그림은 VDIPort을 사용하여 에이전트와 Spice 클라이언트와 서버의 통신을 보여줍니다

장치 및 게스트 드라이버메시지는 (클라이언트가 고객의 예 구성을 생성 할 수있다

표시 설정), 서버 (예컨대, 마우스 이동), 및 제 (, 구성 ACK). 운전사

입력 및 출력 고리를 사용하여 장치와 통신한다클라이언트와 서버 생성

메시지는 서버에서 동일한 쓰기 큐에 기록하고 나중에 장치 출력에 기록됩니다

메시지는 서버 읽기 버퍼 장치 입력 링에서 읽습니다메시지 포트

메시지는 서버에 의해 처리 또는 클라이언트에 전달되어야하는지 여부를 판정한다.


5 페이지

2.3 스파이스 클라이언트

스파이스 크로스 플랫폼 (리눅스 및 윈도우) 클라이언트는 최종 사용자 인터페이스이다.

2.3.1 클라이언트 기본 구조

 

2.3.2 클라이언트 클래스

다음은 스파이스 클라이언트의 주요 클래스를 소개합니다 클린 크로스 플랫폼을 가지고 있기 때문에

구조는 그들의 플랫폼 고유의 구현을 유지하고 일반적인 인터페이스를 정의합니다

병렬 디렉토리하나는 이러한 일반적인 인터페이스는 많은 낮은 수준을 정의, 플랫폼 클래스입니다

이러한 타이머 커서 작업 등의 서비스를 제공합니다.

응용 프로그램이 포함되어 클라이언트, 모니터 화면을 제어하는 메인 클래스이다그것

같은 명령 줄 인수를 구문 분석 실행으로 일반 응용 프로그램 기능을 처리

기본 메시지 루프 처리 이벤트 (연결, 해제, 오류 등), 마우스의 재

전체 화면 모드를 전환 입력 처리기 이벤트 등

2.3.2.1 채널

클라이언트와 서버는 채널을 통해 통신한다각각의 채널 유형은 특정 유형에 전념

데이터의각 채널은 전용 TCP 소켓을 사용하며 또는 비보안 (SSL을 사용하여)을 확보 할 수있다.

클라이언트 측에서, 각 채널 정도로 상이한 QoS에 의해 각을 부여 할 수있는 전용 스레드를 가지고

이들 스레드 우선 순위를 구별.


6 페이지

RedClient 메인 채널 역할을한다그것은 모든 다른 인스턴스 채널을 소유하고이를 제어

(, 분리, 연결, 자신의 공장을 사용하여 채널을 생성), 및 제어를 처리,

구성 및 마이그레이션 (마이그레이션 클래스를 사용).

모든 채널의 조상은 다음과 같습니다 :

RedPeer - 보안과 보안되지 않은 통신을위한 소켓 래퍼, 제공하는 인프라

같은 가까운, 분리, 연결로, 전송, 수신 및 소켓 마이그레이션 교환그것은 정의

일반 메시지 클래스 : InMessages, CompoundInMessage OutMessage. 모든 메시지

유형, 크기 및 데이터를 포함한다.

RedChannelBase - RedPeer을 상속 채널을 설정하기위한 기본 기능을 제공합니다

서버와 채널 능력 교환의 서버 및 지원 연결을 제공합니다.

RedChannel - RedChannelBase는 상속합니다이 클래스는 모든 인스턴스 채널의 부모입니다.

보내는 메시지를 전송 및 수신 메시지를 전달 처리합니다. RedChannel 스레드

다양한 이벤트 소스 (예를 들어, 전송 및 트리거를 중지)와 이벤트 루프를 실행합니다채널 소켓

스파이스 트리거링 메시지 송수신 이벤트 소스로서 부가된다.

 

 

사용할 수있는 채널은 다음과 같습니다 :

Main - RedClient에 의해 실행  (위 참조).

DisplayChannel - 명령, 이미지 및 비디오 스트림 그래픽을 처리합니다.

InputsChannel - 키보드 및 마우스 입력.

CursorChannel - 포인터 장치 위치, 가시성 및 커서 모양입니다.

PlaybackChannel O - 클라이언트에 의해 실행되는 서버로부터  오디오 수신.

O RecordChannel - 오디오를 클라이언트 측에 캡처.

ChannelFactory에 모든 채널 공장의 기본 클래스입니다각 채널은 특정 공장 등록

채널 유형별로 채널을 만들 RedClient을 가능하게합니다.

2.3.2.2 화면 및 Windows

ScreenLayer - 스크린 층은 직사각형 동작을 제공 특정 화면에 부착

지역 (세트, 분명, 업데이트 등 무효). 레이어 Z-주문이다 (예를 들면, 커서는 디스플레이 위에).

O RedScreen - (화면 로직을 구현하고, 스크린 층을 이용하여 윈도우를 제어하는 예를 들면,

콘텐츠를 디스플레이하기위한 디스플레이, 커서).

RedDrawable - 기본 픽스맵의 특정 플랫폼 구현입니다그것은 기본 렌더링을 지원

작업 (예를 들면, 복사, 혼합, 결합).

RedWindow_p - 플랫폼 별 윈도우 데이터 및 방법에 관한 것이다.

RedWindow - RedDrawable RedWindow_p을 상속합니다의 크로스 플랫폼 구현

기본 윈도우 상태 및 기능 (예를 들면, 표시, 숨기기, 최소화, 제목을 설정, 설정 커서 등을 이동).

2.4 스파이스 서버

스파이스 서버가 libspice에서 구현, 가상 장치 인터페이스 (VDI) 플러그 라이브러리. VDI

소프트웨어 컴포넌트에 의해 가상 장치 인터페이스를 제작하기위한 표준 방식을 제공한다

이러한 장치와 상호 작용하는 다른 소프트웨어 요소를 가능하게한다자세한 내용은 다음 웹 사이트를 참조

[2] . 일 측면에서, 서버는 Spice 프로토콜을 사용하여 원격 클라이언트와 통신한다로부터

다른 쪽은, 상기 VDI 호스트 애플리케이션 ( QEMU)와 상호 작용한다.

디스플레이를 위해 원격 서버는 명령 대기열을 관리 트리를 유지

현재는 종속성 및 hidings 개체. QXL 명령 처리와 Spice로 번역된다

프로토콜 명령어는 클라이언트로 전송.

Spice는 항상 이와 같이 하드웨어를 활용 클라이언트 렌더링 태스크를 전달하려고

가속 능력소프트웨어 또는 GPU에 의해, 호스트 측의 렌더링, 마지막 결과로서 수행된다그만큼


7 페이지

스파이스 서버는 현재 이미지를 구성하는 손님 그래픽 명령을 유지합니다이 명령을 해제

그것은 완전히 다른 명령에 의해 덮여있다 종속성 그것에 없거나 경우에만

우리는 프레임 버퍼에 명령을 렌더링 할 때트리거 두 가지 이유

(1) 자원이 부족 프레임 버퍼에 그리기; (2) 고객은 읽을 필요

프레임 버퍼.

2.4.1 서버 구조

서버 채널을 통해 클라이언트와 통신합니다각 채널 유형을 특정하기 위해 최선을 다하고 있습니다

데이터의 유형입니다각 채널은 전용 TCP 소켓을 사용하며 보안 (SSL을 사용)하거나 할 수있다

무담보서버 채널은 클라이언트 채널의 유사 : , 입력, 디스플레이, 커서,

재생 및 기록 (자세한 내용은 채널을 2.3.2.1 참조)

주요 입력 채널 (reds.c에서 구현) 핸들러 함수에 의해 제어된다그만큼

디스플레이 및 커서 채널 디스플레이 당 빨간색 작업자 스레드에 의해 처리됩니다오디오 재생

기록 채널은 자신의 핸들러 (snd_worker.c)가 있습니다. Libspice VDI 호스트 응용 프로그램

(예를 들어, QEMU) 각 기능에 대해 정의 된 인터페이스를 통해 통신 (예를 들어, QXL, 에이전트,

키보드, 마우스, 태블릿, 재생, 기록)에 설명 된대로 [2].

위의 그림과 같이, Spice 서버의 주요 구성 요소는 다음과 같습니다

2.4.1.1 레드 서버 (reds.c)

red서버는 클라이언트 연결을 수신을 허용하고 그들과 함께 통신 서버 자체.

책임이 있다 :

 

스파이스 서버


8 페이지

소유하고 채널을 (종료, 등록, 등록 해제) 관리

 

그 클라이언트를 만들 수 있도록 활성 채널에 대한 클라이언트에 통지

메인 및 입력 채널 처리

링크 설정 (메인과 다른 모두)

소켓 작업 및 연결 관리

SSL 및 발권을 처리합니다

 VDI 인터페이스 (예를 들면, 코어, 마이그레이션, 키보드, 마우스, 태블릿, 에이전트) 추가 제거

 마이그레이션 프로세스 조정

 사용자 명령의 처리 (예를 들어, Qemu 모니터)

 게스트 에이전트와의 통신

 통계

2.4.1.2 그래픽 서브 시스템

스파이스 서버에서 다른 서브 시스템과 달리, 그래픽 서브 시스템이 서버와 병렬로 실행될

실행은 전용 스레드에서 (, 빨간색 근로자) .This 구조 사이의 독립성을 가능하게

QEMU 흐름 소비 할 입력 그래픽 명령 프로세싱 및 렌더링

CPU 자원을 많이위 그림은 스파이스 서버 그래픽 서브 시스템의 구조를 보여줍니다빨간

서버는 새로운 QXL 인터페이스 (, VDI)에 디스패처를 시작합니다디스패처는 빨간색 노동자를 작성

그 인터페이스작업자에 의해 처리 명령은 세 가지 소스에서 발생 할 수 있습니다 : (1)

동기화 QXL 장치 명령은, (2) 적색 서버 명령 모두가 (1, 2)에 의해 전달

소켓 (, 소켓 쌍), (3) 비동기 QXL 장치 명령을 사용하여 발송자에 의해 끌려

인터페이스를 사용 QXL 장치 고리로부터 작업자.

레드 노동자 (red_worker.c)

스파이스 서버는 각 QXL 장치 예를 들어 빨간색 작업자 스레드의 다른 인스턴스를 보유하고있다그만큼

red_worker의 책임은 다음과 같습니다 :

 QXL 처리 장치의 명령 (예를 들면 연신, 업데이트 커서)

 취급 메시지 발송자로부터 수신

 채널 파이프 파이프 항목

 디스플레이 커서 채널

 이미지 압축 (QUIC, LZ glzencoding 사용)

 비디오 스트리밍 - 식별, 인코딩 스트림 작성

 캐시 - 클라이언트 공유 픽스맵 캐시, 커서 캐시, 팔레트 캐시

 그래픽 항목 제거 최적화 - 아이템 트리, 컨테이너, 그림자, 제외 영역을 사용하여,

불투명 한 항목

 카이로와 OpenGL (pbuf 픽스맵) 렌더러 - 캔버스,

  작업

우우

(디스플레이 당)

QXL 장치

레드 서버

레드 디스패처

레드 노동자

엑스

W

영형

아르 자형

케이

이자형

아르 자형

red_dispatcher.h

인터페이스

채널 (소켓 쌍)

RED_WORKER_MESSAGE

libspice

QEMU / HW

엑스

나는

이자형

아르 자형

에프

에이

기음

이자형


9 페이지

레드 디스패처 (red_dispatcher.c)

 디스패처, QXL 장치 인스턴스 하나

 QXL 장치와 레즈에서 노동자 내부를 캡슐화

 QXL 장치 인스턴스에 대한 작업자를 시작하고 작업자 스레드를 생성

 socketpair 채널을 사용하여 작업자를 전달합니다

 QXL 장치 QXLWorker 인터페이스는 적색 운영자에 의해 구현 장착 사용

이는 빨간 작업자 파이프를 통해 전송 된 메시지에 장치 호출을 변환합니다이 방법

분리 논리적으로 독립적 인 두를 유지합니다.

 레즈는 발송자와 같은 디스패처 기능 red_dispatcher.h 정의 인터페이스를 사용

초기화, 화상 압축 변경, 비디오 스트리밍 상태 변경, 마우스 모드 설정 및

렌더러 추가.

2.5 스파이스 프로토콜

스파이스 프로토콜은 그래픽 객체를 전송하기위한, , 클라이언트와 서버 간 통신에 사용되는,

키보드와 마우스 이벤트, 커서 정보, 오디오 재생 및 기록 덩어리 및 제어

명령스파이스 프로토콜의 자세한 설명서는에서 찾을 수있다 [1].

2.6 QXL 장치

스파이스 서버는 QXL VDI 인터페이스를 지원합니다. libspice QEMU, 특정 QEMU와 함께 사용하는 경우

QXL PCI 장치는 원격 디스플레이 성능을 개선하고 향상을 위해 사용될 수있다

게스트 그래픽 시스템의 그래픽 기능을 제공합니다. QXL 장치는 전체에 대한 고객 QXL 드라이버가 필요합니다

기능을 제공합니다더 드라이버가 존재하지 않을 때, 표준 VGA를 지원한다이 모드는 수

가상 머신 (VM) 부팅 단계에서 활성 표시됩니다디바이스 드라이버를 이용하여 상호 작용

명령 및 커서 반지, 디스플레이, 커서 이벤트를 중단하고, I / O 포트다른

장치의 책임은 다음과 같습니다 :

 초기화 물리적 메모리 장치 ROM, RAM VRAM지도

 I / O 포트를 매핑하고 핸들 읽기 관리를위한 기록 : 지역 업데이트, 명령

알림, IRQ 업데이트, 모드 설정, 장치 재설정, 로그 기록 등을 커서

 반지 - 초기화 명령 커서 링을 유지, 명령 커서 명령을받을

반지에서하면 알림을 기다립니다자원 링을 유지한다.

 QXLWorker 인터페이스를 사용하여 대응하는 적색 작업자와 통신

구현 메시지 장치 호출을 변환 레드 발송자에 의해 부착

기록과 빨간색 작업자 파이프에서 읽을.

 장치와 통신 수있는 노동자를 가능하게하는 QXLInterface 등록. 그만큼

인터페이스는 노동자를 부착 디스플레이를 얻고위한 PCI 정보와 기능을 포함

커서 등 링 커서 알림 표시 모드 변경 통지로부터 명령

 VGA 포함하여 지원 QXL 모드를 정의하고, 현재 모드의 변경을 가능하게

모드, 모든 모니터가 단일 장치를 미러링 곳 (VGA 클라이언트)

 핸들 표시 초기화, 갱신, VGA 모드 andrefresh 크기 조정

2.7 QXL 고객 드라이버

플랫폼 별 게스트 드라이버는 활성화하고 QXL 장치 ()와 통신하는 데 사용됩니다그만큼

윈도우 드라이버가 그래픽 장치 인터페이스 작동 디스플레이 드라이버 구성 (GDI)

통화와 구조 및 메모리 맵핑, 포트 및 인터럽트 처리 미니 포트 드라이버.


10 페이지

2.8 스파이스 에이전트

스파이스 에이전트가 사용자 경험을 향상시키고 수행하기위한 선택적 구성 요소입니다 고객을 지향

작업클라이언트 마우스를 사용할 때 예를 들어, 에이전트가 고객에게 마우스 위치와 상태를 분사

방법또한,이 고객 디스플레이 설정을 구성하는데 사용된다미래의 기능은 다음과 같습니다

게스트에 /에서 복사 및 붙여 넣기 개체입니다시스템 서비스의 Windows 에이전트의 consistss

및 사용자 방법.

2.9 VDIPort 장치 및 드라이버

스파이스 프로토콜은 클라이언트와 서버 에이전트 사이의 통신 채널을 지원

측면. QEMU를 사용하는 경우, 스파이스 에이전트는 게스트에 있습니다. VDI 포트가 사용 QEMU PCI 장치입니다

에이전트와의 통신을 위해특정 에이전트 프로토콜은 통신을 위해 사용된다.

Windows 게스트 드라이버는 이미 구현된다. .

기능

3.1 그래픽 명령

스파이스 (3D 지원이 곧 올 것입니다) 2D 그래픽 명령의 전송 및 처리를 지원합니다

다른 많은 원격 데스크톱 솔루션에 사용되는 버퍼 업데이트를 프레임에 반대했다그만큼

QXL 장치 명령은 일반 및 플랫폼에 독립적 인, 그래서 Windows X 드라이버가 사용

그들 기본적으로.

3.2 하드웨어 가속

기본 spice 클라이언트 렌더링은 크로스 플랫폼 카이로, 장치 -를 사용하여 수행됩니다

독립적 인 라이브러리카이로는 2 차원 드로잉 벡터 그래픽 프리미티브를 제공합니다.

하드웨어 가속 렌더링이 수행되는 추가적인 렌더링 모드

GPU 클라이언트에 의해 소프트웨어가 아닌 하드웨어에 의한 클라이언트 CPU를 사용하드웨어 가속은

Windows에서의 OpenGL, 리눅스 (실험) GDI를 사용하여 구현. . 하드웨어

가속 장점은 다음과 같습니다

고성능 렌더링 - OpenGL을을 사용하여 스파이스 클라이언트가 훨씬 빠르게 렌더링 할 수있다

전보다있습니다 (비디오 스트리밍에 사용) 등 스트레칭과 같은 무거운 소프트웨어 작업

소프트웨어보다는 하드웨어에 의해 미리 형성 할 때 훨씬 더 빨리따라서, 스파이스 달성

훨씬 부드러운 사용자 경험.

클라이언트 CPU 사용량 감소 - 클라이언트가 다른 사용될 수 이상의 CPU 시간을 즐긴다

오디오 같은 작업.

독립적 인 소프트웨어 라이브러리 인 카이로와 달리, OpenGL은 따라 하드웨어 라이브러리입니다

드라이버 및 하드웨어 구현에그 결과, 스파이스가 잘못 고통 있습니다

최악의 경우 렌더링, 무거운 CPU 사용, 또는 클라이언트 또는 호스트 충돌또한, 비록

OpenGL은 글로벌 표준, 극적으로 하드웨어 및 드라이버 변경의 구현

공급 업체 사이따라서, 서로 다른 GPU에서, 스파이스는 서로 다른 렌더링 출력을 표시하고 있습니다

다른 성능을 검출 할 수 있습니다또한, 지원하지 않는 디바이스는 거기

OpenGL을 전혀.

서버는 리눅스 클라이언트와 동일한 코드를 공유하는 하드웨어 가속 OpenGL을 사용.

3.3 이미지 압축

스파이스 서버 개시에 선택 될 수있는 여러 가지 영상 압축 알고리즘을 제공하고,

동적 런타임퀵는 기반으로 Spice 독점 영상 압축 유틸리티입니다

SFALIC 알고리즘 [3]. LZ (LZSS) [4] 등의 이미지로 조정 gorithm는 또 다른 옵션입니다양자 모두


11 페이지

퀵와 LZ , 그들은 각각의 이미지를 독립적으로 인코딩 로컬 알고리즘이다글로벌 LZ (GLZ)입니다

히스토리 기반의 글로벌 사전으로 LZ를 사용하는 다른 Spice 독점. GLZ 소요

트래픽 축소에 대한 이미지 중 패턴을 반복 이용 및 저장 대역폭, 어떤

WAN 환경에서 중요하다. Spice는 압축 선택하는 자동 모드를 구비

당 이미지 LZ / GLZ 및 퀵 사이의 선택은 경험적으로 이미지를 기반으로,

속성개념적으로, 인공 이미지 LZ / GLZ에 의해 더 나은 압축, 실제 이미지는

퀵으로 더 나은 압축.

3.4 비디오 압축

스파이스하기 위해서, 클라이언트에 전송 된 이미지, 그리고 손실 압축을위한 무손실 압축을 사용

중요한 표시 객체의 중단을 피할 수 있습니다그러나 이후 (1) 비디오 스트림을 주요 될 수 있습니다

각 비디오 프레임은 독립적으로 이미지와 같은 대역폭의 소비자, (2) 콘텐츠는

대부분 무 비판적, 스파이스는 스트림 손실 영상 압축을 사용 : 스파이스 서버

경험적으로 높은 속도로 업데이트되는 영역을 식별하여 비디오 영역을 식별합니다이들

비디오 스트림이 손실 경향 모션 JPEG를 이용하여 코딩 영역으로 업데이트를 클라이언트에게 보내는

알고리즘 (M-JPEG). 이기구는, 스파이스 성능을 향상 트래픽이 많이 절약

특히 WAN에서그럼에도 불구하고, 어떤 상황에서 추론 동작은 낮은 발생할 수 있습니다

이미지 품질 (예를 들어, 비디오 스트림으로 업데이트 된 텍스트 영역을 식별 할 때). 비디오 스트리밍이 될 수 있습니다

서버 시작에 선택 및 런타임에 동적으로 변경 될 수 있습니다 ..

3.5 캐싱

Spice는 클라이언트 중복 전송을 방지하기 위해 클라이언트 이미지 캐싱을 구현한다.

캐싱 픽스맵, 팔레트 포함 클라이언트로 전송 된 화상 데이터의 종류에 적용

커서각 이미지는 고유 ID 및 캐시 힌트와 함께 드라이버에서 도착합니다비 동일 이미지

동일한 이미지가 동일한 ID를 공유하면서, 다른 ID를 가지고있다캐시 힌트 서버를 권장합니다

이미지를 캐시합니다픽스맵 캐시는 모든 디스플레이 사이에서 공유됩니다캐시는 연결 당 정의

각 순간 서버 정확히 알고 즉 서버와 클라이언트간에 동기화

어떤 이미지는 클라이언트 캐시에있다또한, 서버는 상품 있는가를 하나는

추가 또는 캐시로부터 제거되어야한다클라이언트 캐시 크기는 클라이언트에 의해 설정되고 전송

표시 채널 초기화 메시지를 통해 서버서버는 전류를 모니터링

캐시의 용량은 공간이 부족한 경우가 될 때까지가 가장 최근에 사용 된 캐시 항목을 제거

충분한 캐시 공간서버는 이러한 항목과 함께 무효화 명령을 전송

클라이언트를 제거합니다.

3.6 마우스 모드

스파이스는 두 개의 마우스 모드, 서버와 클라이언트를 지원합니다모드는 동적으로 변경할 수있다

클라이언트와 서버 간의 협상.

서버 마우스 - 게스트에 마우스를 가능하게하기 위해 QEMU PS / 2 마우스 에뮬레이션을 사용합니다

스파이스 클라이언트 창 내부 사용자 클릭, 클라이언트 마우스를 캡처하고 눈에 보이지 않는 설정됩니다그만큼

델타가 서버에 좌표로 클라이언트는 마우스 이동을 보냅니다따라서, 클라이언트는 마우스

각 이동 후 윈도우 센터로 돌아왔다이 모드에서, 서버는, 마우스를 제어

디스플레이 상에 위치하므로 항상 클라이언트와 게스트간에 동기화된다하나,

그것은 마우스 커서가 일부있을 수 있습니다 WAN 또는로드 서버에 문제가 될 수 있습니다

대기 또는 비 응답.

클라이언트 마우스 - 클라이언트 마우스 유효 포인팅 장치로서 사용된다그것은 캡처되지 않고,

게스트 커서가 보이지 않는 설정됩니다클라이언트는 절대 좌표로 마우스 이동을 전송

섬기는 사람고객 에이전트는 게스트 가상 데스크톱 좌표를 확장하고를 주입

해당 커서의 위치단일 모니터를 들어, 클라이언트 마우스 없이도 사용할 수 있습니다

에이전트 VDI 호스트 응용 프로그램은 절대 포인팅 장치 (예를 들어, USB 태블릿에 등록하는 경우

QEMU). 이 경우스파이스 서버는 좌표를 조정합니다클라이언트 모드에 적합


12 페이지

WAN 또는로드 서버, 커서는 부드러운 움직임과 응답 성을 가지고 있기 때문에그러나

잠시 동안 힘의 손실 동기 (위치와 모양을) 커서클라이언트 마우스 커서가 업데이트됩니다

게스트 마우스 커서에 따라.

3.7 다중 모니터

스파이스 게스트 클라이언트 및 서버의 한계에 의해서만 제한 모니터의 번호를 지원한다.

VM을 실행할 때 모니터 및 RAM 크기의 번호가 설정된다스파이스 지원

클라이언트에 따라 고객의 모니터 해상도 및 디스플레이 설정의 자동 구성,

시스템 설정이는 게스트 에이전트 클라이언트 명령에 의해 구현됩니다.

3.8 양방향 오디오 및 립싱크

스파이스 오디오 재생 및 녹음을 지원합니다재생 CELT을 사용하여 압축된다 [5]

연산오디오 및 비디오 간의 립 싱크 시간 스탬핑의 비디오 프레임에 의해 달성된다

QXL 장치이며 오디오 동기화, 클라이언트 측에서 그들을 주입

독립.

3.9 하드웨어 커서

QXL 장치는 커서의 하드웨어 가속을 지원합니다화면에서 커서를 분리

더 나은 응답을 위해 커서를 우선 순위를 할 수 있습니다또한, 네트워크 트래픽을 감소시킨다.

3.10 라이브 마이그레이션

서버 간 VM 마이그레이션 연결된 클라이언트에 원활한이다전체 연결 상태,

개방 채널 커서 포함한 소스에 저장되고 목적지에서 복원.

참고

[1] 스파이스 원격 컴퓨팅 프로토콜 정의

[2] 스파이스 VD 인터페이스 문서

[3] Starosolski, R .: 간단한 빠르고 적응 무손실 이미지 압축 알고리즘 , 소프트웨어 -

연습과 경험, 2007, 37 (1) : 65-91, 10.1002 / spe.746 DOI.

[4] 렘펠 - 지브 - Storer-Szymanski "텍스트 대체를 통해 데이터 압축"에 게시

ACM의 저널 (PP. 928-951)

[5] CELT 초저 지연 오디오 코덱.

 

'개발 저장소 > 가상화' 카테고리의 다른 글

KVM 가상화 시스템 구축하기  (613) 2016.08.01
libvirt python 개발 가이드 2편  (958) 2016.07.12
libvirt python 개발 가이드 1편  (606) 2016.07.12
libvirt 가상화 라이브러리 분석글  (276) 2016.03.24

댓글