영어프랑스어스페인어

Ad


온웍스 파비콘

guestfs-performance - 클라우드에서의 온라인

Ubuntu Online, Fedora Online, Windows 온라인 에뮬레이터 또는 MAC OS 온라인 에뮬레이터를 통해 OnWorks 무료 호스팅 제공업체에서 guestfs-performance를 실행하세요.

이것은 Ubuntu Online, Fedora Online, Windows 온라인 에뮬레이터 또는 MAC OS 온라인 에뮬레이터와 같은 여러 무료 온라인 워크스테이션 중 하나를 사용하여 OnWorks 무료 호스팅 제공업체에서 실행할 수 있는 guestfs-performance 명령입니다.

프로그램:

이름


guestfs-performance - 최고의 성능을 위한 libguestfs 엔지니어링

기술


이 페이지에서는 특히 다음과 같은 경우에 libguestfs에서 최고의 성능을 얻는 방법을 설명합니다.
수천 개의 가상 머신이나 디스크 이미지를 조작하기 위해 libguestfs를 사용할 것으로 예상합니다.

세 가지 주요 영역이 포함됩니다. Libguestfs는 어플라이언스(소규모 Linux 배포판)를 실행합니다.
qemu/KVM 내부. 처음 두 영역은 다음과 같습니다. 이 작업을 시작하는 데 걸리는 시간을 최소화합니다.
기기 및 기기를 시작해야 하는 횟수입니다. 세 번째 지역은
VM 검사에 소요되는 시간을 단축합니다.

기준 측정


libguestfs 사용 방법을 변경하기 전에 기준 측정을 수행하십시오.

기준: 시작 중 전에, 기구
로드되지 않은 머신에서 어플라이언스를 시작하는 데 걸리는 시간을 측정해 보세요.

time guestfish -a /dev/null 실행

이 명령을 연속해서 여러 번 실행하고 처음 몇 번의 실행을 삭제합니다.
일반적인 "핫 캐시" 사례를 측정합니다.

설명

이 명령은 null 디스크에서 libguestfs 어플라이언스를 시작한 다음 즉시 종료합니다.
내려. 명령을 처음 실행하면 어플라이언스가 생성되고 캐시됩니다.
(보통 아래 /var/tmp/.guestfs-*). 후속 실행에서는 캐시된 어플라이언스를 재사용해야 합니다.

기대하는 결과

6초 미만의 시간이 소요될 것으로 예상해야 합니다. 당신이 보는 시간이라면
언로드된 머신이 이보다 위에 있으면 "성능 저하 문제 해결" 섹션을 참조하세요.
아래.

기준: 공연 검사 of a 손님
이 테스트를 위해서는 언로드된 머신과 최소한 하나의 실제 게스트 또는 디스크 이미지가 필요합니다.
X 게스트(예: X = Windows)에 대해서만 libguestfs를 사용하려는 경우 다음을 사용하세요.
여기 X 손님이 가장 적절할 것입니다. libguestfs를 실행할 계획이라면
게스트를 혼합한 다음 여기에서 테스트를 위해 게스트를 혼합하여 사용합니다.

검사를 수행하고 게스트의 디스크를 마운트하는 데 걸리는 시간을 측정합니다. 사용
디스크 이미지를 사용하는 경우 첫 번째 명령, 디스크 이미지를 사용하는 경우 두 번째 명령
libvirt를 사용합니다.

시간 guestfish --ro -a disk.img -i 종료

시간 guestfish --ro -d GuestName -i 종료

연속해서 여러 번 명령을 실행하고 처음 몇 번의 실행을 삭제합니다.
일반적인 "핫 캐시" 사례를 측정합니다.

설명

이 명령은 명명된 디스크 이미지 또는 libvirt 게스트에서 libguestfs 어플라이언스를 시작합니다.
이에 대해 libguestfs 검사를 수행합니다("INSPECTION" 참조). 손님(3)), 게스트의 마운트
그런 다음 이러한 결과를 모두 삭제하고 종료됩니다.

명령을 처음 실행하면 어플라이언스가 생성되고 캐시됩니다(일반적으로
아래에 /var/tmp/.guestfs-*). 후속 실행에서는 캐시된 어플라이언스를 재사용해야 합니다.

기대하는 결과

첫 번째 기준선에서 측정된 것보다 5초 이하 더 긴 시간을 예상해야 합니다.
위의 테스트. (예를 들어 첫 번째 기준 테스트가 5초 안에 실행된 경우 이 테스트는
10초 이내로 실행되어야 함).

이해 L' 기구 WHEN IT IS 빌드/캐시됨


libguestfs를 처음 사용하면 어플라이언스를 구축하고 캐시합니다. 이것은 일반적으로
in /var/tmp/.guestfs-*(단, $TMPDIR 또는 $LIBGUESTFS_CACHEDIR을 설정하지 않은 경우)
해당 임시 디렉토리 아래에 있을 것입니다.

어플라이언스 구성 방법에 대한 자세한 내용은 "SUPERMIN APPLIANCES"를 참조하십시오.
슈퍼민(1).

libguestfs가 실행될 때마다 어플라이언스에서 사용하는 호스트 파일이 없는지 확인합니다.
변경되었습니다. 있는 경우 어플라이언스가 재구축됩니다. 이는 일반적으로 패키지가 다음과 같은 경우에 발생합니다.
호스트에 설치되거나 업데이트됩니다(예: "yum" 또는 "apt-get"과 같은 프로그램 사용). 그만큼
어플라이언스를 재구성하는 이유는 보안 때문입니다.
설치된 프로그램에는 보안 수정 사항이 포함될 수 있으므로 수정된 프로그램을
자동으로 기기.

성능에 미치는 영향은 다음과 같습니다.

· 캐시된 어플라이언스를 구축(또는 재구축)하는 프로세스는 느리며 다음을 수행할 수 있습니다.
고정된 기기를 사용하여 이러한 일이 발생하지 않도록 하십시오(아래 참조).

· 고정된 기기를 사용하지 않는 경우 호스트의 소프트웨어를 업데이트하면
어플라이언스의 일회성 재구축.

· / var / tmp (또는 $TMPDIR, $LIBGUESTFS_CACHEDIR)은 빠른 디스크에 있어야 하며,
기기를 위한 공간.

사용 A 고정 된 기구


어플라이언스가 구축되는 시점을 완전히 제어하기 위해 고정된 어플라이언스를 구축할 수 있습니다. 이것
어플라이언스는 빠른 로컬 디스크에 저장되어야 합니다.

어플라이언스를 빌드하려면 다음 명령을 실행하십시오.

libguestfs-make-fixed-appliance

"를 교체하다 "를 어플라이언스가 저장될 디렉터리 이름으로 바꿉니다.
(일반적으로 하위 디렉터리의 이름을 지정합니다. 예: /usr/local/lib/guestfs/기기 or
/dev/shm/어플라이언스).

그런 다음 $LIBGUESTFS_PATH를 설정하고 이 환경 변수가 libguestfs에 설정되어 있는지 확인하세요.
프로그램) 또는 "guestfs_set_path"를 호출하도록 프로그램을 수정하세요. 예를 들어:

내보내기 LIBGUESTFS_PATH=/usr/local/lib/guestfs/appliance

이제 libguestfs 프로그램, virt 도구, guestfish 등을 정상적으로 실행할 수 있습니다. 프로그램
고정된 어플라이언스를 사용하며 자체적으로 구축, 재구축 또는 캐시하지 않습니다.
어플라이언스.

(이 주제에 대한 자세한 내용은 다음을 참조하세요. libguestfs-make-fixed-appliance(삼)).

퍼포먼스 of 전에, 고정 기구
우리의 테스트에서는 고정된 기기를 사용하여 측정 가능한 결과를 얻지 못했습니다.
어플라이언스가 메모리에 있는 경우에도(예: /dev/shm).
그러나 고려해야 할 두 가지 사항이 있습니다.

1. 고정된 어플라이언스를 사용하면 libguestfs가 어플라이언스를 재구축하는 것을 중지합니다. 즉,
libguestfs의 시작 시간은 더 예측 가능해집니다.

2. 어플라이언스는 요청 시 로드됩니다. 다음과 같은 간단한 테스트:

time guestfish -a /dev/null 실행

기기에 많은 부하를 주지 않습니다. 복잡한 것을 사용하는 실제 libguestfs 프로그램
API 호출은 더 많은 어플라이언스를 요구적으로 로드합니다. 보관할 수 있어서
지정된 위치에 장비를 설치하면 성능을 더 예측하기 쉬워집니다.

감소 L' NUMBER OF 타임스 L' 기구 IS LAUNCHED


항상 좋은 성능을 얻는 가장 간단한 방법은 아니지만 가장 효과적인 방법은 다음과 같습니다.
어플라이언스가 최소 횟수만큼 실행되도록 합니다. 이것은 아마도
libguestfs 애플리케이션을 변경하는 것과 관련이 있습니다.

대상 가상 머신 또는 디스크 이미지당 최대 한 번 "guestfs_launch"를 호출해 보세요.

별도의 인스턴스를 사용하는 대신 게스트 피쉬(1) 일련의 변경 사항을 적용하려면
동일한 게스트, 단일 guestfish 인스턴스 사용 및/또는 guestfish 사용 --듣다 옵션을 선택합니다.

시리즈를 만드는 동안 게스트를 열어두는 데몬으로 프로그램을 작성하는 것을 고려해보세요.
변화의. 또는 게스트를 열기 전에 수행하려는 모든 작업을 마샬링합니다.

여러 게스트의 디스크를 단일 어플라이언스에 추가해 볼 수도 있습니다. 시도하기 전에
이 경우 다음 사항에 유의하세요.

1. 하나의 어플라이언스에 여러 게스트를 추가하면 보안 문제가 발생합니다.
게스트가 다른 게스트의 디스크를 방해합니다. 모든 것을 신뢰하는 경우에만 수행하십시오.
손님 또는 손님을 신뢰로 그룹화할 수 있는 경우.

2. 단일 어플라이언스에 추가할 수 있는 디스크 수에는 엄격한 제한이 있습니다. 부르다
"guestfs_max_disks" 손님(3) 이 한도를 얻으려면. 자세한 내용은 다음을 참조하세요.
"한계" 손님(3).

3. libguestfs를 이런 방식으로 사용하는 것은 복잡합니다. 디스크에는 예상치 못한 상호 작용이 있을 수 있습니다.
예를 들어 두 게스트가 파일 시스템에 대해 동일한 UUID를 사용하는 경우(복제되었기 때문에)
또는 동일한 이름의 볼륨 그룹이 있습니다(그러나 "guestfs_lvm_set_filter" 참조).

가상 df(1) 기본적으로 여러 개의 디스크를 추가하므로 이 프로그램의 소스 코드는 다음과 같습니다.
시작하기 좋은 곳.

쇼트닝 L' TIME 테이큰 위한 검사 OF VM


주요 조언은 분명합니다. 꼭 필요한 경우가 아니면 검사(비용이 많이 듭니다)를 수행하지 마십시오.
결과.

이전에 게스트에 대해 검사를 수행한 경우 캐시하고
지난번 결과를 재사용합니다.

일부 디스크는 전혀 검사할 필요가 없습니다. 예를 들어 디스크를 생성하는 경우
이미지, 디스크 이미지가 VM이 아닌 경우 또는 디스크 이미지에 알려진 레이아웃이 있는 경우.

기본 점검("guestfs_inspect_os")이 필요한 경우에도 보조 점검은
다음과 같은 경우 작업을 피할 수 있습니다.

· 디스크 마운트는 추가 파일 시스템 정보를 얻기 위해서만 필요합니다.

· 애플리케이션 나열("guestfs_inspect_list_applications")은 비용이 많이 드는 작업입니다.
Linux에서는 Windows에서는 거의 무료입니다.

· 게스트 아이콘("guestfs_inspect_get_icon") 생성은 Linux에서는 저렴하지만 비용이 많이 듭니다.
Windows에서.

평행 어플 라이언 스


Libguestfs 어플라이언스는 대부분 I/O 바인딩되어 있으며 여러 어플라이언스를 시작할 수 있습니다.
평행한. 사용 가능한 메모리가 충분하다면 차이는 거의 없습니다.
1개의 어플라이언스와 N개의 어플라이언스를 병렬로 실행합니다.

2GB RAM을 갖춘 4코어(16스레드) 노트북에서 (특별히 현실적이지는 않은) 테스트를 사용하여
아래 Perl 스크립트, 다음 플롯은 1 사이에서 실행될 때 뛰어난 확장성을 보여줍니다.
20개의 기기를 병렬로 연결:

12 ++---+----+----+----+-----+----+----+----+----+-- -++
+ + + + + + + + + + *
| |
| * |
11++++
| |
| |
| * * |
10++++
| * |
| |
초 | |
9++++
전자 | |
| * |
c | |
8 ++ * ++
오 | * |
| |
엔 7 ++ ++
| * |
디 | * |
| |
6 ++ ++
| * * |
| * |
| |
5++++
| |
| * |
| * * |
4++++
| |
| |
+ * * * + + + + + + + +
3 ++-*-+----+----+----+------+----+----+----+----+-- -++
0 2 4 6 8 10 12 14 16 18
병렬 기기 수

20개 이상의 어플라이언스를 병렬로 실행할 수 있지만
libvirt 백엔드를 사용한다면 기본적으로 libvirt가 백엔드 수를 제한한다는 점을 알아야 합니다.
클라이언트 연결은 20개입니다.

아래의 간단한 Perl 스크립트는 위의 플롯에 대한 데이터를 수집하는 데 사용되었지만
고급 테스트 스크립트 및 그래프를 포함하여 이 주제에 대한 더 많은 정보,
다음 블로그 게시물에서 확인할 수 있습니다.

http://rwmj.wordpress.com/2013/02/25/multiple-libguestfs-appliances-in-parallel-part-1/
http://rwmj.wordpress.com/2013/02/25/multiple-libguestfs-appliances-in-parallel-part-2/
http://rwmj.wordpress.com/2013/02/25/multiple-libguestfs-appliances-in-parallel-part-3/
http://rwmj.wordpress.com/2013/02/25/multiple-libguestfs-appliances-in-parallel-part-4/

#!/usr/빈/환경

엄격한 사용;
스레드를 사용하십시오.
경고를 사용하십시오.
Sys::Guestfs를 사용하세요.
Time::HiRes qw(time) 사용;

하위 테스트 {
내 $g = Sys::Guestfs->new;
$g->add_drive_ro ("/dev/null");
$g->실행();

# 여기에 libguestfs가 수행할 작업을 추가할 수 있습니다.

$g->닫기();
}

# 모든 것을 캐시에 저장합니다.
시험 (); 시험 (); 시험 ();

내 $nr_threads (1..20)의 경우 {
내 $start_t = 시간();
내 @스레드;
foreach (1..$nr_threads) {
@threads 푸시, 스레드->생성(\&테스트)
}
foreach (@threads) {
$_->가입 ();
if (내 $err = $_->error ()) {
die "$nr_threads 스레드로 시작 실패: $err"
}
}
내 $end_t = 시간();
printf("%d %.2f\n", $nr_threads, $end_t - $start_t);
}

사용 사용자 모드 LINUX


libguestfs 1.24부터 사용자 모드 Linux(uml) 백엔드를 사용할 수 있게 되었습니다.
KVM 대신("USER-MODE LINUX BACKEND" 참조) 손님(삼)). 이 섹션에서는 일부
이 백엔드에 대한 일반적인 설명이지만 고도로 타당한 스스로 측정하기 위해
의견이나 직관을 신뢰하기보다는 UML에서 작업 부하를 줄이세요.

· UML은 일반적으로 베어메탈에서 KVM과 동일하거나 약간 느리게 수행됩니다.

· 그러나 UML은 베어메탈에서와 마찬가지로 가상화에서도 동일한 성능을 발휘하는 경우가 많습니다.
반면 KVM은 가상화에서 훨씬 느리게 실행될 수 있습니다(하드웨어 가상 가속 이후)
사용할 수 없습니다).

· 업로드 및 다운로드는 KVM보다 UML에서 10배나 느립니다. Libguestfs가 보냅니다.
이 데이터는 UML 에뮬레이트된 직렬 포트를 통해 전달되는데, 이는 KVM보다 훨씬 덜 효율적입니다.
Virtio-직렬.

· UML에는 일부 기능(예: qcow2 지원)이 부족하여 전혀 적용되지 않을 수 있습니다.

실제 수치는 다음을 참조하세요.
http://rwmj.wordpress.com/2013/08/14/performance-of-user-mode-linux-as-a-libguestfs-backend/#함유량

문제 해결 가난한 성능


확인 하드웨어 가상화 is 가능
/ proc / cpuinfo 그리고 이 페이지:

http://virt-tools.org/learning/check-hardware-virt/

하드웨어 가상화가 가능하도록 보장합니다. 활성화해야 할 수도 있습니다.
BIOS에서.

하드웨어 virt는 일반적으로 VM 내부에서 사용할 수 없으며 libguestfs는 내부에서 느리게 실행됩니다.
무엇을 하든 또 다른 가상 머신이 됩니다. 중첩된 가상화는 우리 환경에서 제대로 작동하지 않습니다.
경험이 풍부하며 베어메탈에서 libguestfs를 실행하는 것을 대체할 수는 없습니다.

확인 KVM is 가능
KVM이 활성화되어 있고 libguestfs를 실행할 사용자가 사용할 수 있는지 확인하세요. 그래야 한다
0666 권한을 설정하는 것이 안전합니다. /dev/kvm 현재 대부분의 배포판에서는 이 작업을 수행합니다.

프로세서 피하기
하드웨어 가상화 기능이 없는 프로세서와 가상화된 일부 프로세서는 피하세요.
매우 느립니다(AMD Geode가 좋은 예입니다).

dom0
Xen에서는 dom0이 가상 머신이므로 하드웨어 가상화를 사용할 수 없습니다.

구체적 타이밍 사용 TS


사용 ts(1) 자세한 타이밍을 표시하는 명령(moreutils의):

$ guestfish -a /dev/null run -v |& ts -i '%.s'
0.000022 libguestfs: 실행: 프로그램=guestfish
0.000134 libguestfs: 실행: 버전=1.29.31fedora=23,릴리스=2.fc23,libvirt
0.000044 libguestfs: 시작: 백엔드 등록됨: unix
0.000035 libguestfs: 시작: 백엔드 등록됨: uml
0.000035 libguestfs: 실행: 백엔드 등록됨: libvirt
0.000032 libguestfs: 실행: 백엔드 등록됨: 직접
0.000030 libguestfs: 실행: 백엔드=libvirt
0.000031 libguestfs: 실행: tmpdir=/tmp/libguestfsw18rBQ
0.000029 libguestfs: 시작: umask=0002
0.000031 libguestfs: 시작: euid=1000
0.000030 libguestfs: libvirt 버전 = 1002012(1.2.12)
[등]

타임스탬프는 초 단위입니다(이전 줄 이후로 증분).

구체적 타이밍 사용 시스템탭


SystemTap(찌르다(1)) libguestfs 프로그램에서 자세한 타이밍을 가져옵니다.

다음 스크립트를 다음과 같이 저장하십시오. 타임스탭:

글로벌 마지막;

함수 display_time () {
지금 = gettimeofday_us();
델타 = 0;
만약 (마지막 > 0)
델타 = 지금 - 마지막;
마지막 = 지금;

printf("%d (+%d):", 이제, 델타);
}

프로브 시작 {
마지막 = 0;
printf("준비\n");
}

/* 정적 마커에 대한 모든 호출을 표시합니다. */
프로브 프로세스("를 / usr / lib에*/libguestfs.so.0")
.provider("guestfs").mark("*") ? {
디스플레이_시간();
printf("\t%s %s\n", $$name, $$parms);
}

/* guestfs_* 함수에 대한 모든 호출을 표시합니다. */
프로브 프로세스("를 / usr / lib에*/libguestfs.so.0")
.function("guestfs_[az]*") ? {
디스플레이_시간();
printf("\t%s %s\n", 프로브펑크(), $$parms);
}

한 창에서 루트로 실행하십시오.

# 시간을 멈춘다.stap
준비

SystemTap이 프로그램을 로드하면 "ready"가 인쇄됩니다. libguestfs 프로그램을 실행하세요.
guestfish 또는 다른 창의 virt 도구. 예를 들어:

$ guestfish -a /dev/null 실행

스탭 창에서는 각 출력에 소요되는 시간과 함께 많은 양의 출력을 볼 수 있습니다.
표시된 단계(괄호 안은 마이크로초). 예를 들어:

xxxx (+0): guestfs_create
xxxx (+29): guestfs_set_pgroup g=0x17a9de0 pgroup=0x1
xxxx (+9): guestfs_add_drive_opts_argv g=0x17a9de0 [...]
xxxx (+8): guestfs_int_safe_strdup g=0x17a9de0 str=0x7f8a153bed5d
xxxx (+19): guestfs_int_safe_malloc g=0x17a9de0 nbytes=0x38
xxxx (+5): guestfs_int_safe_strdup g=0x17a9de0 str=0x17a9f60
xxxx (+10): guestfs_launch g=0x17a9de0
xxxx (+4): 발사_시작
[등]

완전히 이해하려면 libguestfs에 대한 소스를 참조하고 수정해야 합니다.
출력.

구체적 디버깅 사용 GDB


gdb를 사용하여 어플라이언스 BIOS/커널에 연결할 수 있습니다. 당신이 무엇을 하고 있는지 알고 있다면,
이는 부팅 회귀를 진단하는 유용한 방법이 될 수 있습니다.

먼저, "-S" 및 "-s" 옵션으로 실행되도록 qemu를 변경해야 합니다. 이러한 옵션
부팅 시 qemu를 일시 중지하고 디버거를 연결할 수 있도록 합니다. 읽다 케무(1) 더 나아가
정보. Libguestfs는 qemu를 여러 번 호출합니다(도움말 출력 등을 스캔하기 위해).
qemu의 최종 호출에서만 이러한 옵션을 사용하기를 원하므로 qemu 래퍼를 사용하세요.
다음과 같은 스크립트:

#!/ bin / bash -

# 실제 qemu 바이너리를 가리키도록 설정합니다.
qemu=/usr/bin/qemu-kvm

if [ "$1" != "-전역" ]; 그 다음에
# 도움말 출력 등을 검색합니다.
$qemu "$@" 실행
그렇지 않으면
# 실제로 qemu를 실행 중입니다.
exec $qemu -S -s "$@"
fi

이제 qemu 래퍼를 사용하여 guestfish 또는 다른 libguestfs 도구를 실행합니다("QEMU WRAPPERS" 참조).
손님(3) 이것이 무엇을 하는지 이해하기 위해):

LIBGUESTFS_HV=/path/to/qemu-wrapper guestfish -a /dev/null -v 실행

이는 qemu가 시작된 직후에 일시 중지되어야 합니다. 다른 창에서 gdb를 사용하여 qemu에 연결합니다.

$gdb
(gdb) 아키텍처 i8086 설정
대상 아키텍처는 i8086으로 가정됩니다.
(gdb) 대상 원격 :1234
:1234를 사용한 원격 디버깅
0x0000fff0 ?? ()
(gdb) 계속

이 시점에서 표준 gdb 기술을 사용할 수 있습니다. 부팅을 중단하려면 "^C"를 누르세요.
"bt"는 스택 추적, 중단점 설정 등을 가져옵니다.
BIOS 및 Linux 커널에서 아키텍처를 다시 32 또는 64로 변경하고 싶을 것입니다.
비트.

onworks.net 서비스를 사용하여 온라인으로 guestfs-performance를 사용하세요.


무료 서버 및 워크스테이션

Windows 및 Linux 앱 다운로드

Linux 명령

Ad