Bu konu, Paylaşılan Bellek İletişimi (SMC) özelliğinin nasıl etkinleştirileceğini, hızlandırma kapsamının nasıl tanımlanacağını ve en iyi performans için arayüzlerin nasıl yapılandırılacağını açıklar.
Alibaba Cloud ECS'de SMC Kullanma
SMC-R'yi kullanmak için aşağıdaki adımları izleyin.
Ön Koşullar
-
Elastic RoCE Altyapısı (ERI) özelliğini destekleyen bir Elastic Compute Service (ECS) Örneği oluşturun.
Alibaba Cloud'da SMC-R'yi kullanmak için Elastic Remote Direct Memory Access (eRDMA) yeteneğine sahip bir Elastic Compute Service (ECS) Örneğine ihtiyacınız vardır. Daha fazla bilgi için bkz. Kurumsal düzeydeki bir örnekte eRDMA'yı etkinleştirme.
ÖnemliAlibaba Cloud eRDMA aygıtları ve SMC şu anda IPv6 adreslerini desteklememektedir. Uygulamanız bir IPv6 adresi kullanıyorsa SMC, TCP'ye geri döner. Daha fazla bilgi için bkz. IPv6 adreslerinde SMC'nin TCP'ye geri dönmesi.
ANCK 5.10.134-17.3sürümünden itibaren SMC,IPv4-mapped IPv6adreslerini destekler.
-
smcvesmc_diagÇekirdek Modüllerini yükleyin.sudo modprobe smc sudo modprobe smc_diagÇekirdek günlük iletilerini görüntülemek için
dmesgkomutunu çalıştırın. Aşağıdakine benzer bir çıktı görüyorsanız modüller başarıyla yüklenmiştir.smc: smc: load SMC module with reserve_mode NET: Registered protocol family 43 smc: netns <netns ID> reserved ports [65500 ~ 65515] for eRDMA OOB smc: adding ib device erdma_0 with port count 1 smc: ib device erdma_0 port 1 has pnetid(Söz konusu değil) Artık SMC modüllerine ihtiyacınız yoksa bunları kaldırmak için aşağıdaki komutları çalıştırın:
sudo rmmod smc_diag sudo rmmod smc -
smc-toolsvealiyun-smc-extensionsyardımcı programlarını yüklemek için aşağıdaki komutları çalıştırın.sudo yum install -y smc-tools sudo yum install -y aliyun-smc-extensions
TCP uygulamalarını SMC yığını üzerinde çalıştırma
Alibaba Cloud Linux 3 SMC-R, iki düzeyde şeffaf soket protokolü dönüşümünü destekler.
Net ad alanı düzeyinde soket dönüşümü
Alibaba Cloud Linux 3, net namespace düzeyinde soketleri şeffaf bir şekilde dönüştürmek için bir özellik sağlar. Aşağıdaki koşulları karşılamaları durumunda bir net namespace içindeki tüm TCP soketlerini SMC soketlerine dönüştürmek için sysctl net.smc.tcp2smc anahtarını kullanabilirsiniz:
familydeğeri AF_INET'tir.typedeğeri SOCK_STREAM'dir.protocoldeğeri IPPROTO_IP(0) veya IPPROTO_TCP(6)'dır.
Aşağıdaki şekil dönüşüm sürecini göstermektedir.
net namespace düzeyinde şeffaf dönüşümü etkinleştirmek için şu adımları izleyin.
-
net namespaceiçin genelnet.smc.tcp2smcanahtarını etkinleştirmek üzere aşağıdaki komutu çalıştırın.Yeni oluşturulan TCP soketleri SMC soketlerine dönüştürülür. Mevcut TCP soketleri etkilenmez.
sudo sysctl net.smc.tcp2smc=1Varsayılan olarak
sysctl net.smc.tcp2smcdeğeri0olarak ayarlanır; bu, özelliğin devre dışı olduğu anlamına gelir. -
Geçerli
net namespaceiçinde herhangi bir TCP soket uygulaması çalıştırın.Örnekteki
<foo>ifadesini kendi uygulama adınızla değiştirin../<foo>foouygulaması tarafından oluşturulan TCP soketleri şeffaf bir şekilde SMC soketleriyle değiştirilir ve SMC-R Protokol Yığını uygulamanın ağ davranışını yönetir. Genel Bakış bölümünde açıklandığı gibi eş taraf da SMC-R protokolünü destekliyor ve anlaşma başarılı olursa her iki uç da verileri RDMA ağı üzerinden aktarır. Aksi takdirde iletişim güvenli bir şekilde TCP ağına geri döner. -
(Söz konusu değil)
net namespaceiçin genel değiştirme anahtarını devre dışı bırakmak üzere aşağıdaki komutu çalıştırın. Yeni oluşturulan TCP soketleri artık dönüştürülmez. Mevcut SMC soketleri etkilenmez.sudo sysctl net.smc.tcp2smc=0
İşlem düzeyinde soket dönüşümü
Alibaba Cloud Linux 3 ayrıca smc-tools yardımcı programı kullanılarak etkinleştirilen işlem düzeyinde şeffaf protokol dönüşümü de sağlar.
Bir uygulamayı smc_run betiğiyle çalıştırdığınızda LD_PRELOAD ortam değişkenini kullanarak libsmc-preload.so dinamik kitaplığının öncelikli olarak yüklenmesini sağlar. libsmc-preload.so kitaplığı aşağıdaki koşulları karşılayan TCP soketlerini uygulama ve alt işlemlerinde SMC soketlerine dönüştürür:
familydeğeri AF_INET'tir.typedeğeri SOCK_STREAM'dir.protocoldeğeri IPPROTO_IP(0) veya IPPROTO_TCP(6)'dır.
smc_run, glibc içindeki socket() sistem çağrısını engellemek için LD_PRELOAD kullanır. Bu nedenle statik olarak bağlanan veya glibc kullanmayan uygulamalarda çalışmaz.
Aşağıdaki şekil değiştirme sürecini göstermektedir.
İşlem düzeyinde şeffaf dönüşümü etkinleştirmek için şu adımları izleyin.
foo uygulamanız için komutunuzdan önce smc_run ön ekini ekleyerek aşağıdaki komutu çalıştırın.
Örnekteki <foo> ifadesini işlem adınızla değiştirin.
smc_run ./<foo>
foo uygulaması tarafından oluşturulan TCP soketleri şeffaf bir şekilde SMC soketleriyle değiştirilir ve SMC-R Protokol Yığını uygulamanın ağ davranışını yönetir. Genel Bakış bölümünde açıklandığı gibi eş taraf da SMC-R protokolünü destekliyor ve anlaşma başarılı olursa her iki uç da verileri RDMA ağı üzerinden aktarır. Aksi takdirde iletişim güvenli bir şekilde TCP ağına geri döner.
BPF ile SMC anlaşma denetimi
Pratikte SMC'yi net namespace veya işlem düzeyinde etkinleştirmek bazen çok kaba granüler olabilir. Örneğin bir sunucuda tek bir net namespace içinde birden fazla dinleme bağlantı noktası bulunabilir. Yalnızca performans hızlandırması gerektiren bağlantı noktalarındaki bağlantılar için SMC kullanmak isterken yönetim bağlantı noktaları gibi diğer bağlantı noktalarına yönelik bağlantıların güvenli bir şekilde TCP'ye geri dönmesini isteyebilirsiniz.
Bunu ele almak için Alibaba Cloud Linux 3 şeffaf dönüşüm etkinleştirildikten sonra bağlantılar için SMC anlaşmasını denetlemek amacıyla BPF kullanımını destekler. Tipik süreç şu şekildedir:
SMC anlaşması için granüler denetim ayarlamak üzere BPF ilkelerini etkinleştirin ve yapılandırın.
SMC'yi
net namespaceveya işlem düzeyinde etkinleştirin. Daha fazla bilgi için bkz. TCP uygulamalarını SMC yığını üzerinde çalıştırma.
Genel Bakış bölümünde açıklandığı gibi iletişim tarafları TCP el sıkışması sırasında karşılıklı SMC-R desteğini bildirmek ve onaylamak için özel bir TCP seçeneği kullanır. Anlaşma başarılı olursa taraflar arasındaki sonraki ağ iletimi RDMA ağını temel alır. Aksi takdirde bağlantı güvenli bir şekilde TCP ağına geri döner.
Varsayılan olarak bir SMC soketi her zaman bu özel TCP seçeneğini başlatır ve yanıtlar. Ancak bağlantı noktaları veya IPv4 adreslerine dayalı ilkeler uygulayarak SMC etkinleştirmesi üzerinde daha granüler bir denetim sağlamak için BPF'yi kullanabilirsiniz.
Alibaba Cloud Linux 3 bu BPF ilkelerini yapılandırmak için smc-tools paketinin bir parçası olan smc-ebpf aracını sağlar.
smc-ebpf öğesinin başarıyla yüklendiğini denetlemek için aşağıdaki komutu çalıştırın.
smc-ebpf policy help
Aşağıdaki çıktı görüntülenirse smc-ebpf başarıyla yüklenmiştir.
smc-ebpf policy help
Usage: smc-ebpf policy COMMAND [OPTIONS]
smc-ebpf policy load [OPTIONS] load policy
--init load policy with pre-defination config
smc-ebpf policy stop stop policy
smc-ebpf policy unload unload policy
smc-ebpf policy init init policy with default config
smc-ebpf policy clear clear all policy config
smc-ebpf policy dump display all policy config
smc-ebpf policy config [OPTIONS] config policy
smc-ebpf policy delete [OPTIONS] delete policy
--ip [IPv4] target IPv4 address
--port target port
--mode [auto|disable|enable] target mode
Examples:
smc-ebpf policy load
#disable port 80 to use smc
smc-ebpf policy config --port 80 --mode disable
#delete ip xxx.xxx.x.x/24 policy
smc-ebpf policy delete --ip xxx.xxx.x.x --mask 24
smc-ebpf yükleme
smc-ebpf yüklemek için aşağıdaki komutu çalıştırın.
sudo smc-ebpf policy load
smc-ebpf, yüklenmeden önce kurulmuş bağlantıları etkilemez.smc-ebpfile yapılandırılan ilkeler sistem genelindedir ve belirli net ad alanları (konteynerler) için yapılandırılamaz.smc-ebpfözellikleri hala üst akış topluluğunda standartlaştırılmaktadır. Arayüzler gelecekte değişebilir ve şu anda deneysel olarak kabul edilir.
-
Aşağıdaki çıktı komutun başarılı olduğunu gösterir:
# sudo smc-ebpf policy load Registered smc_sock_negotiator_ops anolis_smc id xxx -
Aksi takdirde bu özelliği geçerli ortamda kullanamazsınız. Olası nedenler şunlardır:
İşletim sistemi Çekirdek Sürümünün
ANCK 5.10.134-016veya üzeri olduğunu doğrulayın. Çekirdek Sürümünü denetlemek içinuname -rkomutunu çalıştırabilirsiniz.BPF programlarını yüklemek için izniniz olduğunu doğrulayın. Yaygın bir sorun kullandığınız pod konteynerinin BPF programlarını yükleme yeteneğine sahip olmaması veya kullanıcı ayrıcalık düzeyinizin yetersiz olmasıdır. Daha fazla bilgi için ortam sağlayıcınıza danışabilirsiniz.
Bağlantı noktası ilkelerinin varsayılan davranışı
Varsayılan olarak smc-ebpf yüklendikten sonra bir ilkeyle eşleşmeyen herhangi bir bağlantı noktası için SMC anlaşmasını reddeder.
Örneğin:
Herhangi bir bağlantı noktası ilkesi yapılandırılmadan
smc-ebpfyüklenirse tüm bağlantı noktaları için SMC anlaşması reddedilir.smc-ebpfyüklenir ve yalnızca 80 numaralı bağlantı noktasında SMC anlaşmasına izin veren tek bir ilke yapılandırılırsa 8080 numaralı bağlantı noktasıyla hiçbir ilke eşleşmediği için bu bağlantı noktasını kullanan herhangi bir bağlantı için SMC anlaşması reddedilir.
Aşağıdaki komutu çalıştırarak bağlantı noktası 0 değerini enable olarak ayarlayıp bu varsayılan davranışı değiştirebilirsiniz. Bu ayarla birlikte hedef bağlantı noktasıyla hiçbir bağlantı noktası ilkesi eşleşmezse söz konusu bağlantı noktası için SMC anlaşmasına izin verilir.
sudo smc-ebpf policy config --port 0 --mode enable
Benzer şekilde bağlantı noktası 0 değerini disable olarak ayarlayarak orijinal varsayılan davranışa geri dönebilirsiniz. Bu durumda eşleşen bir ilkesi olmayan herhangi bir bağlantı noktası için SMC anlaşması yeniden reddedilir.
sudo smc-ebpf policy config --port 0 --mode disable
Bağlantı noktası tabanlı ilkeler
Varsayılan davranışa ek olarak belirli bağlantı noktaları için ilkeler ekleyebilirsiniz.
Örneğin:
-
Örnek 1: SMC anlaşmasına yalnızca 80 numaralı bağlantı noktasında izin verin ve diğer tüm bağlantı noktalarında reddedin.
80 numaralı bağlantı noktasında SMC anlaşmasına izin veren bir ilke eklemek için aşağıdaki komutu çalıştırın.
sudo smc-ebpf policy config --port 80 --mode enableBağlantı noktası ilkesi yapılandırmasını görüntülemek için aşağıdaki komutu çalıştırın.
sudo smc-ebpf policy dumpÖrnek çıktı:
"key": 80ifadesi ilkenin 80 numaralı bağlantı noktasına uygulandığını gösterir."mode"SMC anlaşmasına izin verilip verilmediğini gösterir.2izin verildiğini0ise reddedildiğini ifade eder.
# sudo smc-ebpf policy dump [{ "key": 80, "value": { "mode": 2, [Other fields can be ignored by general users] } } ]Bu ilkeye artık ihtiyaç duyulmuyorsa 80 numaralı bağlantı noktası için ilkeyi silmek üzere aşağıdaki komutu çalıştırın.
sudo smc-ebpf policy delete --port 80dumpkomutunu tekrar çalıştırın. Aşağıdaki çıktı yapılandırmanın başarıyla silindiğini gösterir.# sudo smc-ebpf policy dump [] -
Örnek 2: SMC anlaşmasına yalnızca 80 numaralı bağlantı noktasında izin vermeyin ve diğer tüm bağlantı noktalarında buna izin verin.
Varsayılan davranışı eşleşmeyen bağlantı noktaları için SMC anlaşmasına izin verecek şekilde değiştirmek ve ardından 80 numaralı bağlantı noktası için SMC anlaşmasını özellikle reddeden bir ilke eklemek için aşağıdaki komutları çalıştırın.
sudo smc-ebpf policy config --port 0 --mode enable sudo smc-ebpf policy config --port 80 --mode disableBundan sonra SMC anlaşması yalnızca 80 numaralı bağlantı noktası için reddedilir. Belirli bir ilkeyle eşleşmeyen diğer tüm bağlantı noktalarının SMC anlaşması kullanmasına izin verilir.
IPv4 adresi ilkelerinin varsayılan davranışı
Bağlantı noktası ilkelerinden farklı olarak IPv4 adresi ilkeleri yalnızca istemci soketleri için geçerlidir. Bir bağlantı kurulurken sunucunun IPv4 adresine göre bir istemcinin SMC anlaşması kullanıp kullanmayacağını denetlerler.
Yapılandırılan tüm bağlantı noktası ve IPv4 adresi ilkeleri AND mantığıyla birleştirilir. SMC anlaşması yalnızca eşleşen tüm ilkeler buna izin verdiğinde kullanılır. Eşleşen herhangi bir ilke SMC anlaşmasını reddederse kullanılmaz.
Varsayılan olarak smc-ebpf yüklendikten sonra bir IPv4 adresi ilkesiyle eşleşmeyen herhangi bir sunucu IP'si için SMC anlaşmasına izin verir.
Örneğin:
Herhangi bir IPv4 adresi ilkesi yapılandırılmadan
smc-ebpfyüklenirse istemci soketlerinin herhangi bir sunucu IP'sine bağlanırken SMC anlaşması kullanmasına izin verilir.smc-ebpfyüklenir ve yalnızca192.168.1.0/24ağı için SMC anlaşmasını reddeden tek bir ilke yapılandırılırsa192.168.3.11ile hiçbir ilke eşleşmediği için192.168.3.11adresine yapılan bir bağlantının SMC anlaşması kullanmasına izin verilir.
Aşağıdaki komutu çalıştırarak 0.0.0.0/32 değerini disable olarak ayarlayıp bu varsayılan davranışı değiştirebilirsiniz. Bu ayarla birlikte hedef sunucu IP'siyle hiçbir IPv4 adresi ilkesi eşleşmezse söz konusu sunucu IP'si için SMC anlaşması reddedilir.
sudo smc-ebpf policy config --ip 0.0.0.0 --mask 32 --mode disable
Benzer şekilde aşağıdaki komutu çalıştırarak varsayılan davranışı geri yükleyebilirsiniz. Bu durumda eşleşen bir ilkesi olmayan herhangi bir sunucu IP'si için SMC anlaşmasına yeniden izin verilir.
sudo smc-ebpf policy config --ip 0.0.0.0 --mask 32 --mode enable
IPv4 adresi tabanlı ilkeler
Varsayılan davranışa ek olarak belirli IPv4 adresleri için ilkeler yapılandırarak bir istemci soketinin belirli bir sunucu IP'sine bağlanırken SMC anlaşması kullanıp kullanmayacağını denetleyebilirsiniz.
Yapılandırılan IPv4 adresi filtreleme kuralları yalnızca bir sunucuya bağlanan istemci soketleri için SMC anlaşmasını denetler; sunucu soketlerini etkilemez.
Örneğin:
-
Örnek 1: Bir istemcinin yalnızca 192.168.2.0/24 ağındaki sunuculara bağlanırken SMC anlaşması kullanmasına izin verin. Diğer tüm sunucu adreslerinde bunu reddedin.
Varsayılan davranışı eşleşmeyen sunucu IP'leri için SMC anlaşmasını reddedecek şekilde değiştirmek ve ardından 192.168.2.0/24 ağı için buna izin veren bir ilke eklemek için aşağıdaki komutları çalıştırın.
sudo smc-ebpf policy config --ip 0.0.0.0 --mask 32 --mode disable sudo smc-ebpf policy config --ip 192.168.2.0 --mask 24 --mode enableIPv4 ilkesi yapılandırmasını görüntülemek için aşağıdaki komutu çalıştırın.
sudo smc-ebpf policy dumpÖrnek çıktı:
key: İlkenin hedef IPv4 adresi.value: SMC anlaşmasına izin verilip verilmediğini gösterir.passizin verildiğinideniedise reddedildiğini ifade eder.
# sudo smc-ebpf policy dump key: 0.0.0.0/32 value: "denied" key: 192.168.2.0/24 value: "pass"Bu ilkelere artık ihtiyaç duyulmuyorsa
0.0.0.0/32ve192.168.2.0/24ilkelerini silmek için aşağıdaki komutları çalıştırın.sudo smc-ebpf policy delete --ip 192.168.2.0 --mask 24 sudo smc-ebpf policy delete --ip 0.0.0.0 --mask 32 -
Örnek 2: Bir istemcinin yalnızca
192.168.2.0/24ağına bağlanırken SMC anlaşması kullanmasını reddedin. Diğer tüm sunucu adreslerinde buna izin verin.192.168.2.0/24sunucu adres aralığı için SMC anlaşmasını devre dışı bırakan bir ilke eklemek için aşağıdaki komutu çalıştırın.sudo smc-ebpf policy config --ip 192.168.2.0 --mask 24 --mode disableBaşka bir işlem gerekmez. Varsayılan olarak
smc-ebpfyüklendikten sonra bir ilkeyle eşleşmeyen herhangi bir sunucu IP'si için SMC anlaşmasına izin verilir. Bu nedenle192.168.2.0/24aralığındakiler hariç tüm sunucu adresleri için SMC anlaşmasına izin verilir.
İlkeleri temizleme
Yapılandırılan tüm ilkeleri temizlemek için aşağıdaki komutu çalıştırın.
sudo smc-ebpf policy clear
Bu komutu çalıştırmak tüm yapılandırmaları siler. Davranış varsayılan duruma döner: Tüm bağlantı noktaları için SMC anlaşması reddedilir ancak tüm IPv4 adresleri için buna izin verilir. İki ilke türü arasındaki AND mantığı nedeniyle bu durum tüm bağlantıların SMC anlaşması kullanmasını engeller.
Alibaba Cloud ACK'de SMC Kullanma
Container Service for Kubernetes (ACK) içinde ACK eRDMA Denetleyicisi bileşeni aracılığıyla SMC'yi etkinleştirebilirsiniz. eRDMA Denetleyicisi Pod'lar için eRDMA ağ kartlarını zamanlamayı ve ağ yeteneklerini yönetir. Daha fazla bilgi için bkz. Uygulama ağlarını şeffaf bir şekilde hızlandırmak için SMC-R'yi kullanma.
Alibaba Cloud ECS'de SMC kullanma işlemine benzer şekilde Alibaba Cloud ACK'de SMC kullanırken Düğüm üzerinde granüler BPF tabanlı SMC etkinleştirme ilkelerini de yapılandırabilirsiniz.
Parametreler
SMC Protokol Yığını sysfs ve smc-tools gibi kullanıcı alanı araçları aracılığıyla yapılandırma arayüzleri sağlar. Aşağıdaki bölümlerde SMC'nin yapılandırılabilir özellikleri açıklanmaktadır.
Sysfs parametreleri
|
Çekirdek parametresi |
Açıklama |
Çekirdek sürümü gereksinimleri |
Öneriler |
|
net.smc.autocorking_size |
SMC-R TCP autocork'a benzer şekilde autocork özelliğini sağlar. Birden çok küçük veri paketini tek bir iletim için daha büyük bir pakette birleştirir. Bu özellik ping-pong gecikme süresini etkilemeden küçük paket iş yükleri için aktarım hızını artırır. autocorking_size parametresi birleştirilmiş paketlerin boyutu için üst sınırı belirler. Varsayılan değer: 65535. Geçerli değerler: 0 ila 4294967295. 0 değeri özelliği devre dışı bırakır. |
Çekirdek |
Bant genişliğine öncelik veren küçük paket iş yükleri için en iyi aktarım hızını elde etmek amacıyla bu parametreyi uygun bir değere ayarlayın. Gecikme süresine öncelik veren |
|
net.smc.autosplit_size |
SMC büyük bir veri paketini toplu iletim için birden çok küçük pakete bölen bir autosplit özelliği sağlar. Bu özellik büyük paket senaryolarında gecikme süresi performansını iyileştirir. Bir paketin boyutu autosplit_size değerinin 1,3 katını aştığında paket bölünür. Varsayılan değer: 131072. Geçerli değerler: 32768 ila 536870912. |
Çekirdek sürümleri:
|
Büyük paketlerin ve gecikme süresine duyarlı senaryolarda en iyi gecikme süresini elde etmek için bu parametreyi ayarlayabilirsiniz. |
|
net.smc.experiment_vendor_options |
Alibaba Cloud deneysel özellik seçenekleri. Varsayılan değer: 4294967295 (0xFFFFFFFF). |
Çekirdek |
Bu parametreyi değiştirmemenizi öneririz. |
|
net.smc.global_mem |
Tüm sistemde SMC için bellek su işaretini denetler. SMC Protokol Yığını tarafından sürdürülen gönderme ve alma Arabelleklerinin toplam boyutu Varsayılan değer: [toplam sistem belleğinin %25'i, toplam sistem belleğinin %50'si, toplam sistem belleğinin %75'i]. |
Çekirdek sürümleri:
|
İstediğiniz bellek su işaretine göre |
|
net.smc.limit_smc_hs |
Bağlantı kurma baskısı yüksek olduğunda TCP'ye proaktif olarak geri dönülüp dönülmeyeceğini denetler. Varsayılan değer: 1. Geçerli değerler:
|
Çekirdek sürümleri:
|
Bunu 1 (etkin) olarak ayarlamanızı öneririz. SMC protokol yığınının bağlantı baskısına göre otomatik olarak geri dönmesini istemediğiniz belirli durumlarda bunu 0 olarak ayarlayabilirsiniz. |
|
net.smc.mem |
Geçerli Varsayılan değer: [toplam sistem belleğinin %25'i, toplam sistem belleğinin %50'si, toplam sistem belleğinin %75'i]. |
Çekirdek sürümleri:
|
İstediğiniz bellek su işaretine göre |
|
net.smc.rmem |
Bir SMC soketi için varsayılan alma Arabelleği boyutu. Alma Arabelleği boyutu ( Varsayılan değer: 262144. Geçerli değerler:
|
Çekirdek |
Daha fazla bilgi için bkz. SMC izleme. |
|
net.smc.wmem |
Bir SMC soketi için varsayılan gönderme Arabelleği boyutu. Gönderme Arabelleği boyutu ( Varsayılan değer: 262144. Geçerli değerler:
|
Çekirdek |
Daha fazla bilgi için bkz. SMC izleme. |
|
net.smc.smcr_buf_type |
SMC-R gönderme ve alma Arabellekleri için bellek türü. Fiziksel olarak bitişik bellek daha iyi performans sağlar ancak genellikle ayrılması zordur ve bu durum Arabellek boyutlarının beklenenden daha küçük olmasına neden olabilir. Buna karşılık sanal olarak bitişik belleğin ayrılması daha kolaydır ancak biraz daha düşük performans sunar. Bu değerdeki değişiklikler yeni oluşturulan LGR'ler tarafından taşınan SMC bağlantılarında etkili olur. Mevcut LGR'ler etkilenmez. Varsayılan değer: 2. Geçerli değerler:
|
Çekirdek |
Bu parametreyi değiştirmemenizi öneririz. |
|
net.smc.smcr_max_conns_per_lgr |
SMC-R'de bir LGR'nin taşıyabileceği maksimum SMC bağlantısı sayısı. Varsayılan değer: 32. Geçerli değerler:
|
Çekirdek |
Dikkatli bir şekilde değiştirin.
|
|
net.smc.smcr_max_links_per_lgr |
SMC-R'de bir LGR'nin içerdiği RDMA RC bağlantısı (SMC Bağlantıları) sayısı. Varsayılan değer: 1. Geçerli değerler: 1 ila 2. |
Çekirdek |
Bu parametreyi değiştirmemenizi öneririz. |
|
net.smc.smcr_testlink_time |
SMC-R'de bir RDMA RC bağlantısı (SMC Bağlantısı) için kalp atışı paketi aralığı (saniye cinsinden). SMC Bağlantısında veri iletimi olmadığında bağlantı kullanılabilirliğini onaylamak için her Varsayılan değer: 30. Geçerli değerler: 0 ila 2147483647. 0 değeri kalp atışı denetimini devre dışı bırakır. |
Çekirdek |
Bu parametreyi değiştirmemenizi öneririz. |
|
net.smc.tcp2smc |
Geçerli Varsayılan değer: 0. Geçerli değerler:
|
Çekirdek |
|
EID parametreleri
SMCv2 protokolüne eklenen Kurumsal Kimlik (EID), yalnızca eşleşen EID'ye sahip sistemlerin SMCv2 üzerinden iletişim kurabilmesini sağlar; aksi takdirde sistemler TCP'ye geri döner. Bir sistemde en fazla sekiz EID bulunabilir.
Alibaba Cloud Linux 3 üzerinde eRDMA aygıtları yalnızca SMCv2 protokolü ile kullanılabilir. Alibaba Cloud Linux 3 sistemleri başlangıçta SMCV2-DEFAULT-UEID EID'si ile yapılandırılır. Bu nedenle, varsayılan olarak tüm Alibaba Cloud Linux 3 düğümleri, herhangi bir manuel yapılandırma gerektirmeden eRDMA kullanan SMCv2 aracılığıyla birbirleriyle iletişim kurabilir.
Özel durumlarda EID'yi değiştirerek iletişim kapsamını kontrol etmeniz gerekiyorsa aşağıdaki adımları izleyin.
-
Mevcut EID'leri görüntüleyin.
smcr ueid show -
Yeni bir EID ekleyin.
Bir
EIDen fazla 32 karakter içerebilir ve büyük harfler (A-Z), rakamlar (0-9), tire (-) ve nokta (.) karakterlerini barındırabilir. İlk karakter bir harf veya rakam olmalıdır ve noktalar (.) ardışık olarak kullanılamaz.sudo smcr ueid add <EID> -
Mevcut bir EID'yi silin.
sudo smcr ueid del <EID>
Kullanım durumu: EID'ler ile AZ'lar arası SMC-R iletişimini önleme
En iyi SMC-R hızlandırması için aynı Kullanılabilirlik Alanı içindeki iletişim için SMC-R kullanmanızı ve Kullanılabilirlik Alanları arası iletişim için TCP kullanmanızı öneririz. Kullanılabilirlik Alanı Kimliğini bir EID olarak ekleyerek bu davranışı otomatik olarak sağlayabilirsiniz. Yapılandırmak için aşağıdaki adımları izleyin.
-
Yöntem 1: EID'yi adım adım yapılandırın
-
Alibaba Cloud Elastic Compute Service (ECS) Örnek Meta Verilerinden Kullanılabilirlik Alanı Kimliğini almak için aşağıdaki komutu çalıştırın. Daha fazla bilgi için bkz. Örnek Meta Verileri.
ZONE_ID=$(curl -s -m 1 100.100.100.200/latest/meta-data/zone-id | tr "[:lower:]" "[:upper:]") -
Kullanılabilirlik Alanı Kimliğini bir EID olarak eklemek için aşağıdaki komutu çalıştırın.
sudo smcr ueid add $ZONE_ID -
Varsayılan
SMCV2-DEFAULT-UEIDdeğerini silmek için aşağıdaki komutu çalıştırın.smcr ueid | grep SMCV2-DEFAULT-UEID > /dev/null && sudo smcr ueid del SMCV2-DEFAULT-UEID
-
-
Yöntem 2: Tek tıklamayla yapılandırma için
aliyun-smc-extensionsaracındakialiyunsmc-ueidhizmetini kullanın-
aliyunsmc-ueidhizmetini başlatmak için aşağıdaki komutu çalıştırın. Bu hizmet, Kullanılabilirlik Alanı Kimliğini otomatik olarak bir EID olarak ekler ve varsayılan EID'yi kaldırır.sudo systemctl start aliyunsmc-ueid -
(İsteğe bağlı)
aliyunsmc-ueidhizmetinin önyüklemede başlamasını etkinleştirmek için aşağıdaki komutu çalıştırın. EID yapılandırması kalıcı olmadığından ve işletim sistemi yeniden başlatıldığında sıfırlandığından bu işlem gereklidir.sudo systemctl enable aliyunsmc-ueid
-
PNET ID parametreleri
TCP trafiği bir Elastic Network Interface (ENI) üzerinden akar. Bu trafik şeffaf bir şekilde SMC-R'ye dönüştürüldüğünde, SMC-R Protokol Yığını o ENI ile ilişkili RDMA ağ arayüzünü (ERI) kullanır.
Bu ilişkilendirme iki şekilde kurulabilir.
-
ERI, hedef ENI üzerinde eRDMA özelliği doğrudan etkinleştirilerek elde edilir. Bu durumda, SMC-R protokol yığını bu ENI'yi ERI ile otomatik olarak ilişkilendirir.
Bir ENI'nin eRDMA özelliğinin etkin olup olmadığını kontrol etmek için bkz. ERI'leri Görüntüleme.
Bir ENI oluştururken eRDMA özelliğini etkinleştirmek için bkz. ERI Oluşturma.
Mevcut bir ENI'ye eRDMA özelliği eklemek için bkz. Mevcut bir ENI için ERI özelliğinin durumunu değiştirme.
Bu senaryoda, SMC-R protokol yığını ENI ile ilişkili ERI'yi otomatik olarak tanımlayabilir ve kullanabilir; ek işlemler gerekmez.
-
ERI, farklı bir ENI üzerinde eRDMA özelliği etkinleştirilerek elde edilir. Bu durumda, ERI'yi hedef ENI ile ilişkilendirmek için bir PNET ID kullanmanız gerekir.
Aşağıdaki senaryoyu göz önünde bulundurun:
Bir Ana Bilgisayarın
eth0veeth1olmak üzere iki Ethernet arabirimi vardır. Yalnızcaeth0üzerinde etkinleştirilmiş bir RDMA arabirimi,erdma_0bulunmaktadır.TCP trafiği
eth0üzerinden gönderilip alınıyorsa, SMC-R'ye geçiş sistemin ilişkilierdma_0arayüzünü otomatik olarak bulmasını ve iletişim için RDMA ağını kullanmasını sağlar. Bu, yukarıda açıklanan otomatik ilişkilendirme senaryosudur.Ancak, TCP trafiği
eth1üzerinden gönderilip alınıyorsa, SMC-R'ye geçişerdma_0arayüzünü bulamaz ve TCP'ye geri döner. Bunu çözmek içineth1veerdma_0öğelerini aynı PNET ID ile ilişkilendirin; bu, SMC-R'yeeth1trafiği içinerdma_0kullanmasını talimat verir.Bir ENI ve bir ERI'yi PNET ID kullanarak ilişkilendirmek için aşağıdaki adımları izleyin:
-
Hedef ENI ve ERI için aynı PNET ID'yi yapılandırmak üzere aşağıdaki komutları çalıştırın:
-
ENI için bir PNET ID yapılandırın.
sudo smc_pnet -a <PNET ID> -I <eth_interface> -
eRDMA arabirimi (ERI) için bir PNET ID yapılandırın.
sudo smc_pnet -a <PNET ID> -D <rdma_interface>
Bir PNET ID, boşluk içermeyen en fazla 16 büyük harfli alfanümerik karakterden oluşabilir.
-
-
Yapılandırılan PNET ID parametrelerini kontrol etmek için aşağıdaki komutu çalıştırın.
# sudo smc_pnetÖrnek çıktı:
# sudo smc_pnet 00163E0CD751 n/a erdma_0 1 00163E0CD751 eth1 n/a 255Bu örnekte,
erdma_0PNET ID 00163E0CD751'e bağlanır veeth1de PNET ID 00163E0CD751'e bağlanır. Bu sayede, başlangıçtaeth1arabirimini kullanan TCP iletişimi, SMC-R etkinleştirildikten sonraerdma_0arabirimini kullanabilir.
-
Kullanım durumu: pod veth'i ana bilgisayar eRDMA ile ilişkilendirme
Tek bir Ana Bilgisayardaki birden çok pod'un bir ERI'yi paylaştığı senaryolarda, bir pod'un veth arabirimi trafiğini RDMA kullanarak hızlandırabilirsiniz. Bunu yapmak için pod'un veth Ethernet arabirimi ile Ana Bilgisayarın eRDMA arabirimine aynı PNET ID'yi atayın. Bu, konteyner içindeki çekirdek Protokol Yığınının SMC-R etkinleştirildiğinde Ana Bilgisayarın eRDMA arabirimini doğru şekilde bulmasını sağlar.
Yapılandırmak için aşağıdaki adımları izleyin.
-
Konteynerin
net namespacealanında, konteynerin Ethernet arabirimi (örneğin,eth0) için bir PNET ID yapılandırın.sudo ip netns exec <pod netns> smc_pnet -a <PNET ID> -I eth0 -
Ana Bilgisayarın
net namespacealanında, eRDMA arabirimi (örneğin,erdma_0) için aynı PNET ID'yi yapılandırın.sudo smc_pnet -a <PNET ID> -D erdma_0
Kullanım durumu: Bir ECS örneğinde Redis ile SMC kullanma
İki Elastic Compute Service (ECS) Örneği oluşturun. Biri Redis istemcisi, diğeri Redis sunucusu olarak hizmet verecektir. Parametreler hakkında daha fazla bilgi için bkz. ECS örneklerini özel olarak başlatma.
-
smcvesmc_diagÇekirdek Modüllerini yükleyin.sudo modprobe smc sudo modprobe smc_diag -
Redis'i yüklemek için her iki örnekte de aşağıdaki komutu çalıştırın.
sudo yum install redis -y -
Kullanılabilirlik Alanları arası SMC-R iletişimini önlemek için her iki örnekte de EID'leri yapılandırmak üzere aşağıdaki komutu çalıştırın.
sudo systemctl start aliyunsmc-ueid -
Her iki örnekte de bağlantı noktası tabanlı BPF ilkelerini yapılandırmak için aşağıdaki komutları çalıştırın. Bu, yalnızca sunucu IP adresinin
vswitchCIDR bloğu içinde olduğu ve hizmet bağlantı noktasının6379olduğu bağlantılar için SMC anlaşmasına izin verir.-
smc-ebpfyüklemek için aşağıdaki komutu çalıştırın.sudo smc-ebpf policy load -
Yalnızca
6379bağlantı noktası için SMC anlaşmasına izin veren bağlantı noktası tabanlı bir ilke yapılandırın.sudo smc-ebpf policy config --port 6379 --mode enable -
Yalnızca
vswitchCIDR bloğu içindeki sunucu IP'leri için SMC anlaşmasına izin veren IPv4 adresi tabanlı bir ilke yapılandırın.sudo smc-ebpf policy config --ip 0.0.0.0 --mask 32 --mode disable cidr=$(curl -s -m 1 100.100.100.200/latest/meta-data/vswitch-cidr-block) sudo smc-ebpf policy config --ip \ $(echo ${cidr} | awk -F'/' '{print $1}') --mask \ $(echo ${cidr} | awk -F'/' '{print $2}') --mode enable
-
-
net namespacedüzeyinde şeffaf protokol dönüşümünü yapılandırmak için her iki örnekte de aşağıdaki komutu çalıştırın.sudo sysctl -w net.smc.tcp2smc=1 -
Redis sunucu örneğinde, Redis hizmetini başlatmak için aşağıdaki komutu çalıştırın.
<IP>değerini sunucu örneğinin birincil Elastic Network Interface (ENI) özel IP adresi ile değiştirin.redis-server --bind <IP> --port 6379 --protected-mode no --save -
Redis istemci örneğinde, Redis sunucusuna bağlanın veya test edin.
-
Redis sunucusuna bağlanmak için aşağıdaki komutu çalıştırın.
redis-cli -h <IP> -p 6379 -
redis-benchmarkkullanarak bir kıyaslama testi gerçekleştirmek için aşağıdaki komutu çalıştırın.redis-benchmark -h <IP> -p 6379 -n 1000000 -t set -c 100
-