코어와 메모리는 따로 적습니다
이 머신의 프로세서는 32코어, 64스레드입니다. 메모리는 주문할 때 128GB 또는 256GB를 고르며, 규격은 DDR4-3200 ECC RDIMM입니다. 두 용량은 두 가지 머신입니다. 설치 뒤에 메모리 모듈을 추가할 수 없습니다. 스레드는 가상 머신 사이에서 시간을 나눠 쓸 수 있습니다. 메모리 페이지는 초과 할당으로 늘어나지 않습니다. 장부는 두 개입니다. 스레드와 고정 메모리입니다. 둘 다 호스트가 남기는 몫을 뺀 나머지가 가상 머신의 예산입니다.
디스크는 다른 장부입니다. 기본은 2×1TB NVMe, 하드웨어 RAID 없음, 각 디스크는 직접 연결입니다. 시스템과 가상 머신 디스크를 나누는 방법은 Proxmox에서 직접 연결 NVMe 두 장을 어떻게 나눌까요에 있습니다. 디스크를 맞게 나눠도 128GB가 256GB가 되지는 않습니다.
대역과 주소도 메모리 단계를 바꾸지 않습니다. 추가 주소를 기본 주소와 함께 세는 방법은 추가 IPv4와 기본 주소는 어떻게 함께 계산할까요에 있습니다. 이 글이 정하는 것은 코어와 메모리입니다.
호스트가 남길 스레드
64스레드는 물리 코어 32개에서 나옵니다. 코어 하나에 SMT 스레드가 두 개입니다. SMT 스레드 하나는 全速 코어 하나와 같지 않습니다. 데이터베이스, 컴파일, 그 안에서 가상 머신을 또 돌리는 게스트는 물리 코어로 예산을 잡습니다. 대부분 네트워크를 기다리는 사이트는 스레드를 나눠 써도 됩니다.
호스트는 화면, 네트워크, 스토리지를 위해 스레드를 남깁니다. ZFS가 없으면 4스레드, 곧 2코어입니다. 풀 중 하나라도 ZFS이면 8스레드, 곧 4코어입니다. 스크럽과 체크섬에 남을 자리입니다. Proxmox에는 호스트 예약이라는 스위치가 없습니다. 각 가상 머신의 CPU affinity가 그 스레드를 피합니다. ZFS가 없으면 4-63으로 두고 0–3을 피합니다. ZFS이면 8-63으로 두고 0–7을 피합니다. 번호는 0부터 63까지입니다. 빠뜨린 한 대가 예약 스레드를 차지하므로 모든 게스트에 같은 값을 넣습니다. 호스트 프로세스는 모든 스레드를 쓸 수 있습니다.
동시에 꽉 차는 vCPU 수는 남은 스레드 안에 둡니다. ZFS가 없으면 60, 있으면 56입니다. 사이트 vCPU 합은 이 수를 넘겨도 됩니다. 동시에 꽉 차지 않기 때문입니다. 오래 꽉 차는 가상 머신은 vCPU를 32코어에서 뺍니다. 상한은 ZFS가 없으면 30코어, 있으면 28코어입니다. 두 메모리 단계는 같은 프로세서입니다. 256GB를 골라도 코어는 늘지 않습니다.
| 장부 | ZFS 없음 | ZFS 있음 |
|---|---|---|
| 전체 스레드 | 64 (32코어) | 64 (32코어) |
| 호스트가 남김 | 4스레드, 0–3 회피 | 8스레드, 0–7 회피 |
| 남은 스레드 | 60 | 56 |
| 오래 꽉 차는 코어 | 최대 30 | 최대 28 |
데이터베이스에 8 vCPU를 주면 8코어로 셉니다. ZFS가 없으면 호스트가 이미 2코어를 쓰므로, 꽉 차는 다른 게스트에 22코어가 남습니다. 사이트 10대가 각 2 vCPU이면 합이 20스레드라 이 데이터베이스와 같이 둘 수 있습니다. 데이터베이스가 16 vCPU이고, 8 vCPU로 꽉 차는 게스트가 네 대이면 코어 합이 48이라 30을 넘습니다. 꽉 차는 vCPU를 먼저 줄입니다. 256GB의 코어 수는 그대로 32입니다.
설치 뒤 lscpu로 NUMA 노드 수를 봅니다. 이 7543P는 싱글 소켓이어도 노드가 둘 이상일 수 있습니다. 둘 이상이면 데이터베이스의 메모리와 vCPU를 같은 노드에 둡니다. 노드가 하나이면 노드를 넘는 배치는 필요 없습니다.
호스트가 남길 메모리
Proxmox 문서는 가상 머신에 메모리를 나눌 때 호스트에 최소 1GB의 여유를 남기라고 적습니다. 이것은 하한입니다. 이 머신은 가상 머신 여러 대를 동시에 돌리고, 노드에는 화면, 로그, 페이지 캐시도 있습니다. 예산에서는 노드에 8GB를 더 남기고, 어떤 가상 머신에도 배정하지 않습니다.
ZFS ARC는 따로 계산하고, 실제 상한을 먼저 읽습니다. 설치 프로그램이 시스템을 ZFS에 두면 Proxmox VE 8.1 이후는 ARC 상한을 메모리의 약 10%, 그리고 16GB 이하로 /etc/modprobe.d/zfs.conf에 적습니다. 128GB의 10%는 약 12.8GB로 상한보다 작습니다. 256GB의 10%는 16GB를 넘으므로 상한은 16GB입니다. 이 상한은 호스트 쪽에 남고 가상 머신에 나누지 않습니다. VE 8 초기 매체와, 설치 뒤에 만든 풀에는 이 상한이 없을 수 있습니다.
나중에 만든 풀은 ZFS 기본값, 대략 절반으로 내려갑니다. ZFS 2.3부터 기본값은 메모리의 62.5%까지 올라갈 수 있습니다. 128GB에서는 게스트를 만들기 전에 약 64GB가 먼저 나갑니다. 상한을 바꾼 뒤에 가상 머신을 만듭니다.
/proc/spl/kstat/zfs/arcstats의 c_max를 읽습니다. 단위는 바이트입니다. 1024의 세제곱으로 나누면 GiB입니다. 파일이 없으면 ZFS가 올라오지 않은 것이므로 ARC는 0입니다. 상한을 바꿀 때는 zfs.conf에 zfs_arc_max를 적습니다. 값은 GiB에 1024의 세제곱을 곱한 수입니다. 128GB의 약 10%는 12GiB, 곧 12884901888입니다. 256GB에서는 ARC 상한을 16GiB, 곧 17179869184로 적습니다. 두 용량에서 이 상한은 ARC 기본 하한(메모리의 약 32분의 1)보다 높으므로 이 한 줄이면 됩니다. 그다음 update-initramfs -u를 실행하고 노드를 다시 시작합니다. 다시 시작하기 전에는 바꾼 숫자로 가상 머신을 만들지 않습니다.
가상 머신 고정 메모리 합의 상한은 물리 메모리에서 ARC 상한을 빼고, 다시 8GB를 뺀 값입니다.
| 머신 | ARC | 노드가 남김 | 고정 메모리 합 |
|---|---|---|---|
| 128GB, ZFS 없음 | 0 | 8GB | 120GB 이하 |
| 128GB, 설치 시 ZFS | 약 12.8GB | 8GB | 107GB 이하 |
| 256GB, ZFS 없음 | 0 | 8GB | 248GB 이하 |
| 256GB, 설치 시 ZFS | 16GB에서 멈춤 | 8GB | 232GB 이하 |
풍선 메모리는 모듈 추가가 아닙니다. 최소 메모리가 최대보다 작을 때만 Proxmox가 호스트 사용률이 목표(기본 80%) 아래일 때 메모리를 빌려 주고, 부족하면 거둬 갑니다. 데이터베이스와, 그 안에서 가상 머신을 돌리는 게스트는 최소와 최대를 같게 두어 캐시가 회수되지 않게 합니다. 사이트는 차이를 두어도 됩니다. 지분은 기본값 1000을 유지합니다. KSM은 내용이 같은 페이지만 합칩니다. 128GB를 256GB로 만들지 않습니다. 예산에 KSM은 넣지 않습니다.
128GB에 들어가는 나누기
아래는 ZFS 없음, 상한 120GB로 비교합니다. 고정 메모리는 최소와 최대가 같은 값입니다. 사이트 vCPU는 오래 꽉 차는 코어로 세지 않습니다.
| 동시에 켜짐 | 고정 메모리 | 꽉 차는 코어 | 120GB와 비교 |
|---|---|---|---|
| 사이트 8대, 각 4GB·2 vCPU | 32GB | 꽉 찬 것으로 세지 않음 | 여유 88GB |
| 데이터베이스 64GB·8 vCPU, 앱 4대가 각 8GB | 96GB | 8 | 여유 24GB |
| 데이터베이스 48GB·8 vCPU, 사이트 6대가 각 4GB | 72GB | 8 | 여유 48GB |
| 데이터베이스 64GB·8 vCPU, 앱 4대가 각 8GB, 사이트 2대가 각 4GB | 104GB | 8 | 여유 16GB |
네 조합 모두 고정 메모리가 120GB 이하이고, 꽉 차는 코어도 30 이하입니다. 여유가 8GB보다 크므로 ZFS가 없으면 128GB에 둘 수 있습니다. 사이트가 더 많아도 한 대가 작고 동시에 꽉 차지 않으면 들어갑니다. 이 표의 한계는 메모리 합계입니다. 코어에는 아직 자리가 있습니다.
꽉 차는 8코어에 호스트 2코어를 더해도 32코어까지는 거리가 있습니다. 시스템 디스크가 ZFS이면 상한은 약 107GB입니다. 96GB 조합은 여유가 약 11GB라 128GB에 둘 수 있습니다. 104GB 조합은 여유가 약 3GB라 빠듯하므로 256GB로 바꿉니다.
256GB로 가는 나누기
다음 표의 위쪽 세 조합은 고정 메모리가 120GB를 넘어, ZFS 없는 128GB에는 들어가지 않습니다. 네 번째 조합은 112GB입니다. 120GB를 넘지는 않지만 여유가 8GB뿐이므로 빠듯하고 256GB로 갑니다. ZFS 없는 256GB의 상한은 248GB입니다. 네 조합 모두 들어가고, 여유는 모두 8GB보다 큽니다.
| 동시에 켜짐 | 고정 메모리 | 128GB, ZFS 없음 | 256GB, ZFS 없음 |
|---|---|---|---|
| 데이터베이스 96GB, 앱 8대가 각 8GB | 160GB | 120GB 초과 | 248GB 안, 여유 88GB |
| 게스트 20대, 각 8GB | 160GB | 120GB 초과 | 248GB 안, 여유 88GB |
| 데이터베이스만 128GB | 128GB | 120GB 초과 | 248GB 안, 여유 120GB |
| 데이터베이스 64GB와 중첩 호스트 48GB | 112GB | 여유 8GB, 빠듯함 | 248GB 안, 여유 136GB |
8GB 게스트 20대에 2 vCPU씩 주면 합이 40스레드입니다. 남은 60스레드 안에 있습니다. 한계는 메모리입니다. 데이터베이스가 고정 128GB를 요구하면 128GB 머신에는 노드의 8GB를 둘 자리가 없습니다. 256GB의 상한 248GB에는 들어가고 여유는 120GB입니다.
64GB 데이터베이스에 48GB 중첩 호스트를 더하면 112GB입니다. 120GB에 대한 여유가 8GB이므로 256GB로 갑니다. 시스템 디스크가 이미 ZFS이면 상한이 약 107GB라 112GB 자체가 넘습니다. 중첩 호스트의 48GB는 물리 머신에 한 번, 통째로 넣습니다. 안의 작은 가상 머신만 더하거나 두 번 더하지 않습니다.
두 단계는 같은 AMD EPYC 7543P, 32코어 / 64스레드, 2.8–3.7 GHz, L3 256MB입니다. 메모리는 모두 DDR4-3200 ECC RDIMM입니다. 128GB 월 요금은 $462, 256GB는 $595, 차이는 $133입니다. 256GB에서 늘어나는 것은 메모리입니다. 코어 수는 32입니다. 설치 장소는 일본 도쿄입니다. 시스템은 Proxmox VE 8 또는 9를 고를 수 있고 OS 추가 요금은 없습니다. 기본 디스크는 2×1TB NVMe, 하드웨어 RAID 없음, 각 디스크는 직접 연결이며 사용 용량은 두 장의 합입니다. 대역은 250M, 1G, 2G이고 월 가산은 $0, $255, $745이며 트래픽 상한은 없고 메모리 장부는 바뀌지 않습니다. IPv4는 1개가 포함되고 추가는 개당 $2, 최대 255개입니다. 낼 금액은 월 요금에 개월 수를 곱한 값입니다. 월간, 분기, 반년, 연간 모두 할인이 없습니다. 설치비는 없습니다. 노드는 SSH로 다룹니다.
게스트 안에서 한 층 더
중첩이 필요한 경우는 게스트가 스스로 KVM이나 또 다른 Proxmox를 돌릴 때입니다. 일반 사이트와 데이터베이스에는 필요 없습니다. 켠 뒤에는 안쪽 가상 머신이 바깥 게스트의 메모리와 vCPU를 쓰고, 바깥 게스트는 물리 머신의 분량을 씁니다. 세 층을 모두 뺍니다.
호스트에 svm이 보이는지
노드에서 grep -m1 svm /proc/cpuinfo를 실행합니다. 출력이 있으면 프로세서가 AMD 가상화 플래그 svm을 시스템에 내놓은 것입니다. 출력이 없으면 안쪽은 하드웨어 가속을 받지 못하므로 메모리 나누기를 거기서 멈춥니다.
중첩 매개변수 읽기
cat /sys/module/kvm_amd/parameters/nested를 실행합니다. 1이면 호스트 쪽은 이미 켜져 있어 모듈을 바꾸지 않습니다. 0이면 먼저 모든 가상 머신을 끕니다. /etc/modprobe.d/kvm-amd.conf를 만들거나 덧붙이고 options kvm-amd nested=1을 적습니다. 이 줄의 모듈 이름은 하이픈입니다. sysfs 경로는 밑줄입니다. 둘 다 같은 모듈입니다. 파일에 다른 줄이 있으면 덧붙이고, 파일 전체를 덮어쓰지 않습니다. 그다음 노드를 다시 시작합니다.
바깥 게스트 CPU는 host
노드에서 qm set 101 --cpu host를 실행합니다. 101은 바깥 게스트 번호로 바꿉니다. 화면에서는 하드웨어, 프로세서, 유형을 host로 고릅니다. 바꾼 뒤 노드에서 그 게스트를 끈 다음 다시 켜서 QEMU가 host로 다시 만들어지게 합니다. 게스트 OS 안에서만 다시 시작하면 CPU 유형은 바뀌지 않습니다.
게스트가 올라온 뒤 그 안에서 svm 확인을 한 번 더 실행합니다. 출력이 있으면 안쪽에 하드웨어 가속이 있는 가상 머신을 만들 수 있습니다. 바깥에 8 vCPU를 주면 안쪽이 동시에 쓸 수 있는 것도 그 8개이며, 물리 코어는 늘지 않습니다. 안쪽 세 대가 각 4 vCPU이면 합이 12라 바깥의 8을 이미 넘습니다. 안쪽이 먼저 초과 할당입니다. 물리 32코어는 늘지 않습니다.
바깥 메모리는 한 번에 뺍니다
바깥에 48GB를 주면, 안쪽 고정 메모리와 바깥 시스템이 남길 분량의 합은 그 48GB보다 작아야 합니다. 안쪽 세 대가 각 8GB이면 24GB이고, 바깥 시스템이 8GB를 남겨도 48GB 안에 있습니다. 안쪽에 32GB를 한 대 더하면 24+32+8이 64가 되어 48을 넘습니다. 먼저 바깥을 키웁니다. 바깥이 48GB에서 64GB가 되면 그 차이는 물리 머신 상한에서 다시 뺍니다.
이 층을 앞의 표에 다시 놓습니다. ZFS 없음, 상한 120GB일 때 64GB 데이터베이스와 이 48GB 바깥을 더하면 112GB, 여유 8GB이므로 256GB로 갑니다. 바깥 안의 24GB는 이미 48GB에 들어 있습니다. 중첩은 시험과, 게스트 한 대 안의 작은 가상 머신에 맞습니다. 안쪽을 물리 머신과 같은 밀도로 채우지 않습니다. 바깥에 넘긴 메모리는 노드의 다른 가상 머신에 다시 나눌 수 없습니다.
주문 전에 장부를 닫습니다
예산은 함께 켜져 있는 가상 머신으로 셉니다. 한 주 안에 한 번 켜 본 머신은 넣지 않습니다. 낮에 꺼 둔 컴파일 머신은 낮 합계에 들어가지 않습니다. 밤에 데이터베이스와 함께 켜면 밤 조합을 따로 적습니다. 두 조합 모두 상한 안에 있고 여유가 8GB보다 커야 128GB로 정합니다. 낮만 세고 밤 조합을 빼면 설치 뒤에 메모리가 부족해지고, 모듈은 추가할 수 없습니다.
- 시스템 디스크가 ZFS인지 확인합니다. 맞으면 ARC 상한을 넣습니다. 아니면 ARC는 0입니다. 나중에 만든 풀은 약 10%이면서 16GB를 넘지 않게 상한을 맞춘 뒤 계산합니다.
- 노드는 8GB를 남깁니다. ZFS가 없으면 친화성은 0–3을 피하고, 있으면 0–7을 피합니다.
- 동시에 켜질 가상 머신의 고정 메모리를 더합니다. 중첩이 있으면 바깥을 통째로 넣고, 안쪽은 다시 더하지 않습니다.
- 합계가 상한 안이고, 상한에서 합계를 뺀 값이 8GB보다 클 때만 128GB에 남깁니다. 그 외에는 256GB입니다.
- 오래 꽉 차는 vCPU를 코어로 더합니다. ZFS가 없으면 30 이하, 있으면 28 이하입니다. 넘으면 어느 메모리 단계도 코어를 늘리지 못합니다.
- 시스템은 Proxmox VE 8 또는 9입니다. 디스크는 디스크 나누기 글대로 시스템과 가상 머신 디스크를 나눕니다. SSH로 노드에 들어간 뒤 위 명령으로 svm, 중첩 매개변수, ARC를 확인합니다.
낮 숫자를 한 번 따라가 봅니다. 데이터베이스는 고정 64GB, 8 vCPU, 최소 메모리도 64GB입니다. 앱 네 대가 각 8GB, 사이트 두 대가 각 4GB입니다. 메모리 합은 104GB입니다. ZFS가 없으면 상한 120GB, 여유 16GB로 8GB보다 커서 128GB에 남습니다. 데이터베이스는 8코어, 호스트는 2코어, 앱과 사이트는 오래 꽉 차지 않습니다. 같은 조합에서 시스템 디스크가 ZFS이면 상한이 약 107GB, 여유가 약 3GB라 256GB로 갑니다. 데이터베이스 자체를 고정 128GB로 하면 그 한 대가 이미 120GB를 넘으므로 256GB입니다. ZFS 없는 256GB 상한은 248GB입니다. 128GB 데이터베이스에 원래 앱과 사이트 40GB를 더하면 168GB, 여유 80GB로 들어갑니다.
코어 장부는 두 단계가 같습니다. 메모리 장부는 다릅니다. 고정 메모리 합과 여유가 128GB에 맞지 않으면 주문은 256GB입니다.
메모리 단계를 정한 다음 가상 머신을 나눕니다
$462 / 월부터