Merhaba arkadaşlar, bugün sizlere özellikle yüksek ağ trafiği olan Proxmox sunucularınızda sanal makinelerinizin (VM) ağ performansını ciddi anlamda artırabileceğiniz bir konfigürasyondan bahsedeceğim. VirtIO ağ sürücüleri zaten performans için standart, ama çok kuyruklu (multiqueue) özelliğini aktif etmek, CPU çekirdeklerinizi daha verimli kullanarak paket işleme hızınızı katlayabilir. Özellikle dosya sunucusu, yüksek trafikli web sunucusu veya yedekleme altyapınız varsa bu ayarlar tam size göre.
Multiqueue (Çok Kuyruk) Nedir ve Ne İşe Yarar?
Normalde bir VM'nin ağ kartı (NIC) için gelen ve giden paketler tek bir işlem kuyruğunda (queue) işlenir. Bu da tek bir CPU çekirdeğini meşgul eder. Multiqueue özelliği aktif edildiğinde ise, birden fazla kuyruk oluşturulur ve bu kuyruklar farklı CPU çekirdeklerine dağıtılabilir. Böylece ağ yükü, mevcut CPU kaynaklarınıza paralel olarak paylaştırılır ve darboğazlar ortadan kalkar. Performans artışı, özellikle çok çekirdekli sunucularda gözle görülür seviyededir.
Adım Adım Multiqueue Yapılandırması
Öncelikle, bu ayarı yapacağınız sanal makinenin DURDURULMUŞ olması gerekiyor. Çalışan bir VM'de bu değişiklikleri yapamazsınız.
İlk adım, VM'nizin donanım ayarlarına girip mevcut ağ aygıtınızı kontrol etmek. Ağ aygıtı modelinizin VirtIO (paravirtualized) olduğundan emin olun. Eğer değilse, önce bunu değiştirmelisiniz.
Şimdi, Proxmox web arayüzünden veya komut satırından bu ayarı aktif edelim. Ben genelde komut satırını tercih ederim, daha hızlı ve kontrollü oluyor. VM'nizin ID'sini bilmeniz gerekiyor (örneğin 101).
Bu komutta dikkat etmeniz gereken iki önemli parametre var:
- vectors: Bu, toplam MSI-X vektör sayısıdır. Kural olarak, vectors = (kuyruk sayısı 2) + 2 şeklinde hesaplanır. 4 kuyruk için vectors=10, 8 kuyruk için vectors=18 gibi.
- mq=on: Çok kuyruk özelliğini açar.
Ancak, Proxmox GUI üzerinden de yapabilirsiniz. VM > Donanım > Ağ Aygıtı'nı seçip "Gelişmiş" butonuna tıklayın. "Çok Kuyruklu (Multiqueue)" seçeneğini aktifleştirin ve "Kuyruk Sayısı"nı girin (örneğin 4 veya 8). Arka planda yukarıdaki komutu sizin için oluşturacaktır.
VM İçi (Guest) Linux Ayarları
Sadece Hypervisor (Proxmox) tarafında ayar yapmak yetmez. Sanal makinenizin içindeki işletim sisteminde de bu kuyrukları tanımlamalısınız. Linux için bu oldukça basit.
Öncelikle, mevcut ağ arayüzünüzün adını öğrenin (genelde ens18, eth0 gibidir).
Şimdi, bu arayüz için kuyruk sayısını değiştirelim. Aşağıdaki komutta ens18 kısmını kendi arayüz adınızla değiştirin ve 4 yerine Proxmox tarafında ayarladığınız kuyruk sayısını yazın.
Bu ayarın kalıcı olması için, sistem açılışında uygulanacak şekilde yapılandırmak en iyisidir. Bunun için /etc/rc.local dosyasını veya systemd serveti oluşturabilirsiniz. Ben pratik olarak network manager dispatcher script'i kullanıyorum:
/etc/NetworkManager/dispatcher.d/99-multiqueue dosyasını oluşturun ve içine şunları yazın:
Dosyaya çalıştırma izni verin:
Dikkat Edilmesi Gerekenler ve Sınırlamalar
Bu ayarları yaparken birkaç kritik noktaya dikkat etmelisiniz:
1. VM Durdurulmalı: Donanım ayarını değiştirmek için VM kapalı olmalı.
2. CPU Çekirdek Sayısı: Ayarladığınız kuyruk sayısı, VM'ye atanmış CPU çekirdek sayısını geçmemeli. Hatta daha az olması daha dengeli olabilir.
3. Destek Kontrolü: VM içindeki işletim sisteminizin ve kernel'in multiqueue'yu desteklediğinden emin olun. Modern Linux dağıtımları destekliyor.
4. Fiziksel NIC Desteği: Altındaki fiziksel sunucunuzun NIC'i ve sürücüsü de bu özelliği desteklemeli. Çoğu modern NIC destekler.
5. Performans Testi: Ayarlardan sonra mutlaka iperf3 gibi bir araçla önce-sonra performans testi yapın. Gözle görülür bir fark göreceksiniz.
Sonuç ve Performans Beklentisi
Doğru yapılandırıldığında, özellikle 10Gbps ve üzeri ağ bağlantılarında, paket işleme gecikmesi (latency) azalır ve toplam bant genişliği kullanımınız artar. CPU kullanımı daha dengeli dağılır ve tek bir çekirdeğin %100 olup diğerlerinin boş kalması engellenir.
Ben kendi sunucularımda, yüksek trafik alan VM'lerde genelde 4 veya 8 kuyruk kullanıyorum. Fiziksel çekirdek sayısına ve iş yüküne göre bu sayıyı ayarlamak gerekiyor.
Umarım bu detaylı rehber işinize yarar. Siz bu konfigürasyonu kendi sunucularınızda nasıl yapıyorsunuz? Farklı bir yönteminiz veya eklemek istediğiniz bir püf noktası var mı? Ya da uygularken bir sorunla karşılaştınız mı? Aşağıya yorum olarak yazabilirsiniz, birlikte çözelim.
Normalde bir VM'nin ağ kartı (NIC) için gelen ve giden paketler tek bir işlem kuyruğunda (queue) işlenir. Bu da tek bir CPU çekirdeğini meşgul eder. Multiqueue özelliği aktif edildiğinde ise, birden fazla kuyruk oluşturulur ve bu kuyruklar farklı CPU çekirdeklerine dağıtılabilir. Böylece ağ yükü, mevcut CPU kaynaklarınıza paralel olarak paylaştırılır ve darboğazlar ortadan kalkar. Performans artışı, özellikle çok çekirdekli sunucularda gözle görülür seviyededir.
Öncelikle, bu ayarı yapacağınız sanal makinenin DURDURULMUŞ olması gerekiyor. Çalışan bir VM'de bu değişiklikleri yapamazsınız.
İlk adım, VM'nizin donanım ayarlarına girip mevcut ağ aygıtınızı kontrol etmek. Ağ aygıtı modelinizin VirtIO (paravirtualized) olduğundan emin olun. Eğer değilse, önce bunu değiştirmelisiniz.
Şimdi, Proxmox web arayüzünden veya komut satırından bu ayarı aktif edelim. Ben genelde komut satırını tercih ederim, daha hızlı ve kontrollü oluyor. VM'nizin ID'sini bilmeniz gerekiyor (örneğin 101).
Bash:
qm set <VM_ID> -args "-device virtio-net-pci,mac=XX:XX:XX:XX:XX:XX,netdev=hostnet0,vectors=8,mq=on"
Bu komutta dikkat etmeniz gereken iki önemli parametre var:
- vectors: Bu, toplam MSI-X vektör sayısıdır. Kural olarak, vectors = (kuyruk sayısı 2) + 2 şeklinde hesaplanır. 4 kuyruk için vectors=10, 8 kuyruk için vectors=18 gibi.
- mq=on: Çok kuyruk özelliğini açar.
Ancak, Proxmox GUI üzerinden de yapabilirsiniz. VM > Donanım > Ağ Aygıtı'nı seçip "Gelişmiş" butonuna tıklayın. "Çok Kuyruklu (Multiqueue)" seçeneğini aktifleştirin ve "Kuyruk Sayısı"nı girin (örneğin 4 veya 8). Arka planda yukarıdaki komutu sizin için oluşturacaktır.
Sadece Hypervisor (Proxmox) tarafında ayar yapmak yetmez. Sanal makinenizin içindeki işletim sisteminde de bu kuyrukları tanımlamalısınız. Linux için bu oldukça basit.
Öncelikle, mevcut ağ arayüzünüzün adını öğrenin (genelde ens18, eth0 gibidir).
Bash:
ip link show
Şimdi, bu arayüz için kuyruk sayısını değiştirelim. Aşağıdaki komutta ens18 kısmını kendi arayüz adınızla değiştirin ve 4 yerine Proxmox tarafında ayarladığınız kuyruk sayısını yazın.
Bash:
sudo ethtool -L ens18 combined 4
Bu ayarın kalıcı olması için, sistem açılışında uygulanacak şekilde yapılandırmak en iyisidir. Bunun için /etc/rc.local dosyasını veya systemd serveti oluşturabilirsiniz. Ben pratik olarak network manager dispatcher script'i kullanıyorum:
/etc/NetworkManager/dispatcher.d/99-multiqueue dosyasını oluşturun ve içine şunları yazın:
Bash:
#!/bin/bash
INTERFACE="ens18"
if [ "$1" = "$INTERFACE" ] && [ "$2" = "up" ]; then
/sbin/ethtool -L $INTERFACE combined 4
fi
Dosyaya çalıştırma izni verin:
Bash:
sudo chmod +x /etc/NetworkManager/dispatcher.d/99-multiqueue
Bu ayarları yaparken birkaç kritik noktaya dikkat etmelisiniz:
1. VM Durdurulmalı: Donanım ayarını değiştirmek için VM kapalı olmalı.
2. CPU Çekirdek Sayısı: Ayarladığınız kuyruk sayısı, VM'ye atanmış CPU çekirdek sayısını geçmemeli. Hatta daha az olması daha dengeli olabilir.
3. Destek Kontrolü: VM içindeki işletim sisteminizin ve kernel'in multiqueue'yu desteklediğinden emin olun. Modern Linux dağıtımları destekliyor.
4. Fiziksel NIC Desteği: Altındaki fiziksel sunucunuzun NIC'i ve sürücüsü de bu özelliği desteklemeli. Çoğu modern NIC destekler.
5. Performans Testi: Ayarlardan sonra mutlaka iperf3 gibi bir araçla önce-sonra performans testi yapın. Gözle görülür bir fark göreceksiniz.
Doğru yapılandırıldığında, özellikle 10Gbps ve üzeri ağ bağlantılarında, paket işleme gecikmesi (latency) azalır ve toplam bant genişliği kullanımınız artar. CPU kullanımı daha dengeli dağılır ve tek bir çekirdeğin %100 olup diğerlerinin boş kalması engellenir.
Ben kendi sunucularımda, yüksek trafik alan VM'lerde genelde 4 veya 8 kuyruk kullanıyorum. Fiziksel çekirdek sayısına ve iş yüküne göre bu sayıyı ayarlamak gerekiyor.
Umarım bu detaylı rehber işinize yarar. Siz bu konfigürasyonu kendi sunucularınızda nasıl yapıyorsunuz? Farklı bir yönteminiz veya eklemek istediğiniz bir püf noktası var mı? Ya da uygularken bir sorunla karşılaştınız mı? Aşağıya yorum olarak yazabilirsiniz, birlikte çözelim.