Proxmox ve NUMA: Sanallaştırma Performans Optimizasyonu

z

zafer ak

Yazar

25 November 2023 12 dakika okuma 610 görüntülenme
Proxmox ve NUMA: Sanallaştırma Performans Optimizasyonu
Proxmox VE'de NUMA yapılandırması ile sanal makine performansını artırın. CPU pinning ve bellek optimizasyonu.

NUMA Nedir?

NUMA (Non-Uniform Memory Access), çok işlemcili sistemlerde bellek erişim mimarisidir. Her CPU'nun kendine "yakın" belleği vardır ve bu belleğe erişim, "uzak" belleğe göre çok daha hızlıdır.

NUMA Neden Önemli?

Yanlış yapılandırılmış NUMA, ciddi performans kayıplarına neden olur:

  • Doğru NUMA: %100 performans
  • Yanlış NUMA: %30-50 performans kaybı
  • NUMA bilinciz: Değişken ve tahmin edilemez performans

Proxmox'ta NUMA Durumunu Kontrol

# NUMA topolojisini görüntüle
numactl --hardware

# Örnek çıktı:
available: 2 nodes (0-1)
node 0 cpus: 0 1 2 3 4 5 12 13 14 15 16 17
node 0 size: 32768 MB
node 1 cpus: 6 7 8 9 10 11 18 19 20 21 22 23
node 1 size: 32768 MB

# Her node'un bellek durumu
numastat

Proxmox NUMA Yapılandırması

1. VM'de NUMA'yı Aktifleştirme

# Web arayüzünden:
# VM > Hardware > Processors > Enable NUMA

# Komut satırından:
qm set 100 --numa 1

2. CPU Pinning

VM'in belirli CPU çekirdeklerinde çalışmasını sağlayın:

# Tek NUMA node'a pin
qm set 100 --cpuunits 1024 --cpulimit 4
qm set 100 --numa0 cpus=0-3,memory=8192

# Dual socket sistemde:
# Node 0: cores 0-11
# Node 1: cores 12-23
qm set 100 --numa0 cpus=0-5,memory=16384
qm set 100 --numa1 cpus=12-17,memory=16384

3. Bellek Yapılandırması

# Huge Pages aktifleştirme (performans artışı)
echo "vm.nr_hugepages = 4096" >> /etc/sysctl.conf
sysctl -p

# VM'de huge pages kullanma
qm set 100 --hugepages 1024

NUMA Aware VM Tasarımı

Küçük VM'ler (≤1 Socket)

# Tek NUMA node'da tutun
Cores: 4
Memory: 8 GB
NUMA: Enabled
Socket: 1

Büyük VM'ler (>1 Socket)

# Her socket için ayrı NUMA node
Cores: 8 (4+4)
Memory: 32 GB (16+16)
Sockets: 2
NUMA: Enabled

# Yapılandırma:
numa0: cpus=0-3,memory=16384
numa1: cpus=4-7,memory=16384

Performans İzleme

# NUMA istatistikleri
numastat -c qemu-kvm

# NUMA bellek dağılımı
cat /proc/vmstat | grep numa

# VM'in NUMA durumu
virsh numatune VMID

# Gerçek zamanlı izleme
watch -n 1 numastat

Yaygın Hatalar ve Çözümleri

1. Cross-NUMA Bellek Erişimi

# Problem: VM belleği farklı NUMA node'larda
# Çözüm: VM boyutunu NUMA node kapasitesine uygun tutun

# Kontrol:
numastat -c qemu-kvm | grep -i "other"
# "other_node" değeri düşük olmalı

2. CPU Overcommit

# Problem: Fiziksel CPU'dan fazla vCPU atama
# Çözüm: Overcommit oranını makul tutun (1.5x-2x max)

# Toplam vCPU kontrolü:
qm list | awk '{sum+=$4} END {print sum}'

3. Bellek Ballooning

# NUMA sistemlerde ballooning performansı düşürür
# Kritik VM'lerde devre dışı bırakın:
qm set 100 --balloon 0

Benchmark Sonuçları

YapılandırmaCPU ScoreMemory Bandwidth
NUMA Kapalı850025 GB/s
NUMA Açık (Yanlış)620018 GB/s
NUMA Açık (Doğru)980042 GB/s

Best Practices

  • VM boyutunu NUMA node kapasitesine göre planlayın
  • Kritik VM'leri CPU pinning ile sabitleyin
  • Bellek overcommit'ten kaçının
  • Huge pages kullanarak TLB miss'leri azaltın
  • NUMA istatistiklerini düzenli izleyin

Sonuç

NUMA optimizasyonu, Proxmox'ta %30-50 performans artışı sağlayabilir. Özellikle veritabanı ve yoğun I/O gerektiren workload'lar için kritik öneme sahiptir.

İlgili Yazılar