OmniLab ATS의 가상 기기

OmniLab ATS는 실제 Android 기기 없이 테스트를 실행하는 데 사용할 수 있는 Cuttlefish 가상 기기를 지원합니다. Cuttlefish는 하드웨어에 독립적인 기능을 테스트하는 데 적합합니다. 가상 기기 사용을 시작하기 전에 사용자 가이드에 따라 OmniLab ATS를 설치합니다.

OmniLab ATS는 로컬, 원격, Cloud Orchestration의 세 가지 모드로 가상 기기를 지원합니다. 다음 표에서는 모드를 비교합니다.

로컬 가상 기기원격 가상 기기Cloud Orchestration
ATS 작업자 호스트에서 실행ATS 작업자 호스트가 SSH를 통해 액세스할 수 있는 원격 호스트에서 실행Cloud Orchestrator에서 관리하는 로컬 또는 원격 호스트에서 실행
x86 기반호스트 아키텍처에 따라 x86 또는 ARM일 수 있음 호스트 아키텍처에 따라 x86 또는 ARM일 수 있음
간편한 설정설정이 더 복잡함확장 가능한 고성능, 동시 인스턴스 실행 지원

로컬 및 원격 가상 기기 모드를 독립적으로 사용 설정할 수 있습니다. 또는 두 모드 모두와 완전한 기능 패리티를 제공하는 최신 대체 기능인 Cloud Orchestration을 사용 설정할 수 있습니다. Cloud Orchestration은 동시 인스턴스 실행 및 더 나은 리소스 격리와 같은 주요 이점을 제공합니다. 각 모드에 관한 자세한 내용은 다음을 참고하세요.

로컬 가상 기기 설정

이 섹션에서는 로컬 가상 기기를 위한 OmniLab ATS 설정 단계를 설명합니다.

Cuttlefish 종속 항목 설치

다음 명령어를 실행하여 필요한 커널 모듈이 로드되었는지 확인합니다.

sudo modprobe -a kvm tun vhost_net vhost_vsock

로컬 가상 기기로 OmniLab ATS 시작

OmniLab ATS를 시작하기 전에 모든 Cuttlefish 인스턴스가 중지되었는지 확인합니다. OmniLab ATS는 테스트 주기 중에 가상 기기를 자동으로 시작하고 중지하며 기존 Cuttlefish 인스턴스는 OmniLab ATS에서 관리하는 인스턴스와 충돌합니다. Cuttlefish 인스턴스 중지에 관한 자세한 내용은 Cuttlefish 중지를 참고하세요.

로컬 가상 기기를 사용 설정하려면 다음을 실행합니다.

mtt start --max_local_virtual_devices N

N 은 OmniLab ATS가 동시에 할당할 수 있는 최대 가상 기기 수입니다. 기본값은 0입니다.

누락된 기기 노드로 인해 명령어가 실패하면 오류 메시지의 단계를 따라 커널 모듈을 로드합니다. 그래도 실패하면 시스템을 재부팅하세요.

원격 가상 기기 설정

이 섹션에서는 원격 가상 기기를 위한 OmniLab ATS 설정 단계를 설명합니다.

Cuttlefish 종속 항목 설치

Cuttlefish 종속 항목을 설치하려면 다음 단계를 따르세요.

  1. Cuttlefish > 시작하기의 단계에 따라 원격 호스트에 Debian 패키지를 설치합니다.

  2. 다음 단계에 따라 원격 호스트 에서 최대 가상 기기 수를 구성합니다.

    1. 루트 권한으로 /etc/default/cuttlefish-host-resources를 수정합니다.
    2. num_cvd_accounts를 이 호스트에서 허용할 최대 가상 기기 수로 설정합니다.
    3. sudo systemctl restart cuttlefish-host-resources를 실행합니다.
    4. ifconfig를 실행하고 cvd-wtap-* 인터페이스 수를 확인합니다.

SSH 계정 만들기

OmniLab ATS 호스트는 SSH를 통해 원격 호스트에 연결하므로 원격 호스트 에 SSH 계정을 준비해야 합니다. OmniLab ATS는 HOME 디렉터리의 파일을 조작하므로 전용 계정을 만드는 것이 좋습니다.

OmniLab ATS 호스트는 비밀번호 없이 원격 호스트에 로그인하기 위해 SSH 키 쌍이 필요합니다. 다음 단계에서는 SSH 키를 설정하는 방법을 설명합니다.

  1. 비공개 키와 공개 키를 생성하려면 OmniLab ATS 호스트 에서 ssh-keygen을 실행합니다.
  2. 공개 키를 업로드하고 원격 호스트~/.ssh/authorized_keys에 추가합니다.

SSH 계정이 Cuttlefish 종속 항목을 설치하는 데 사용되는 계정과 다른 경우 SSH 계정에서 Cuttlefish를 실행하도록 허용하려면 원격 호스트에서 다음 명령어를 실행합니다.

sudo usermod -aG kvm,cvdnetwork,render $USER

원격 가상 기기로 OmniLab ATS 시작

OmniLab ATS를 시작하기 전에 모든 Cuttlefish 인스턴스가 중지되었는지 확인합니다. OmniLab ATS는 테스트 주기 중에 가상 기기를 자동으로 시작하고 중지하며 기존 Cuttlefish 인스턴스는 OmniLab ATS에서 관리하는 인스턴스와 충돌합니다. Cuttlefish 인스턴스 중지에 관한 자세한 내용은 Cuttlefish 중지를 참고하세요.

성능 향상을 위해 근거리 통신망에서 OmniLab ATS 호스트와 원격 호스트를 설정하는 것이 좋습니다.

원격 가상 기기를 사용 설정하려면 OmniLab ATS 호스트에서 다음 명령어를 실행합니다.

mtt start --remote_virtual_devices USER@HOST/N \
--remote_ssh_key KEY

USER는 SSH 계정 이름입니다.

HOST는 원격 호스트의 IPv4 주소입니다.

N 은 OmniLab ATS가 동시에 할당할 수 있는 최대 가상 기기 수입니다.

KEYOmniLab ATS 호스트 의 비공개 SSH 키 경로입니다.

이 명령어는 OmniLab ATS를 시작하기 전에 원격 호스트에 대한 연결을 테스트합니다. 콘솔에 The specified --remote_virtual_devices and --remote_ssh_key are invalid.와 같은 경고 메시지가 표시되면 SSH 설정을 확인해야 합니다.

리소스 충돌을 방지하기 위해 OmniLab ATS 호스트는 최대 하나의 원격 호스트에 연결할 수 있습니다. 여러 OmniLab ATS 호스트가 동시에 하나의 원격 호스트에 연결할 수 없습니다.

가상 기기로 테스트 실행

이 섹션에서는 로컬 또는 원격 가상 기기에서 테스트를 실행하는 단계를 설명합니다.

기기 선택

기기 목록에서 OmniLab ATS는 가상 기기를 실제 일련번호 대신 자리표시자로 표시합니다. 자리표시자는 로컬 가상 기기의 경우 HOSTNAME:local-virtual-device-ID 형식으로, 원격 가상 기기의 경우 remote-virtual-ADDRESS-ID 형식으로 표시됩니다. 상태는 사용 가능 또는 할당됨 입니다. 사용 가능 상태의 자리표시자는 가상 기기가 실행되고 있지 않으며 테스트에 할당될 수 있음을 나타냅니다.

가상 기기 선택

그림 1. 가상 기기 선택

기기 작업 추가

하나 이상의 가상 기기를 선택하면 연결된 기기 작업이 목록에 자동으로 추가됩니다. 작업은 가상 기기를 만드는 데 필요한 TradeFed 매개변수와 테스트 리소스로 구성됩니다.

로컬 가상 기기 작업

그림 2. 로컬 가상 기기의 기기 작업

원격 가상 기기 작업

그림 3. 원격 가상 기기의 기기 작업

테스트 리소스 설정

Cuttlefish 가상 기기에는 가상 머신 도구, 이미지, Acloud라는 세 가지의 테스트 리소스가 필요합니다. 일반적인 Cuttlefish 빌드 (예: aosp_cf_x86_64_only_phone-userdebug ci.android.com 의)에서 가상 머신 도구는 cvd-host_package.tar.gz에 패키징되며 이미지는 aosp_cf_x86_64_only_phone-img-*.zip에 패키징됩니다. Acloud 바이너리는 OmniLab ATS에 빌드되며 모든 버전의 Cuttlefish와 호환됩니다. Acloud 바이너리의 기본 다운로드 URL은 디버깅 목적일 때만 변경하면 됩니다.

가상 기기 테스트 리소스

그림 4. 가상 기기의 테스트 리소스

테스트 실행 보기

kernel.log, host_log.txt, launcher.log를 비롯하여 기기 로그는 출력 파일 폴더에 수집됩니다. View Output Files를 클릭하여 결과를 확인합니다.

테스트 실행 결과

그림 5. 테스트 실행 결과