Azure'da Veri Düzlemi Geliştirme Seti (DPDK), yoğun performans gerektiren uygulamalar için daha hızlı bir kullanıcı alanı paket işleme çerçevesi sunar. Bu çerçeve sanal makinenin çekirdek ağ yığınını atlar.
Çekirdek ağ yığınını kullanan tipik paket işlemede işlem kesme temellidir. Ağ arabirimi gelen paketleri aldığında, paketi işlemek için bir çekirdek kesintisi ve çekirdek alanından kullanıcı alanına bir bağlam anahtarı vardır. DPDK, hızlı paket işleme için yoklama modu sürücülerini kullanan bir kullanıcı alanı uygulamasına yönelik bağlam değiştirme ve kesme temelli yöntemi ortadan kaldırır.
DPDK, alt düzey kaynaklara erişim sağlayan kullanıcı alanı kitaplıklarından oluşur. Bu kaynaklar ağ arabirim kartları için donanım, mantıksal çekirdek, bellek yönetimi ve yoklama modu sürücülerini içerebilir.
DPDK, birden çok işletim sistemi dağıtımlarını destekleyen Azure sanal makinelerinde çalışabilir. DPDK, ağ işlevi sanallaştırma uygulamalarının yönlendirilmesinde önemli performans farklılaştırması sağlar. Bu uygulamalar sanal yönlendiriciler, güvenlik duvarları, VPN'ler, yük dengeleyiciler, gelişmiş paket çekirdekleri ve hizmet reddi (DDoS) uygulamaları gibi ağ sanal gereçleri (NVA) biçimini alabilir.
Saniye başına daha yüksek paketler (PPS): Çekirdeği atlamak ve kullanıcı alanında paketlerin denetimini almak, bağlam anahtarlarını ortadan kaldırarak döngü sayısını azaltır. Ayrıca Azure Linux sanal makinelerinde saniye başına işlenen paketlerin oranını da artırır.
Azure Market aşağıdaki dağıtımlar desteklenir:
Linux | Çekirdek sürümü |
---|---|
Ubuntu | azure+ |
SLES 15 SP1 | azure+ |
RHEL | el7.x86_64+ |
CentOS | el7.x86_64+ |
Debian 10 | cloud+ |
Belirtilen sürümler en düşük gereksinimlerdir. Daha yeni sürümler de desteklenir.
Özel çekirdek desteği
Listelenmeyen herhangi bir Linux çekirdek sürümü için bkz. Azure tarafından ayarlanmış Linux çekirdeği oluşturmaya yönelik düzeltme ekleri. Daha fazla bilgi için ile de iletişime geçebilirsiniz [email protected]
Tüm Azure bölgeleri DPDK'i destekler.
Linux sanal makinesinde hızlandırılmış ağ etkinleştirilmelidir. Sanal makinenin yönetim için bir arabirimi olan en az iki ağ arabirimi olmalıdır. Yönetim arabiriminde Hızlandırılmış ağın etkinleştirilmesi önerilmez. Hızlandırılmış ağ etkinleştirilmiş bir Linux sanal makinesi oluşturmayı öğrenin.
Ayrıca DPDK, Ağ Bağdaştırıcısı'nda veri kuyrukları oluşturmak için RDMA fiillerini kullanır. VM'de doğru RDMA çekirdek sürücülerinin yüklendiğinden emin olun. VM boyutlarına bağlı olarak mlx4_ib, mlx5_ib veya mana_ib olabilir.
Azure çekirdeği
Varsayılan çekirdek
En son DPDK'yi indirin. Azure için sürüm LTS veya üzeri önerilir.
ile varsayılan yapılandırmayı oluşturun.
ile derleyin.
ile yükleyin.
Yeniden başlattıktan sonra aşağıdaki komutları bir kez çalıştırın:
Büyük Sayfalar
ile bağlamak için bir dizin oluşturun.
ile büyük sayfaları bağlayın.
Büyük sayfaların ile ayrılmış olup olmadığını denetleyin.
Yukarıdaki örnek 2M büyük sayfalara yöneliktir. 1G büyük sayfalar da kullanılabilir.
Not
Grub dosyasını değiştirmenin bir yolu vardır, böylece DPDK yönergelerini izleyerek önyüklemede büyük sayfalar ayrılır. Yönergeler sayfanın en altındadır. Azure Linux sanal makinesi kullanırken, yeniden başlatmalar arasında büyük sayfaları ayırmak için /etc/config/grub.d altındaki dosyaları değiştirin.
MAC & IP adresleri: Ağ arabirimlerinin MAC ve IP adresini görüntülemek için kullanın . VF ağ arabirimi ve NETVSC ağ arabirimi aynı MAC adresine sahiptir, ancak yalnızca NETVSC ağ arabiriminin IP adresi vardır. VF arabirimleri , NETVSC arabirimlerinin alt arabirimleri olarak çalışır.
PCI adresleri
VF için hangi PCI adresinin kullanılacağını öğrenmek için kullanın.
Eth0 hızlandırılmış ağ etkinleştirilmişse testpmd'nin yanlışlıkla eth0 için VF pci cihazını devralmadığından emin olun. DPDK uygulaması yanlışlıkla yönetim ağ arabirimini devralıyorsa ve SSH bağlantınızı kaybetmenize neden oluyorsa, DPDK uygulamasını durdurmak için seri konsolunu kullanın. Sanal makineyi durdurmak veya başlatmak için seri konsolunu da kullanabilirsiniz.
ile her yeniden başlatmada ibuverbs yükleyin. Yalnızca SLES 15 için ile mlx4_ib de yükleyin.
DPDK uygulamaları, Azure'da kullanıma sunulan ana PMD üzerinde çalıştırılmalıdır. Uygulama doğrudan VF PMD üzerinden çalışıyorsa, bazı paketler yapay arabirim üzerinde gösterildiğinden VM'ye hedeflenen tüm paketleri almaz. DPDK iki ana PMD türünü destekler: NetVSC PMD ve Failsafe PMD. Ana PMD, uygulamanın hedeflenen tüm paketleri almasını garanti eder. Ayrıca ana bilgisayar hizmetlendirilirken VF iptal edilse bile uygulamanın ana PMD üzerinden DPDK modunda çalışmaya devam ettiğinden emin olur.
NetVSC, Azure'da ana PMD olarak çalıştırılması önerilen PMD'dir. Uygulamanın, hedeflenen tüm paketleri almasını garanti eder. Ayrıca, konak hizmetlendirilirken VF iptal edilse bile uygulamanın DPDK modunda çalışmaya devam ettiğinden emin olur. NetVSC PMD'yi kullanma ve yapılandırma hakkında daha fazla bilgi için bkz. (monash.pw).
Not: Azure'da güvenli pmd ile çalıştırma önerilmez. DPDK sürümünüz LTS veya daha yeniyse NetVSC PMD kullanmanız önerilir.
Alternatif olarak, güvenli PMD üzerinden bir DPDK uygulaması çalıştırabilirsiniz. Yük devretmeye karşı güvenli PMD hakkında daha fazla bilgi için bkz . Güvenli yoklama modu sürücü kitaplığı.
Testpmd'yi kök modda çalıştırmak için testpmd komutundan önce kullanın.
Tek bir bağlantı noktası testpmd uygulamasını başlatmak için aşağıdaki komutları çalıştırın:
Çift bağlantı noktası testpmd uygulamasını başlatmak için aşağıdaki komutları çalıştırın:
Başlatıldıktan sonra bağlantı noktası bilgilerini denetlemek için komutunu çalıştırın . net_netvsc bir veya iki DPDK bağlantı noktası görmeniz gerekir.
Önceki komutlar testpmd'yi etkileşimli modda başlatır ve testpmd komutlarını denemek için önerilir.
Aşağıdaki komutlar saniye başına paket istatistiklerini düzenli aralıklarla yazdırır:
TX tarafında aşağıdaki komutu çalıştırın:
RX tarafında aşağıdaki komutu çalıştırın:
Bir sanal makinede önceki komutları çalıştırırken, derlemeden önce sanal makinelerin gerçek IP adresiyle eşleşecek şekilde IP_SRC_ADDR ve IP_DST_ADDR değiştirin. Aksi takdirde, paketler alıcıya ulaşmadan önce bırakılır.
Aşağıdaki komutlar saniye başına paket istatistiklerini düzenli aralıklarla yazdırır:
TX tarafında aşağıdaki komutu çalıştırın:
FWD tarafında aşağıdaki komutu çalıştırın:
Bir sanal makinede önceki komutları çalıştırırken, derlemeden önce sanal makinelerin gerçek IP adresiyle eşleşecek şekilde IP_SRC_ADDR ve IP_DST_ADDR değiştirin. Aksi takdirde, paketler ileticiye ulaşmadan önce bırakılır. Bazı kod değişiklikleri yapmazsanız testpmd ileticisi katman 3 adreslerini değiştirmediğinden üçüncü bir makinenin iletilen trafiği almasını sağlayamazsınız.
Veri düzlemi geliştirme seti 'nin (DPDK) avantajlarını ve bir Linux sanal makinesinde DPDK 'yi ayarlamayı öğrenin.
virtual-network
na
laxmanrb
gedegrac
virtual-network
NA
how-to
na
infrastructure-services
05/12/
labattul
3b4dec52efdfbe97bce35b31fb
cb1b7a1f3a1f0bcdd0ca4f81f
MT
tr-TR
03/20/
Azure 'da veri düzlemi geliştirme seti (DPDK), performansı yoğun uygulamalar için daha hızlı bir kullanıcı alanı paket işleme çerçevesi sunmaktadır. Bu çerçeve, sanal makinenin çekirdek ağ yığınını atlar.
Çekirdek ağ yığınını kullanan tipik paket işlemede, işlem kesme temelli olur. Ağ arabirimi gelen paketleri aldığında, paketi işlemek için bir çekirdek kesmesi ve çekirdek alanından Kullanıcı alanına bir bağlam anahtarı vardır. DPDK, hızlı paket işleme için yoklama modu sürücüleri kullanan bir kullanıcı alanı uygulamasının tercih edilen bağlam geçişini ve kesme temelli yöntemi ortadan kaldırır.
DPDK, alt düzey kaynaklara erişim sağlayan Kullanıcı-alan kitaplıklarının kümelerinden oluşur. Bu kaynaklar, ağ arabirimi kartları için donanım, mantıksal çekirdek, bellek yönetimi ve yoklama modu sürücüleri içerebilir.
DPDK, birden çok işletim sistemi dağıtımlarını destekleyen Azure sanal makinelerinde çalıştırılabilir. DPDK, ağ işlevi sanallaştırma uygulamalarını yönlendiren önemli performans farklılaşmasını sağlar. Bu uygulamalar, sanal yönlendiriciler, güvenlik duvarları, VPN 'Ler, yük dengeleyiciler, paket çekirdekleri ve hizmet reddi (DDoS) uygulamaları gibi ağ sanal gereçlerinin (NVA 'lar) biçimini alabilir.
Saniye başına daha yüksek paket (PPS): çekirdek atlama ve Kullanıcı alanındaki paketlerin denetimini ele alma, bağlam anahtarlarını ortadan kaldırarak geçiş sayısını azaltır. Ayrıca, Azure Linux sanal makinelerinde saniye başına işlenen paketlerin hızını artırır.
Azure Marketi 'nden aşağıdaki dağıtımlar desteklenir:
Linux işletim sistemi | Çekirdek sürümü |
---|---|
Ubuntu | Azure + |
Ubuntu | Azure + |
SLES 15 SP1 | Azure + |
RHEL | el7.x86_64 + |
CentOS | el7.x86_64 + |
Özel çekirdek desteği
Listelenmeyen tüm Linux çekirdek sürümleri için bkz. Azure 'da ayarlanmış bir Linux çekirdeği oluşturmaya yönelik düzeltme ekleri. Daha fazla bilgi için, ile de iletişim sağlayabilirsiniz [email protected] .
Tüm Azure bölgeleri DPDK 'yi destekler.
Bir Linux sanal makinesinde hızlandırılmış ağ etkin olmalıdır. Sanal makine, yönetim için bir arabirim ile en az iki ağ arabirimine sahip olmalıdır. Yönetim arabiriminde hızlandırılmış ağ özelliğinin etkinleştirilmesi önerilmez. Hızlandırılmış ağ etkin bir Linux sanal makinesi oluşturmayıöğrenin.
Azure çekirdeği
Varsayılan Çekirdek
Yeniden başlattıktan sonra, aşağıdaki komutları bir kez çalıştırın:
Kugepages
Her NUMA düğümü için bir kez aşağıdaki komutu çalıştırarak kugepage 'i yapılandırın:
DPDK ile ilgili hazırlamış olduğum bir sunum sırasında Türkçe içerik eksikliğini görerek, aldığım notları derlediğim bir içerik oluşturmak istedim. Benim de içerisine yeni dahil olduğum bir yapı olduğu için vereceğim bilgiler tecrübelerden daha çok araştırdığım yabancı kaynakların derlenmesi sonucu ortaya çıkmış oldu. Bazı terimlerin Türkçe karşılığı anlamsız kaldığı için ve bu alanla ilgilenen insanların halihazırda bu terimleri bildiğini varsaydığım için İngilizce olarak kullandım. Kısaca DPDKnın tarihinden bahsederek başlamak istiyorum.
Data Plane Development Kit yani DPDK, 17 Eylül da BSD (Berkeley Software Distribution) lisansı ile yayınlandı. Nisandan itibaren monash.pw üzerinde tamamen bağımsız ve kendi topluluğu olan bir hal aldı. Mikroişlemci üreticileri ve mimari geliştiriciler tarafından da desteklenerek projenin büyümesi hızlandırıldı. Günümüzde ise Linux Foundation tarafından destekleniyor.
DPDKnın amaçladığı ana iş data plane uygulamalarında daha hızlı paket işleme için bir framework (altyapı, sistem) sağlamaktır. Geliştiriciler bu frameworkü protokol stacklerini oluşturmak için veya prototip ortaya çıkartmak için kullanabiliyorlar. Bunu yaparken de bize donanımdan bağımsız bir geliştirme ortamı sunduğu için donanıma dokunmamız gereken yerlerden çok uzakta işlem yapabiliyoruz. En basit örnekle bir timer ayarı yaparken donanımdaki registerlardan bağımsız olarak yazdığımız tek bir kod çerçevesinde derlediğimiz ortamın getirdiği parametrelere bağlı olarak timer ayarlamamızı yapmış oluyoruz. Burada kullandığımız işlemci mimarisinin bizim için bir önemi kalmamış oluyor. Aynı zamanda kullanılan hugepage yapısı sayesinde performans yönünde çok büyük avantaj sağlıyor.
Tercih edilme sebeplerine bakacak olursak:
DPDKyı kendi ortamınıza dahil etmek için monash.pw adresine giderek kullanmak istediğiniz versiyonu indirebilirsiniz. Ardından dosyayı bir dizine çıkarttıktan sonra usertools/monash.pw dosyasını çalıştırarak uygun mimari ve derleyici seçeneği ile DPDKnın derlemesini tamamlayabilirsiniz. Bu işlemi otomatik olarak yapmak istiyorsanız aşağıdaki scripti kullanabilirsiniz.
wget monash.pw tar xf monash.pw cd dpdk-stable make config T=x86_native-linuxapp-gcc makeYukarıda script sayesinde DPDK versiyonunu indirdikten sonra GCC derleyicisi ile 64 bit destekleyen Linux uygulaması olacak şekilde derlemiş olduk. Eğer siz farklı bir mimari ile veya derleyici ile derlemek istiyorsanız tüm listeye usertools/monash.pw içerisinden ulaşabilirsiniz. (Aynı şekilde derlemek için o dosya içerisinde 38 komutunu kullanmanız yeterli olacaktır.)
DPDK, bize sunduğu geliştirici araçları ve komponentler sayesinde soyutlama ve optimizasyon yapmamızı sağlamayı hedefliyor. İlk olarak soyutlama işlemi için Environment Abstract Layer (EAL) ile başlayacağım.
İsminden de anlaşılacağı üzere, EAL bizi mimariden soyutlayarak üst katman alt katman arası bir bağlantı oluşmasını sağlar. Bu katman sayesinde kurulum esnasında derlediğimiz ortam koşullarına bağlı olarak donanımla aramızda fiziksel bir bağ kalmamış olur. Zaten kodun çalışması için ilk olarak rte_eal_init() fonksiyonu ile bu katmanı ayağa kaldırmamız gerekmektedir. İçerisinde aşağıda bahsedilen komponentlerin ve daha birçoğunun kullanılması için gerekli olan altyapının oluşturulmasını sağlıyor.
Mempool ile hafızada yapılacak işlemler için yer ayırma ve geri bırakma (allocate/deallocate) işlemleri gerçekleştiriliyor. Hafıza havuzumuzdan sabit boyutlarda yer ayırıp o yerlerle etkileşime girmemize izin veriyor. Bize ayırdığı hafıza ring buffer konseptine sahip olarak çalışıyor ve cache işlemine imkan veriyor.
Mbuf yani Message Buffers adından da anlaşıldığı üzere, alıp verdiğimiz mesajları tuttuğumuz ve onlar üzerinde işlemler yaptığımız bufferlar oluşturmamıza yarıyor. Bunu yaparken de mempool ile hafızadan yer ayırma işleminden faydalanıyor.
Ring, circular buffer olarak da bilinen bir döngüsel buffer konseptidir aslında. Sabit boyutlu bir alan içerisine girip çıkan veriler üzerinde gösterilen noktalar üzerinde gezerek bir çok mesaj işlemini gerçekleştirmeye yarıyor. Bu sayede normalde bytelık bir dizi oluşturmak yerine bytelık bir dizi oluşturarak içerisini 4 kez doldurup boşaltarak daha küçük boyutlu bir dizi ile kayıpsız bir işlem sağlayabiliriz.
Timer, zamana bağlı olarak işlemler gerçekleştirilmesi için kullanılan bir komponenttir. Gerekli ayarları yapıldıktan sonra bizim belirlemiş olduğumuz süreler içerisinde periyodik olarak veya dışarıdan tetiklenebilir olarak çalışacak şekilde kullanılabilir. Normalde donanım seviyesinde çok ince hesaplar yapılması ile gerçekleştirilebilecek işlemler DPDK sayesinde kolayca gerçekleştirilebiliyor.
Yukarılarda hugepageden bahsetmiştik, hugepage Linux üzerinde sanal hafıza yönetimi için kullanılıyor. Normalde sistemin 2kb/4kb olan pagesizeını artırarak işlem yapabiliyoruz.
Peki neden hugepagee ihtiyaç duyuyoruz? Çünkü sayfalar büyük olduğunda sayfa tabloları da büyük oluyor ve bir süreç için verileri bellekten çıkarma/getirme miktarı azalıyor. Aynı zamanda kernel ile yapılan swap işlemlerinde her bir page için gerçekleşecek olan transaction sayısı azaldığı için hız olarak da daha hızlı oluyor. Yani ana amaçlarından bir tanesinin performansı artışı olduğunu söyleyebiliriz.
Hugepage ayarlamasını kurulum sonrasında (yani usertools/monash.pw içerisinde) yapabilirsiniz. Bu ayarı yaparken karşınıza iki kavram çıkacak; UMA ve NUMA. Bunların arasındaki fark UMA(Uniform Memory Access) tek hafıza bloğuna sahip kontrolörlerle birlikte genel amaçlı uygulamalar için kullanılır. NUMA (Non-Uniform Memory Access) ise çoklu hafıza bloklarına sahip kontrolörlerle birlikte zamanın kritik olduğu işler için -genelde- real-time uygulamalarda tercih edilir.
DPDK, genel hatları ile bu kavramları içeriyor ancak bunun yanında daha birçok komponenti de (Crypto, Hash vb.) içerisinde barındırıyor. Daha detaylı kullanımları için kaynaklarda yer alan dokümanlarını inceleyebilirsiniz. İçerisinde yer alan örnek uygulamalarla da kullanımına dair fikir edinebilirsiniz.
monash.pw
monash.pw?v=ewsrzoKwwz0&ab_channel=monash.pw
monash.pw
monash.pw
monash.pw
BeğenYükleniyor
İle bağlama için bir dizin oluşturun .
İle kugesayfalarý bağlayın .
Kugepages 'in ile ayrılmadığından emin olun .
NOTUN Grub dosyasını değiştirmek için bir yol vardır. bu sayede, DPDK yönergelerini izleyerek kugepages 'in önyükleme üzerinde ayrılması sağlanır. Yönergeler sayfanın en altında bulunur. Bir Azure Linux sanal makinesi kullanırken, yeniden başlatmalar genelinde kugepages ayırmak için bunun yerine /etc/config/grub.d altındaki dosyaları değiştirin.
MAC & IP adresleri: ağ ARABIRIMLERININ Mac ve IP adresini görüntülemek Için kullanın. VF ağ arabirimi ve netvsc ağ arabirimi aynı MAC adresine sahip, ancak yalnızca netvsc ağ arabiriminin bir IP adresi vardır. VF arabirimleri, netvsc arabirimlerinin alt arabirimleri olarak çalışır.
PCI adresleri
Her yeniden başlatmada ıbuverbs 'ı yükleyin . Yalnızca SLES 15 için ile mlx4_ib de yükleyin .
DPDK uygulamalarının Azure 'da kullanıma sunulan Failsafe PMD üzerinde çalışması gerekir. Uygulama doğrudan VF PMD üzerinde çalışıyorsa, bazı paketler yapay arabirim üzerinde GÖSTERILDIĞINDEN VM 'ye giden Tüm paketleri almaz.
Failsafe PMD üzerinde bir DPDK uygulaması çalıştırırsanız, uygulamanın kendisine gidecek tüm paketleri almasını güvence altına alır. Ayrıca, ana bilgisayara bakım yapıldığında VF iptal edilse bile uygulamanın DPDK modunda çalışmaya devam ettiği de emin olur. Failsafe PMD hakkında daha fazla bilgi için bkz. başarısız-güvenli yoklama modu sürücü kitaplığı.
Testpmd 'yi kök modda çalıştırmak için testpmd komutundan önce kullanın.
Tek bir bağlantı noktası testpmd uygulamasını başlatmak için aşağıdaki komutları çalıştırın:
Bir çift bağlantı noktası testpmd uygulamasını başlatmak için aşağıdaki komutları çalıştırın:
Testpmd 'yi ikiden fazla NIC ile çalıştırıyorsanız, bağımsız değişken şu düzene uyar: .
Başlatıldıktan sonra bağlantı noktası bilgilerini denetlemek için öğesini çalıştırın. Net_failsafe ( net_mlx4 değil) bir veya iki DPDK bağlantı noktası görmeniz gerekir.
Trafiği başlatmak için kullanın.
Önceki komutlar testpmd ' yi etkileşimli modda başlatır, bu da testpmd komutlarının denemesi için önerilir.
Aşağıdaki komutlar paketleri saniyede düzenli olarak yazdırır:
TX tarafında, aşağıdaki komutu çalıştırın:
RX tarafında, aşağıdaki komutu çalıştırın:
Bir sanal makinede önceki komutları çalıştırırken IP_SRC_ADDR değiştirin ve ' de IP_DST_ADDR , DERLEMEDEN önce sanal makinelerin gerçek IP adresiyle eşleşecek şekilde değiştirin. Aksi takdirde, paketler alıcıya ulaşmadan önce bırakılır.
Aşağıdaki komutlar paketleri saniyede düzenli olarak yazdırır:
TX tarafında, aşağıdaki komutu çalıştırın:
FWD tarafında aşağıdaki komutu çalıştırın:
Bir sanal makinede önceki komutları çalıştırırken IP_SRC_ADDR değiştirin ve ' de IP_DST_ADDR , DERLEMEDEN önce sanal makinelerin gerçek IP adresiyle eşleşecek şekilde değiştirin. Aksi takdirde, paketler ileticiye ulaşmadan önce bırakılır. Test PMD ileticisi, bazı kod değişiklikleri yapmadığınız takdirde katman 3 adreslerini değiştirmediğinden, üçüncü bir makineye iletilen trafik alamazsınız.