Paket işleme yükünü birden fazla CPU çekirdeğine dağıtarak ağ aktarım hızını artırın ve gecikme süresini azaltın.
NIC çok kuyruklu yapıyı kullanma nedenleri
Tek kuyruklu bir ağ arabirimi tüm paketler için tek bir CPU çekirdeği kullanır. Bu durum CPU aşırı yüklenmesine, gecikmeye ve paket kaybına yol açabilir. NIC çok kuyruklu yapı trafiği birden fazla çekirdeğe dağıtarak kaynak kullanımını iyileştirir.
Aynı PPS ve bant genişliği koşullarında iki kuyruk kullanımı, tek kuyruğa kıyasla ağ performansını %50 ila %100 oranında artırır. Dört kuyruk ise daha yüksek kazançlar sağlar:
Daha iyi çok çekirdekli kullanım: Trafiği CPU çekirdeklerine dengeli bir şekilde dağıtarak yük dengelemesi sağlar ve kullanımı artırır.
Yüksek aktarım hızı: Paralel paket işleme sayesinde özellikle yüksek yük altında aktarım hızı artar.
Düşük gecikme süresi: Paketlerin kuyruklar arasında dağıtılması tıkanıklığı ve gecikmeyi azaltır.
Azalan paket kaybı: Yüksek trafik sırasında tek kuyruk aşırı yüklenmesinden kaynaklanan paket kayıplarını önler.
Hatalı yapılandırma performansı düşürebilir. Örneğin yanlış kuyruk sayısı veya CPU yakınlığı ayarları gereksiz bağlam değiştirmeye neden olur; yetersiz kuyruk sayısı ise donanım kaynaklarının verimsiz kullanılmasına yol açar.
Bir ENI'yi bir örneğe eklediğinizde kuyruk sayısı varsayılan olarak örnek türü ayarına göre belirlenir. Kuyruk sayısını manuel olarak ayarlamadan önce kullanım senaryonuzu ve donanım koşullarınızı değerlendirin.
NIC çok kuyruklu yapının çalışma şekli
-
Kuyruk mimarisi
Bir ENI her biri bağımsız bir CPU çekirdeği tarafından işlenen birden fazla birleşik kuyruğu destekler. Bu sayede paralel paket işleme mümkün olur kilit çekişmesi azalır ve çok çekirdekli performans tam kapasiteyle kullanılır.
Alıcı (RX) ve Verici (TX) kuyrukları paket işleme için kullanılan iki kuyruk türüdür. Her birleşik kuyruk bir RX ve bir TX kuyruğundan oluşur:
-
RX kuyruğu: Gelen paketleri işler. Ağ arabirimi her paketi yuvarlak sıralama (round-robin) veya akış tabanlı karma gibi Receive Side Scaling (RSS) kurallarına göre belirli bir RX kuyruğuna yönlendirir.
Bazı örnek türü aileleri trafiği farklı RX kuyruklarına dağıtmak için karma algoritmaları kullanan ENI'ler için Özel RSS özelliğini destekler.
TX kuyruğu: Giden paketleri yönetir. Uygulamalar paketleri bir TX kuyruğuna yerleştirir ve ağ arabirimi bunları sıraya veya önceliğe göre gönderir.
-
-
IRQ yakınlığı desteği
Her kuyruğun bağımsız bir kesmesi vardır. IRQ yakınlığı kesme işlemeyi CPU çekirdeklerine dağıtarak tek bir çekirdeğin aşırı yüklenmesini önler.
Red Hat Enterprise Linux dışındaki tüm genel görüntülerde IRQ yakınlığı varsayılan olarak etkindir. Bkz. IRQ yakınlığını yapılandırma.
Sınırlamalar
-
Yalnızca bazı örnek türleri NIC çok kuyruklu yapıyı destekler. Bkz. Örnek türü aileleri. Çok kuyruklu sütunundaki değer 1'den büyükse ilgili örnek türü NIC çok kuyruklu yapıyı destekler.
Desteklenen örnek türlerinde bir ENI eklediğinizde NIC çok kuyruklu yapı otomatik olarak etkinleşir.
Bir örnek türü için listelenen kuyruk sayısı o türün desteklediği ENI başına maksimum kuyruk sayısıdır.
-
Kuyrukla ilgili ölçümleri sorgulamak için InstanceTypeFamily parametresiyle DescribeInstanceTypes API işlemini çağırın:
-
Varsayılan kuyruk sayısı
PrimaryEniQueueNumber: Birincil ENI için varsayılan kuyruk sayısı. SecondaryEniQueueNumber: İkincil ENI için varsayılan kuyruk sayısı.
-
ENI başına maksimum kuyruk sayısı
MaximumQueueNumberPerEni: Örnek türü ailesi için ENI başına maksimum kuyruk sayısı.
-
Toplam kuyruk kotası
TotalEniQueueQuantity: Örnek türü ailesi için toplam kuyruk kotası.
-
Çekirdek sürümü 2,6'dan eski olan genel görüntüler NIC çok kuyruklu yapıyı desteklemeyebilir. En son genel görüntüleri kullanın.
ENI kuyruk sayısını görüntüleme
Konsolu kullanma
ECS Konsolu - Esnek Ağ Arabirimleri sayfasına gidin.
Sayfanın sol üst köşesinde bir bölge ve kaynak grubu seçin.
Hedef ikincil ENI kimliğine tıklayarak ayrıntılar sayfasını açın.
-
Temel Bilgiler bölümünde Queues parametresini bulun. Bu değer mevcut kuyruk sayısını gösterir.
Kuyruk sayısını değiştirdiyseniz değiştirilen değer görüntülenir.
-
Kuyruk sayısını değiştirmediyseniz:
ENI bir örneğe eklenmemişse değer görüntülenmez.
ENI bir örneğe eklendiyse örnek türü için varsayılan kuyruk sayısı görüntülenir.
API'yi kullanma
DescribeNetworkInterfaceAttribute işlemini çağırın. QueueNumber yanıt parametresi kuyruk sayısını belirtir.
Kuyruk sayısını değiştirdiyseniz değiştirilen değer görüntülenir.
-
Kuyruk sayısını değiştirmediyseniz:
ENI bir örneğe eklenmemişse değer görüntülenmez.
ENI bir örneğe eklendiyse örnek türü için varsayılan kuyruk sayısı görüntülenir.
Örnek içinde kontrol etme
-
Not
Windows örnekleri için ENI kuyruk sayısını ECS konsolunda görüntüleyin veya bir API işlemi çağırarak öğrenin.
-
Ağ yapılandırmasını
ip akomutuyla görüntüleyin:[root@ixxxxx ~]# ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 8500 qdisc mq state UP group default qlen 1000 link/ether 00:16:3e:1b:74:12 brd ff:ff:ff:ff:ff:ff altname enp0s5 altname ens5 inet 172.16.20.226/24 brd 172.16.20.255 scope global dynamic noprefixroute eth0 valid_lft 315359814sec preferred_lft 315359814sec inet6 fe80::216:3eff:fe1b:7412/64 scope link valid_lft forever preferred_lft forever 3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 8500 qdisc mq state UP group default qlen 1000 link/ether 00:16:3e:46:ff:fc brd ff:ff:ff:ff:ff:ff altname enp0s6 altname ens6 inet 172.16.20.227/24 brd 172.16.20.255 scope global dynamic noprefixroute eth1 valid_lft 315359814sec preferred_lft 315359814sec inet6 fe80::216:3eff:fe46:fffc/64 scope link valid_lft forever preferred_lft forever 4: eth2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 8500 qdisc mq state UP group default qlen 1000 link/ether 00:16:3e:47:47:c2 brd ff:ff:ff:ff:ff:ff altname enp0s8 altname ens8 inet 172.16.20.228/24 brd 172.16.20.255 scope global dynamic noprefixroute eth2 valid_lft 315359814sec preferred_lft 315359814sec inet6 fe80::216:3eff:fe47:47c2/64 scope link valid_lft forever preferred_lft forever -
Birincil ENI eth0'ın NIC çok kuyruklu yapıyı destekleyip desteklemediğini kontrol edin.
Bu örnekte birincil ENI kullanılmıştır. İkincil bir ENI'yi kontrol etmek için tanımlayıcıyı eth1 eth2 veya başka bir değerle değiştirin.
ethtool -l eth0Çıktıyı kontrol edin:
"Pre-set maximums" altındaki "Combined" değeri 1'den büyükse ENI NIC çok kuyruklu yapıyı destekler. Bu değer maksimum kuyruk sayısıdır.
"Current hardware settings" altındaki "Combined" değeri kullanımdaki mevcut kuyruk sayısıdır.
Bu örnekte ENI maksimum üç birleşik (RX+TX) kuyruğu destekler ve şu anda üç kuyruk kullanılmaktadır.
[root@xxx ~]# ethtool -l eth0 Channel parameters for eth0: Pre-set maximums: RX: n/a TX: n/a Other: n/a Combined: 3 Current hardware settings: RX: n/a TX: n/a Other: n/a Combined: 3Maksimum kuyruk sayısını değiştirmek için bkz. ENI için kuyruk sayısını değiştirme.
İşletim sistemi kuyruk sayısını değiştirmek için bkz. İşletim sisteminin kullandığı kuyruk sayısını değiştirme.
ENI kuyruk sayısını değiştirme
Bir ENI'yi bir örneğe eklediğinizde kuyruk sayısı varsayılan olarak örnek türü ayarına göre belirlenir. Bu sayıyı konsoldan veya bir API işlemi çağırarak ayarlayabilirsiniz. Şu hususlara dikkat edin:
Kuyruk sayısını yalnızca ENI Available durumundayken veya Bound olduğu örnek Stopped durumundayken değiştirebilirsiniz.
Kuyruk sayısı örnek türü için ENI başına maksimum kuyruk sınırını aşamaz.
Bir örnekteki tüm ENI'lerin toplam kuyruk sayısı örnek türü için toplam kuyruk kotasını aşamaz.
Konsolu kullanma
ECS Konsolu - Esnek Ağ Arabirimleri sayfasına gidin.
Sayfanın sol üst köşesinde bir bölge ve kaynak grubu seçin.
Hedef ikincil ENI kimliğine tıklayarak ayrıntılar sayfasını açın.
-
Kuyruk Sayısını Değiştir seçeneğine tıklayın.
NIC Queue Number alanının yanındaki düzenleme simgesine tıklayın ve giriş kutusuna hedef kuyruk numarasını girin (geçerli aralık: 1 ila 2048).
Tamam'a tıklayın.
API'yi kullanma
Kuyruk sayısını değiştirmek için ModifyNetworkInterfaceAttribute işlemini çağırın ve QueueNumber parametresini ayarlayın.
Yeni kuyruk sayısı bağlı örnek bir sonraki başladığında etkili olur.
İşletim sistemi kuyruk sayısını değiştirme
ENI kuyruk sayısını değiştirdiğinizde işletim sistemi yeni ayarı otomatik olarak uygular.
ENI'nin aktif olarak kullandığı kuyruk sayısını da ayarlayabilirsiniz. Bu değer yapılandırılan kuyruk sayısından küçük veya ona eşit olmalıdır.
İşletim sisteminin kullandığı kuyruk sayısının değiştirilmesi ENI'nin yapılandırılmış kuyruk sayısını etkilemez ve konsolda veya API yanıtlarında görünmez.
Bu değişiklik geçicidir ve örnek yeniden başlatıldığında kalıcı olmaz.
Aşağıdaki örnekte NIC çok kuyruklu yapıya sahip bir Alibaba Cloud Linux 3 örneğindeki kuyruk sayısı ayarlanmaktadır.
-
Ağ yapılandırmasını
ip address showkomutuyla görüntüleyin:[ecs-user@iZbpxxx ~]$ ip address show 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 00:16:3e:37:7a:82 brd ff:ff:ff:ff:ff:ff altname enp0s5 altname ens5 inet 172.16.0.20/24 brd 172.16.0.255 scope global dynamic noprefixroute eth0 valid_lft 315359878sec preferred_lft 315359878sec inet6 fe80::216:3eff:fe37:7a82/64 scope link valid_lft forever preferred_lft forever 3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 00:16:3e:28:b1:9e brd ff:ff:ff:ff:ff:ff altname enp0s6 altname ens6 inet 172.16.0.21/24 brd 172.16.0.255 scope global dynamic noprefixroute eth1 valid_lft 315359879sec preferred_lft 315359879sec inet6 fe80::216:3eff:fe28:b19e/64 scope link valid_lft forever preferred_lft forever -
Birincil ENI eth0'ın NIC çok kuyruklu yapıyı destekleyip desteklemediğini kontrol edin.
Bu örnekte birincil ENI kullanılmıştır. İkincil bir ENI'yi kontrol etmek için tanımlayıcıyı eth1 eth2 veya başka bir değerle değiştirin.
ethtool -l eth0 -
Çıktıyı kontrol edin:
"Pre-set maximums" altındaki "Combined" değeri 1'den büyükse ENI NIC çok kuyruklu yapıyı destekler. Bu değer maksimum kuyruk sayısıdır.
"Current hardware settings" altındaki "Combined" değeri kullanımdaki mevcut kuyruk sayısıdır.
Bu örnekte ENI maksimum üç birleşik (RX+TX) kuyruğu destekler ve üç kuyruk kullanılmaktadır.
[root@xxx ~]# ethtool -l eth0 Channel parameters for eth0: Pre-set maximums: RX: n/a TX: n/a Other: n/a Combined: 3 Current hardware settings: RX: n/a TX: n/a Other: n/a Combined: 3 -
Birincil ENI eth0 için aktif kuyruk sayısını 2 olarak ayarlayın.
Bu örnekte birincil ENI kullanılmıştır. İkincil bir ENI'yi ayarlamak için tanımlayıcıyı eth1 eth2 veya başka bir değerle değiştirin.
sudo ethtool -L eth0 combined NNdeğeri ENI'nin kullanmasını istediğiniz kuyruk sayısını belirtir.Ndeğeri "Pre-set maximums" altındaki "Combined" değerinden küçük veya ona eşit olmalıdır.Birincil ENI kuyruk sayısını 2 olarak ayarlayın:
sudo ethtool -L eth0 combined 2
IRQ yakınlığını yapılandırma
NIC çok kuyruklu yapı farklı kuyruklardan gelen kesmeleri belirli CPU çekirdeklerine atayarak çekişmeyi azaltmak ve performansı artırmak için genellikle IRQ yakınlığı yapılandırması gerektirir.
Red Hat Enterprise Linux dışındaki tüm genel görüntülerde IRQ yakınlığı varsayılan olarak etkindir.
Red Hat Enterprise Linux IRQ yakınlığını destekler ancak varsayılan olarak etkin değildir. Yapılandırmak için aşağıdaki adımları izleyin.
Aşağıdaki adımlarda Red Hat Enterprise Linux 9.2 görüntüsünde IRQ yakınlığını yapılandırmak için ecs_mq betiği kullanılmaktadır. Diğer görüntülerde IRQ yakınlığı varsayılan olarak etkindir.
-
(İsteğe bağlı) irqbalance hizmetini durdurun.
irqbalance hizmeti IRQ yakınlığını dinamik olarak ayarlar; bu durum
ecs_mqile çakışabilir. Önce bu hizmeti durdurun.systemctl stop irqbalance.service -
En son
ecs_mqbetiğini indirin:wget https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/ecs_mq/ecs_mq_latest.tgz -
ecs_mqpaketini çıkarın:tar -xzf ecs_mq_latest.tgz -
Çalışma dizinine gidin:
cd ecs_mq/ -
ecs_mqkurulum betiğini çalıştırın:bash install.sh redhat 9Notredhatve9değerlerini işletim sisteminizin adı ve ana sürüm numarasıyla değiştirin. -
ecs_mqhizmetini başlatın:systemctl start ecs_mqHizmet IRQ yakınlığını otomatik olarak etkinleştirir.
En uygun dengeyi bulmak için aktarım hızını ve gecikme süresini izlerken farklı kuyruk sayısı ve IRQ yakınlığı kombinasyonlarını test edin.