17 Mayıs 2022
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 formda, 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 halde genişletiyor.
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 irtibat 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 bağlı denetleyici tabanlı kuyruk çifti, kendi TCP irtibatıyla eşleşir ve başka bir CPU çekirdeğine atanabilir.
UEK6, NVMe varsayılan olarak aktifleştirilmiş halde piyasaya sürüldü, lakin bir yepyeni çekirdek ile denemek için aşağıdaki çekirdek yapılandırma parametreleriyle derlemeniz gerekecek:
$ 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
Gaye 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 iletisi görmelisiniz:
$ dmesg |grep “nvmet_tcp”
[24457.458325] nvmet_tcp: enabling port 1 (10.147.27.85:4420)
$ 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
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ı, bunu kullanmak için tekrar yapılandırıldı ve performans testleri yine ç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 uygun performans gösterdiğini ortaya koydu, fakat NVMe kuyruk modelinden daha düzgün yararlanan ek iş parçacıkları eklendiğinde, TCP IOPS performansı arttı.
Web sitemizdeki benzer içerikli makalelere buradan göz atabilirsiniz.
Yorum Yaz