Teknoloji

TCP Üzerinden NVMe Nedir? Nasıl Kullanılır?

Oracle Linux UEK 5 (Unbreakable Enterprise Kernel), RDMA (Uzaktan Direkt Bellek Erişimi) teknolojisini kullanarak bir Infiniband yahut Ethernet portu üzerinden, NVMe depolama komutlarının aktarılmasına müsaade veren Fabrics üzerinden NVMe teknolojisini tanıttı. UEK5 U1, NVMe’yi Fibre Channel depolama ağlarını da içerecek biçimde, Fabrics üzerinden kullanıma sundu. Artık ise UEK 6 ile, TCP üzerinden NVMe kullanıma sunuldu ki bu, RDMA yeteneğine sahip ağ donanımı satın almak zorunda kalmadan Fabric üzerinden NVMe’yi standart bir Ethernet ağı kullanacak formda genişletiyor.

NVMe-TCP nedir?

NVMe Çoklu Kuyruk Modeli, her NVMe denetleyicisinde 64k I/O (Girdi/Çıktı) Gönderme ve Tamamlama Kuyruğunun yanı sıra bir İdare Gönderme Kuyruğu ve Tamamlama Kuyruğu uygular. PCIe irtibatlı bir NVMe denetleyicisi için, bu kuyruklar ana belleğe uygulanır ve hem ana CPU’lar hem de NVMe Denetleyici tarafından paylaşılır. Aygıt şoförü bir G/Ç gönderim kuyruğuna komut yazdığında ve akabinde aygıtı bilgilendirmek için bir kapı zili kaydına yazdığında NVMe aygıtına G/Ç gönderilir. Komut tamamlandığında, aygıt bir G/Ç tamamlama kuyruğuna müellif ve aygıt şoförünü bilgilendirmek için bir kesinti oluşturur.

Ağ üzerinden NVMe bu tasarımı genişletir, böylelikle ana bilgisayar belleğindeki gönderme ve tamamlama kuyrukları uzak kontrolcüde çoğaltılır, böylelikle ana bilgisayar tabanlı kuyruk çifti denetleyici tabanlı bir kuyruk çiftine eşlenir. Ağ topolojileri üzerinden NVMe, kuyruklar tarafından Data Kapsüllerinin yanı sıra ağ genelinde bağlantı kurmak için kullanılan Komut ve Cevap Kapsüllerini tanımlar. NVMe-TCP, bu kapsüllerin bir TCP PDU (Protokol Bilgi Birimi) içinde nasıl kapsüllendiğini tanımlar. Her ana bilgisayar tabanlı kuyruk çifti ve alakalı denetleyici tabanlı kuyruk çifti, kendi TCP kontağıyla eşleşir ve başka bir CPU çekirdeğine atanabilir.


NVMe-TCP Avantajları

  • TCP’nin her yerde bulunan tabiatı. TCP, dünya genelindeki birden fazla data merkezinde aslında uygulanmakta olan, kullanımdaki en yaygın ağ transferlerinden biridir.
  • Mevcut ağ altyapısıyla çalışmak üzere tasarlanmıştır. Diğer bir deyişle, ağ altyapısının bakımını kolaylaştıran mevcut ethernet yönlendiricilerinin, anahtarların, NIC’lerin değiştirilmesine gerek yoktur.
  • RDMA tabanlı uygulamalardan farklı olarak, TCP büsbütün yönlendirilebilir ve yüksek performans ve düşük gecikme müddetlerini korurken daha büyük dağıtımlar ve daha uzun aralıklar için çok uygundur.
  • TCP, büyük bir topluluk tarafından faal olarak korunmakta ve geliştirilmektedir.

NVMe-TCP Dezavantajları

  • TCP, CPU kullanımını artırabilir zira sağlama toplamlarının hesaplanması üzere makul süreçler, TCP yığınının bir modülü olarak CPU tarafından yapılmalıdır.
  • TCP, düşük gecikmeyle yüksek performans sağlasa da, RDMA uygulamalarıyla karşılaştırıldığında gecikme, kısmen korunması gereken ek data kopyaları nedeniyle birtakım uygulamaları etkileyebilir.

NVMe-TCP Örneğini Ayarlama

UEK6, NVMe-TCP varsayılan olarak aktifleştirilmiş biçimde piyasaya sürüldü, fakat bir özgün çekirdek ile denemek için aşağıdaki çekirdek yapılandırma parametreleriyle derlemeniz gerekecek:

  • CONFIG_NVME_TCP
  • CONFIG_NVME_TARGET_TCP = m

Gaye Oluşturma

$ sudo modprobe nvme_tcp
$ sudo modprobe nvmet
$ sudo modprobe nvmet-tcp
$ sudo mkdir /sys/kernel/config/nvmet/subsystems/nvmet-test
$ cd /sys/kernel/config/nvmet/subsystems/nvmet-test
$ echo 1 |sudo tee -a attr_allow_any_host > /dev/null
$ sudo mkdir namespaces/1
$ cd namespaces/1/
$ sudo echo -n /dev/nvme0n1 |sudo tee -a device_path > /dev/null
$ echo 1|sudo tee -a enable > /dev/null

Amaç ana bilgisayarda bir NVMe aygıtına erişiminiz yoksa, bunun yerine bir boş blok aygıt kullanabilirsiniz.

$ sudo modprobe null_blk nr_devices=1
$ sudo ls /dev/nullb0
/dev/nullb0
$ echo -n /dev/nullb0 > device_path
$ echo 1 > enable
$ sudo mkdir /sys/kernel/config/nvmet/ports/1
$ cd /sys/kernel/config/nvmet/ports/1
$ echo 10.147.27.85 |sudo tee -a addr_traddr > /dev/null
$ echo tcp|sudo tee -a addr_trtype > /dev/null
$ echo 4420|sudo tee -a addr_trsvcid > /dev/null
$ echo ipv4|sudo tee -a addr_adrfam > /dev/null
$ sudo ln -s /sys/kernel/config/nvmet/subsystems/nvmet-test/ /sys/kernel/config/nvmet/ports/1/subsystems/nvmet-t

Artık dmesg’de yakalanan aşağıdaki bildirisi görmelisiniz:

$ dmesg |grep “nvmet_tcp”
[24457.458325] nvmet_tcp: enabling port 1 (10.147.27.85:4420)

İstemciyi Ayarlama

$ sudo modprobe nvme
$ sudo modprobe nvme-tcp

$ sudo nvme discover -t tcp -a 10.147.27.85 -s 4420
Discovery Log Number of Records 1, Generation counter 3
=====Discovery Log Entry 0======
trtype: tcp
adrfam: ipv4
subtype: nvme subsystem
treq: not specified, sq flow control disable supported
portid: 1
trsvcid: 4420
subnqn: nvmet-test
traddr: 10.147.27.85
sectype: none
$ sudo nvme connect -t tcp -n nvmet-test -a 10.147.27.85 -s 4420

$ sudo nvme list
Node SN Model Namespace Usage Format FW Rev
————- ——————- ————— ——— ———– ——— ——-
/dev/nvme0n1 610d2342db36e701 Linux 1 2.20 GB / 2.20 GB 512 B + 0 B

Artık TCP kullanılarak ağ üzerinden NVMe aracılığıyla dışa aktarılan bir uzak NVMe blok aygıtınız var. Bundan sonra lokal olarak bağlı öbür yüksek performanslı blok aygıtlar üzere yazabilir ve ondan okuyabilirsiniz.

Randıman

NVMe-RDMA ve NVMe-TCP’yi karşılaştırmak için, her biri Oracle Linux (OL8.2) ile UEK6 (v5.4.0-1944) çalıştıran Mellanox ConnectX-5 içeren bir çift Oracle X7-2 ana bilgisayar kullanıldı. RoCEv2 (RDMA) ile bir çift 40 Gb ConnectX-5 ilişki noktası yapılandırıldı, performans testleri yapıldı, TCP kullanmak için tekrar yapılandırıldı ve performans testleri tekrar çalıştırıldı. Performans yardımcı programı FIO, saniye başına G/Ç (IOPS) ve gecikmeyi ölçmek için kullanıldı.

IOPS için test ederken, 32 kuyruk derinliğine sahip tek iş parçacıklı bir 8k okuma testi, RDMA’nın kıymetli ölçüde TCP’den daha düzgün performans gösterdiğini ortaya koydu, fakat NVMe kuyruk modelinden daha uygun yararlanan ek iş parçacıkları eklendiğinde, TCP IOPS performansı arttı. İş parçacığı sayısı 32’ye ulaştığında, TCP IOPS performansı RDMA’nınkiyle eşleşiyor.

Gecikme, kuyruk derinliği 1 olan tek bir iş parçacığından 8k okuma kullanılarak ölçüldü. TCP gecikmesi RDMA’dan %30 daha yüksekti. Farkın birçok, TCP’nin gerektirdiği tampon kopyalardan kaynaklanmakta.

Sonuç

Her ne kadar NVMe-TCP yenilikten muzdarip olsa da, TCP için birebir şey geçerli değil ve bilgi merkezindeki hakimiyetiyle, NVMe-TCP’nin bilgi merkezi SAN alanında baskın bir oyuncu olacağına kuşku yok. Bu yıl NVMe-TCP için düzgünleştirilmiş ethernet adaptörlerinden NVMe-TCP SAN eserlerine kadar birçok üçüncü taraf NVMe-TCP eserinin piyasaya sürülmesini bekleyebiliriz.

Kaynak: Technopat

Başa dön tuşu