Tüm Ürünler
Search
Belge Merkezi

Alibaba Cloud Linux:Using Shared Memory Communication (SMC)

Son Güncelleme:Sep 30, 2026

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

  1. 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.

    Önemli
    • Alibaba 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.3 sürümünden itibaren SMC, IPv4-mapped IPv6 adreslerini destekler.

  2. smc ve smc_diag Çekirdek Modüllerini yükleyin.

    sudo modprobe smc
    sudo modprobe smc_diag

    Çekirdek günlük iletilerini görüntülemek için dmesg komutunu ç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
  3. smc-tools ve aliyun-smc-extensions yardı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:

  • family değeri AF_INET'tir.

  • type değeri SOCK_STREAM'dir.

  • protocol değeri IPPROTO_IP(0) veya IPPROTO_TCP(6)'dır.

Aşağıdaki şekil dönüşüm sürecini göstermektedir.

image

net namespace düzeyinde şeffaf dönüşümü etkinleştirmek için şu adımları izleyin.

  1. net namespace için genel net.smc.tcp2smc anahtarı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=1

    Varsayılan olarak sysctl net.smc.tcp2smc değeri 0 olarak ayarlanır; bu, özelliğin devre dışı olduğu anlamına gelir.

  2. Geçerli net namespace içinde herhangi bir TCP soket uygulaması çalıştırın.

    Örnekteki <foo> ifadesini kendi uygulama adınızla değiştirin.

    ./<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.

  3. (Söz konusu değil) net namespace iç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:

  • family değeri AF_INET'tir.

  • type değeri SOCK_STREAM'dir.

  • protocol değeri IPPROTO_IP(0) veya IPPROTO_TCP(6)'dır.

Not

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.

image

İş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:

  1. SMC anlaşması için granüler denetim ayarlamak üzere BPF ilkelerini etkinleştirin ve yapılandırın.

  2. SMC'yi net namespace veya 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
Uyarı
  • smc-ebpf, yüklenmeden önce kurulmuş bağlantıları etkilemez.

  • smc-ebpf ile 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-016 veya üzeri olduğunu doğrulayın. Çekirdek Sürümünü denetlemek için uname -r komutunu ç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-ebpf yüklenirse tüm bağlantı noktaları için SMC anlaşması reddedilir.

  • smc-ebpf yü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 enable

    Bağ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": 80 ifadesi ilkenin 80 numaralı bağlantı noktasına uygulandığını gösterir.

    • "mode" SMC anlaşmasına izin verilip verilmediğini gösterir. 2 izin verildiğini 0 ise 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 80

    dump komutunu 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 disable

    Bundan 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.

Not

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-ebpf yüklenirse istemci soketlerinin herhangi bir sunucu IP'sine bağlanırken SMC anlaşması kullanmasına izin verilir.

  • smc-ebpf yüklenir ve yalnızca 192.168.1.0/24 ağı için SMC anlaşmasını reddeden tek bir ilke yapılandırılırsa 192.168.3.11 ile hiçbir ilke eşleşmediği için 192.168.3.11 adresine 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.

Not

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 enable

    IPv4 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. pass izin verildiğini denied ise 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/32 ve 192.168.2.0/24 ilkelerini 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/24 ağına bağlanırken SMC anlaşması kullanmasını reddedin. Diğer tüm sunucu adreslerinde buna izin verin.

    192.168.2.0/24 sunucu 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 disable

    Başka bir işlem gerekmez. Varsayılan olarak smc-ebpf yüklendikten sonra bir ilkeyle eşleşmeyen herhangi bir sunucu IP'si için SMC anlaşmasına izin verilir. Bu nedenle 192.168.2.0/24 aralığı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.

Not

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 5.10.112-11 ve sonrası.

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 pipeline gönderme/alma iş yükleri için autocork tarafından getirilen gecikmeleri önlemek amacıyla bu değeri 0 olarak ayarlayın.

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:

  • 5.10.134-18 ve sonrası.

  • 5.10.134-17.3 ve sonrası (17 serisi).

  • 5.10.134-16.5 ve sonrası (16 serisi).

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 5.10.134-16 ve sonrası.

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 global_mem[2] değerine ulaştığında tüm yeni SMC bağlantıları TCP'ye geri döner.

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:

  • 5.10.134-18 ve sonrası.

  • 5.10.134-17.3 ve sonrası (17 serisi).

  • 5.10.134-16.5 ve sonrası (16 serisi).

İstediğiniz bellek su işaretine göre global_mem[2] değerini yapılandırabilirsiniz.

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:

  • 0: Devre dışı

  • 1: Etkin

Çekirdek sürümleri:

  • 5.10.134-18 ve sonrası.

  • 5.10.134-17.3 ve sonrası (17 serisi).

  • 5.10.134-16.5 ve sonrası (16 serisi).

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 net namespace içinde SMC için bellek su işaretini denetler. net namespace içindeki tüm SMC bağlantıları için gönderme ve alma Arabelleklerinin toplam boyutu mem[2] değerine ulaştığında bu net namespace içindeki tüm yeni SMC bağlantıları TCP'ye geri döner.

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:

  • 5.10.134-18 ve sonrası.

  • 5.10.134-17.3 ve sonrası (17 serisi).

  • 5.10.134-16.5 ve sonrası (16 serisi).

İstediğiniz bellek su işaretine göre mem[2] değerini yapılandırabilirsiniz.

net.smc.rmem

Bir SMC soketi için varsayılan alma Arabelleği boyutu. Alma Arabelleği boyutu (SO_RCVBUF) setsockopt() kullanılarak açıkça ayarlanmadığında bu değer kullanılır.

Varsayılan değer: 262144.

Geçerli değerler:

  • SMC-R: 16384 (16 KB) ila 536870912 (512 MB)

  • SMC-D: 16384 (16 KB) ila 1048576 (1 MB)

Çekirdek 5.10.134-14 ve sonrası.

  • Yerel Rx/Buffer full ölçümü yüksekse yerel alma Arabelleği boyutunu artırın.

  • Yerel Tx/Buffer full(remote) ve Tx/Buffer too small(remote) ölçümleri yüksekse eş tarafın alma Arabelleği boyutunu artırın.

  • Bellek kaynakları kısıtlıysa ve Arabellek boyutunu azaltmak ağ performansını etkilemiyorsa Arabellek boyutunu azaltabilirsiniz.

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 (SO_SNDBUF) setsockopt() kullanılarak açıkça ayarlanmadığında bu değer kullanılır.

Varsayılan değer: 262144.

Geçerli değerler:

  • SMC-R: 16384 (16 KB) ila 536870912 (512 MB)

  • SMC-D: 16384 (16 KB) ila 1048576 (1 MB)

Çekirdek 5.10.134-14 ve sonrası.

  • Yerel Tx/Buffer full ve Tx/Buffer too small ölçümleri yüksekse yerel gönderme Arabelleği boyutunu artırın.

  • Bellek kaynakları kısıtlıysa ve Arabellek boyutunu azaltmak ağ performansını etkilemiyorsa Arabellek boyutunu azaltabilirsiniz.

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:

  • 0: Fiziksel olarak bitişik bellek.

  • 1: Sanal olarak bitişik bellek.

  • 2: Öncelikle fiziksel olarak bitişik belleği tercih edin ancak elde edilemiyorsa sanal olarak bitişik belleği kullanın.

Çekirdek 5.10.134-12 ve sonrası.

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:

  • 1 ila 255 (5.10.134-18 ve sonrası, 17 serisinde 5.10.134-17.3 ve sonrası, 16 serisinde 5.10.134-16.5 ve sonrası).

  • 16 ila 255 (diğer sürümler).

Çekirdek 5.10.134-16.1 ve sonrası.

Dikkatli bir şekilde değiştirin.

  • Yüksek aktarım hızı senaryolarında her SMC bağlantısının daha fazla RDMA bant genişliği almasını sağlamak için LGR başına SMC bağlantısı sayısını uygun şekilde azaltabilirsiniz.

  • Bu değeri artırmanızı önermiyoruz.

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 5.10.134-16.1 ve sonrası.

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 smcr_testlink_time saniyede bir 16 baytlık veri gönderilir.

Varsayılan değer: 30.

Geçerli değerler: 0 ila 2147483647. 0 değeri kalp atışı denetimini devre dışı bırakır.

Çekirdek 5.10.134-13 ve sonrası.

Bu parametreyi değiştirmemenizi öneririz.

net.smc.tcp2smc

Geçerli net namespace içinde şeffaf TCP'den SMC'ye dönüşümü etkinleştirir veya devre dışı bırakır. Etkinleştirildiğinde bu net namespace içinde oluşturulan yeni TCP soketleri çekirdekte engellenir. Bu soketler family ve protocol parametreleri değiştirilerek SMC soketlerine dönüştürülür ve ardından SMC Protokol Yığını üzerinde çalıştırılır.

Varsayılan değer: 0.

Geçerli değerler:

  • 0: net namespace SMC değiştirmeyi devre dışı bırakır.

  • 1: net namespace SMC değiştirmeyi etkinleştirir.

Çekirdek 5.10.134-16 ve sonrası.

  • net namespace düzeyinde TCP'den SMC'ye şeffaf değiştirmeyi etkinleştirmek için 1 olarak ayarlayın.

  • net namespace düzeyinde TCP'den SMC'ye şeffaf değiştirmeyi devre dışı bırakmak için 0 olarak ayarlayın.

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.

image

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.

  1. Mevcut EID'leri görüntüleyin.

    smcr ueid show
  2. Yeni bir EID ekleyin.

    Bir EID en 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>
  3. 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

    1. 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:]")
    2. 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
    3. Varsayılan SMCV2-DEFAULT-UEID değ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-extensions aracındaki aliyunsmc-ueid hizmetini kullanın

    1. aliyunsmc-ueid hizmetini 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
    2. (İsteğe bağlı) aliyunsmc-ueid hizmetinin ö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.

    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 eth0 ve eth1 olmak üzere iki Ethernet arabirimi vardır. Yalnızca eth0 üzerinde etkinleştirilmiş bir RDMA arabirimi, erdma_0 bulunmaktadır.

    TCP trafiği eth0 üzerinden gönderilip alınıyorsa, SMC-R'ye geçiş sistemin ilişkili erdma_0 arayü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_0 arayüzünü bulamaz ve TCP'ye geri döner. Bunu çözmek için eth1 ve erdma_0 öğelerini aynı PNET ID ile ilişkilendirin; bu, SMC-R'ye eth1 trafiği için erdma_0 kullanmasını talimat verir.

    image

    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 255

      Bu örnekte, erdma_0 PNET ID 00163E0CD751'e bağlanır ve eth1 de PNET ID 00163E0CD751'e bağlanır. Bu sayede, başlangıçta eth1 arabirimini kullanan TCP iletişimi, SMC-R etkinleştirildikten sonra erdma_0 arabirimini 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.

image

Yapılandırmak için aşağıdaki adımları izleyin.

  1. Konteynerin net namespace alanı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
  2. Ana Bilgisayarın net namespace alanı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

  1. İ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.

  2. smc ve smc_diag Çekirdek Modüllerini yükleyin.

    sudo modprobe smc
    sudo modprobe smc_diag
  3. Redis'i yüklemek için her iki örnekte de aşağıdaki komutu çalıştırın.

    sudo yum install redis -y
  4. 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
  5. 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 vswitch CIDR bloğu içinde olduğu ve hizmet bağlantı noktasının 6379 olduğu bağlantılar için SMC anlaşmasına izin verir.

    1. smc-ebpf yüklemek için aşağıdaki komutu çalıştırın.

      sudo smc-ebpf policy load
    2. Yalnızca 6379 bağ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
    3. Yalnızca vswitch CIDR 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
  6. net namespace dü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
  7. 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
  8. 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-benchmark kullanarak 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