Cuttlefish 멀티 테넌시를 사용하면 한 번의 실행 호출로 호스트 머신에서 여러 개의 가상 게스트 기기를 시작할 수 있습니다.
이러한 여러 개의 Cuttlefish 가상 머신은 호스트 디스크 리소스의 일부를 공유할 수 있으므로 디스크 공간 절약이 가능합니다. 각 가상 머신에는 Android 파티션을 포괄하는 고유한 디스크 오버레이가 제공됩니다(예: super
, userdata
, boot
). 게스트 디스크의 모든 수정사항은 게스트별 디스크 오버레이에 있으며 각 Cuttlefish 가상 머신에 디스크 파티션의 COW(기록 중 복사) 뷰를 제공합니다. 각 가상 기기에서 디스크 뷰에 더 많은 데이터를 쓰면 호스트 디스크의 오버레이 파일에서 원래 상태와 현재 상태의 차이를 캡처하므로 오버레이 파일 크기가 커집니다.
오버레이 파일을 재설정하여 Cuttlefish 디스크를 원래 상태로 되돌릴 수 있습니다. 이 프로세스를 파워워시라고 합니다.
인스턴스 번호
Cuttlefish 기기는 인스턴스 번호에 연결된 호스트에서 리소스를 생성하고 사용합니다. 예를 들어, adb
연결은 인스턴스 번호가 1
인 Cuttlefish 기기의 경우 6520
포트에서 TCP 서버 소켓을 통해 노출됩니다.
여러 인스턴스가 실행되면 첫 번째 기기는 6520
포트, 두 번째 기기는 6521
포트에 TCP 서버 소켓을 만들고 기기가 추가될 때마다 포트 번호를 증분합니다.
지원되는 최대 인스턴스 수 수정
TAP 네트워크 기기와 같은 호스트 측 리소스는 Cuttlefish 가상 머신에 사전 할당되어야 합니다. 기본적으로 cuttlefish-base Debian 패키지는 인스턴스 번호 1
~10
에 리소스를 프로비저닝합니다.
이는 /etc/default/cuttlefish-host-resources
의 num_cvd_accounts
를 수정하고 다음 명령어로 cuttlefish-host-resources
서비스를 다시 시작하여 변경할 수 있습니다.
sudo systemctl restart cuttlefish-host-resources
표준 구성
표준 구성은 Cuttlefish 기기의 구성을 JSON 형식으로 나타냅니다. 표준 구성 JSON 파일을 만들어 멀티 테넌트 시나리오에서 여러 Cuttlefish 기기의 구성을 설명할 수 있습니다.
다음은 표준 구성 JSON 파일에 사용된 형식을 설명합니다(자리표시자를 기기 구성으로 대체).
{
"common": {
CONFIGURATIONS_APPLYING_TO_ALL_DEVICES
},
"instances": [
{
FIRST_DEVICE_CONFIGURATION
},
{
NTH_DEVICE_CONFIGURATION
}
]
}
다음은 두 기기(휴대전화 기기와 웨어러블 기기)의 설정 구성 파일을 보여주는 예입니다.
{
"instances": [
{
"@import": "phone",
"vm": {
"memory_mb": 8192,
"setupwizard_mode": "OPTIONAL",
"cpus": 4
},
"disk": {
"default_build": "/home/username/devices/cf_x86_64_phone-userdebug"
}
},
{
"@import": "wearable",
"vm": {
"memory_mb": 8192,
"setupwizard_mode": "REQUIRED",
"cpus": 4
},
"disk": {
"default_build": "/home/username/devices/cf_gwear_x86-userdebug"
}
}
]
}
다음 표는 두 기기의 구성 예에 사용된 요소를 설명합니다.
요소 | 유형 | 설명 |
---|---|---|
instances |
배열 | JSON 객체의 배열입니다. 각각 실행할 멀티 테넌트 기기 그룹의 단일 기기를 설명합니다. |
@import |
문자열 | 기기 유형을 나타내고 기기 구성의 기본값을 설정합니다. 지원되는 기기 유형은 phone , wearable 입니다. |
vm |
객체 | 기기 인스턴스와 관련된 VM 환경에 적용되는 속성을 지정합니다. |
memory_mb |
숫자 | 특정 VM에 할당할 메모리 양(MB)입니다. |
setupwizard_mode |
문자열 | 처음 기기를 실행할 때 사용자를 위해 기기 설정 마법사를 실행할지 지정합니다. 지원되는 설정 마법사 모드 옵션은 DISABLED , OPTIONAL , REQUIRED 입니다. |
cpus |
숫자 | VM에 할당된 가상 CPU 수입니다. |
disk |
객체 | 단일 VM 인스턴스를 실행하는 데 사용되는 파일 시스템 아티팩트를 찾는 것과 관련된 속성을 지정합니다. |
default_build |
문자열 | Cuttlefish 가상 기기 이미지가 포함된 폴더의 로컬 파일 시스템 경로입니다. |
cvd
로 배포된 구성 파일에 관한 더 많은 예는 Cuttlefish 코드 트리의 cvd_test_configs
폴더를 참고하세요.
멀티 테넌트 인스턴스 제어
이 섹션에서는 멀티 테넌트 시나리오에서 기기를 시작하고 중지하는 방법을 설명합니다. 다음 옵션을 사용하여 여러 Cuttlefish 기기를 실행할 수 있습니다.
- 표준 구성: 실행할 인스턴스 목록을 설명하는 JSON 구성 파일을 사용하여 맞춤설정된 각 기기 구성을 실행합니다.
- 단일 게스트 이미지: 단일 게스트 이미지에서 여러 기기를 실행합니다.
표준 구성에서 여러 VM 시작
멀티 테넌트 시나리오를 설명하는 표준 구성을 사용하여 여러 VM을 시작하려면 다음과 같이 --config_file=
플래그 접두사와 함께 cvd start
명령어를 호출합니다.
cvd start --config_file=CONFIG_FILE
다음은 /etc/phone.json
이라는 표준 구성 파일을 참조하는 호출을 보여주는 예입니다.
cvd start --config_file=/etc/phone.json
단일 게스트 이미지에서 여러 VM 시작
단일 게스트 이미지를 사용하여 여러 Cuttlefish 기기를 시작하려면 --num_instances=N
플래그를 사용하세요. 여기서 N은 시작할 기기의 수입니다. 기본적으로 기기의 인스턴스 번호는 1
부터 시작합니다.
cvd start --num_instances=N
시작하는 인스턴스 번호를 변경하려면 다음 중 한 가지 방법을 사용합니다.
--base_instance_num=N
플래그를 추가합니다(N은 첫 번째 인스턴스 번호).cvd start --base_instance_num=N
vsoc-NN
과 일치하는 사용자 계정으로 Cuttlefish를 시작합니다. 여기서 NN은 두 자리 형식의 기본 인스턴스 번호입니다. 예를 들어,vsoc-01
이라는 사용자 계정으로 Cuttlefish를 시작하려면 다음을 실행합니다.cvd start --base_instance_num=1
기기 중지 방법
마지막 cvd start
호출로 시작된 모든 기기를 중지하려면 다음을 실행합니다.
cvd stop