全部产品
Search
文档中心

Alibaba Cloud Linux:Gunakan SMC

更新时间:Jul 06, 2025

Topik ini menjelaskan cara mengaktifkan Komunikasi Memori Bersama (SMC), mengonfigurasi ruang lingkup akselerasi SMC, serta mengonfigurasi antarmuka yang diekspos oleh SMC untuk mencapai efek akselerasi terbaik.

Gunakan SMC di Alibaba Cloud ECS

Alibaba Cloud Linux 3 menyediakan dan mengoptimalkan tumpukan protokol kernel SMC over RDMA (SMC-R). Anda dapat menggunakan SMC-R dengan mengikuti langkah-langkah berikut.

Persiapan

  1. Buat instance Elastic Compute Service (ECS) yang mendukung Network Interface eRDMA (ERI).

    SMC-R bergantung pada Akses Memori Langsung Jarak Jauh (RDMA). Untuk menggunakan SMC-R di Alibaba Cloud, Anda harus membuat instance ECS yang mendukung fitur ERI untuk mendapatkan kemampuan elastic RDMA (eRDMA) di cloud. Untuk informasi lebih lanjut, lihat Aktifkan eRDMA pada Instance Tingkat Perusahaan.

    Penting
    • Perangkat eRDMA Alibaba Cloud dan SMC tidak mendukung alamat IPv6. Jika aplikasi menggunakan IPv6, SMC akan kembali ke TCP. Untuk informasi lebih lanjut, lihat SMC Kembali ke TCP Saat Alamat IPv6 Digunakan.

    • Mulai dari versi kernel ANCK 5.10.134-17.3, SMC mendukung alamat IPv4-mapped IPv6.

  2. Jalankan perintah berikut untuk memuat modul kernel smc dan smc_diag:

    sudo modprobe smc
    sudo modprobe smc_diag

    Jalankan perintah dmesg untuk melihat pesan terkait kernel. Jika modul kernel dimuat, informasi berikut ditampilkan:

    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

    (Opsional) Jika Anda tidak lagi menggunakan SMC, jalankan perintah berikut untuk menghapus modul SMC:

    sudo rmmod smc_diag
    sudo rmmod smc
  3. Jalankan perintah berikut untuk menginstal alat O&M smc-tools dan aliyun-smc-extensions:

    sudo yum install -y smc-tools
    sudo yum install -y aliyun-smc-extensions

Jalankan aplikasi socket TCP pada tumpukan SMC

Alibaba Cloud Linux 3 SMC-R memungkinkan Anda mengonversi aplikasi dari socket TCP ke socket SMC pada level namespace jaringan dan level proses.

Konversi socket level namespace jaringan

Alibaba Cloud Linux 3 menyediakan fitur konversi socket transparan level namespace jaringan yang memungkinkan Anda mengonversi semua socket TCP yang memenuhi kondisi berikut dalam namespace jaringan menjadi socket SMC dengan menjalankan perintah sysctl net.smc.tcp2smc.

  • Nilai family adalah AF_INET.

  • Nilai type adalah SOCK_STREAM.

  • Nilai protocol adalah IPPROTO_IP(0) atau IPPROTO_TCP(6).

Gambar berikut menunjukkan proses konversi.

Untuk melakukan konversi socket transparan level namespace jaringan, lakukan langkah-langkah berikut:

  1. Jalankan perintah berikut untuk mengatur net.smc.tcp2smc ke 1 untuk mengaktifkan konversi socket transparan untuk namespace jaringan saat ini.

    Setelah konversi socket transparan diaktifkan untuk namespace jaringan, socket TCP baru selanjutnya dalam namespace jaringan dikonversi menjadi socket SMC, sedangkan socket TCP yang ada tidak terpengaruh.

    sudo sysctl net.smc.tcp2smc=1

    Secara default, sysctl net.smc.tcp2smc disetel ke 0, yang menunjukkan bahwa konversi socket transparan dinonaktifkan.

  2. Jalankan perintah berikut untuk menjalankan aplikasi socket TCP dalam namespace jaringan saat ini.

    Dalam perintah berikut, ganti foo dengan nama aplikasi sebenarnya:

    ./<foo>

    Socket TCP yang dibuat oleh aplikasi foo secara transparan diganti dengan socket SMC, dan perilaku jaringan aplikasi ditangani oleh tumpukan SMC-R. Seperti yang dijelaskan dalam Ikhtisar, jika peer juga mendukung SMC-R dan negosiasi berhasil, data ditransmisikan antara node lokal dan peer melalui jaringan RDMA. Jika tidak, node secara aman kembali ke TCP untuk transmisi data.

  3. (Opsional) Jalankan perintah berikut untuk menonaktifkan konversi socket transparan untuk namespace jaringan saat ini. Setelah konversi socket transparan dinonaktifkan untuk namespace jaringan, socket TCP baru selanjutnya dalam namespace jaringan tidak lagi dikonversi menjadi socket SMC, tetapi socket SMC yang sudah dikonversi tidak terpengaruh.

    sudo sysctl net.smc.tcp2smc=0

Konversi socket level proses

Alibaba Cloud Linux 3 juga menyediakan fitur konversi socket transparan level proses berdasarkan set alat smc-tools.

Anda dapat menggunakan skrip smc_run dalam set alat smc-tools untuk menjalankan aplikasi. smc_run menggunakan variabel lingkungan LD_PRELOAD untuk menentukan libsmc-preload.so dalam set alat smc-tools sebagai pustaka dinamis yang dimuat pertama kali. libsmc-preload.so mengonversi socket TCP yang memenuhi kondisi berikut dalam aplikasi dan proses anaknya menjadi socket SMC.

  • Nilai family adalah AF_INET.

  • Nilai type adalah SOCK_STREAM.

  • Nilai protocol adalah IPPROTO_IP(0) atau IPPROTO_TCP(6).

Catatan

smc_run menggunakan LD_PRELOAD untuk mencegat panggilan sistem socket() dalam glibc, dan tidak dapat digunakan untuk aplikasi yang tidak menggunakan glibc atau dilink statis.

Gambar berikut menunjukkan proses konversi.

Untuk melakukan konversi socket transparan level proses, lakukan operasi berikut:

Jalankan perintah berikut untuk menambahkan awalan smc_run sebelum executable aplikasi foo.

Dalam perintah berikut, ganti foo dengan nama proses sebenarnya:

smc_run ./<foo>

Socket TCP yang dibuat oleh aplikasi foo secara transparan diganti dengan socket SMC, dan perilaku jaringan aplikasi ditangani oleh tumpukan SMC-R. Seperti yang dijelaskan dalam Ikhtisar, jika peer juga mendukung SMC-R dan negosiasi berhasil, data ditransmisikan antara node lokal dan peer melalui jaringan RDMA. Jika tidak, node secara aman kembali ke TCP untuk transmisi data.

Kontrol negosiasi SMC berbasis kebijakan BPF

Dalam penggunaan aktual, mengaktifkan SMC pada level namespace jaringan atau level proses terkadang masih terlalu kasar. Misalnya, jika server memiliki beberapa port mendengarkan jaringan dalam namespace jaringan, Anda mungkin ingin menggunakan SMC hanya untuk koneksi pada port yang memerlukan akselerasi kinerja dan secara aman kembali ke TCP untuk koneksi pada port lainnya, seperti port manajemen.

Untuk tujuan ini, Alibaba Cloud Linux 3 mendukung penggunaan teknologi Berkeley Packet Filter (BPF) untuk mengontrol lebih lanjut apakah akan menggunakan negosiasi SMC untuk koneksi berdasarkan konversi socket transparan level namespace jaringan atau level proses. Proses tipikalnya adalah sebagai berikut:

  1. Konfigurasikan dan aktifkan kebijakan BPF untuk menyiapkan kontrol negosiasi SMC yang lebih halus.

  2. Aktifkan SMC pada level namespace jaringan atau level proses. Untuk informasi lebih lanjut, lihat Jalankan Aplikasi Socket TCP pada Tumpukan SMC.

Seperti yang dijelaskan dalam Ikhtisar, selama proses jabat tangan koneksi TCP, kedua pihak komunikasi menggunakan opsi TCP khusus untuk menunjukkan dukungan mereka terhadap SMC-R dan memeriksa apakah peer juga mendukung SMC-R. Setelah negosiasi berhasil, transmisi jaringan selanjutnya antara kedua pihak diselesaikan melalui RDMA. Jika tidak, sistem secara aman kembali ke TCP.

Secara default, socket SMC selalu memulai dan merespons opsi TCP khusus tersebut. Namun, Anda dapat menggunakan teknologi BPF untuk mengontrol lebih lanjut apakah akan memulai atau merespons opsi TCP khusus berdasarkan kebijakan port atau alamat IPv4, sehingga mencapai kontrol aktivasi SMC yang lebih halus.

Untuk tujuan ini, Alibaba Cloud Linux 3 menyediakan alat smc-ebpf dalam smc-tools untuk mengonfigurasi dan mengaktifkan kebijakan BPF.

Jalankan perintah berikut untuk memeriksa apakah alat smc-ebpf telah diinstal:

smc-ebpf policy help

Keluaran perintah berikut menunjukkan bahwa alat smc-ebpf telah diinstal:

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

Memuat alat smc-ebpf

Jalankan perintah berikut untuk memuat alat smc-ebpf:

sudo smc-ebpf policy load
Peringatan
  • Alat smc-ebpf harus dimuat sebelum koneksi yang akan dikonfigurasi dibuat. Alat smc-ebpf tidak berlaku untuk koneksi yang dibuat sebelum dimuat.

  • Kebijakan yang dikonfigurasi oleh alat smc-ebpf adalah kebijakan global dan tidak dapat dikonfigurasi secara independen untuk namespace jaringan tertentu (kontainer).

  • Fitur terkait alat smc-ebpf masih terus distandardisasi di komunitas upstream dan dapat mengalami perubahan antarmuka di masa mendatang. Saat ini, fitur-fitur tersebut hanya disediakan sebagai fitur eksperimental.

  • Keluaran perintah berikut menunjukkan bahwa alat smc-ebpf telah dimuat:

    # sudo smc-ebpf policy load
    Registered smc_sock_negotiator_ops anolis_smc id xxx
  • Keluaran perintah yang berbeda menunjukkan bahwa alat tersebut tidak dapat digunakan dalam lingkungan saat ini. Lakukan operasi berikut untuk mendiagnosis masalah:

    • Konfirmasikan bahwa versi kernel sistem operasi adalah ANCK 5.10.134-016 atau lebih baru. Anda dapat melihat versi kernel dengan menggunakan perintah uname -r.

    • Konfirmasikan bahwa Anda memiliki izin untuk memuat program BPF. Alasan umum mungkin karena pod kontainer yang Anda gunakan tidak memiliki kemampuan untuk memuat program BPF, atau tingkat hak istimewa Anda tidak cukup. Anda dapat berkonsultasi dengan penyedia lingkungan Anda untuk informasi lebih lanjut.

Perilaku default kebijakan port

Setelah alat smc-ebpf dimuat, jika tidak ada kebijakan port yang cocok dengan port target, port target dilarang menggunakan negosiasi SMC.

Contoh:

  • Jika alat smc-ebpf dimuat tanpa kebijakan port yang dikonfigurasi, semua port dilarang menggunakan negosiasi SMC.

  • Jika alat smc-ebpf dimuat dengan hanya satu kebijakan yang mengizinkan port 80 menggunakan negosiasi SMC, port lain yang digunakan, seperti port 8080, dilarang menggunakan negosiasi SMC karena tidak ada kebijakan yang cocok dengan port 8080.

Secara spesifik, Anda dapat menjalankan perintah berikut untuk mengatur --mode ke enable untuk port 0 untuk mengubah perilaku default menjadi mengizinkan penggunaan negosiasi SMC saat tidak ada kebijakan port yang cocok dengan port:

sudo smc-ebpf policy config --port 0 --mode enable

Demikian pula, Anda dapat menjalankan perintah berikut untuk mengatur --mode ke disable untuk port 0 untuk mengubah perilaku default kembali menjadi melarang penggunaan negosiasi SMC saat tidak ada kebijakan port yang cocok dengan port:

sudo smc-ebpf policy config --port 0 --mode disable

Konfigurasikan kebijakan port

Anda dapat menambahkan kebijakan untuk port tertentu berdasarkan perilaku default.

Contoh:

  • Contoh 1: Izinkan hanya port 80 untuk menggunakan negosiasi SMC, dan larang semua port lainnya menggunakan negosiasi SMC.

    Jalankan perintah berikut untuk menambahkan kebijakan yang mengizinkan port 80 menggunakan negosiasi SMC:

    sudo smc-ebpf policy config --port 80 --mode enable

    Jalankan perintah berikut untuk memeriksa apakah kebijakan port telah ditambahkan:

    sudo smc-ebpf policy dump

    Keluaran perintah contoh:

    • "key": 80 menunjukkan bahwa kebijakan menargetkan port 80.

    • "mode": menunjukkan apakah penggunaan negosiasi SMC diizinkan. Nilai 2 menunjukkan bahwa penggunaan negosiasi SMC diizinkan, dan nilai 0 menunjukkan bahwa penggunaan negosiasi SMC dilarang.

    # sudo smc-ebpf policy dump
    [{
            "key": 80,
            "value": {
                "mode": 2,
                [Bidang lain yang tidak perlu diperhatikan oleh pengguna biasa]
            }
        }
    ]

    Jika Anda tidak lagi memerlukan kebijakan tersebut, jalankan perintah berikut untuk menghapus kebijakan untuk port 80:

    sudo smc-ebpf policy delete --port 80

    Jalankan perintah dump lagi. Keluaran perintah berikut menunjukkan bahwa kebijakan telah dihapus:

    # sudo smc-ebpf policy dump
    []
  • Contoh 2: Larang port 80 menggunakan negosiasi SMC, dan izinkan semua port lainnya menggunakan negosiasi SMC.

    Jalankan perintah berikut untuk mengubah perilaku default menjadi mengizinkan penggunaan negosiasi SMC saat tidak ada kebijakan port yang cocok dengan port target dan menambahkan kebijakan yang melarang port 80 menggunakan negosiasi SMC:

    sudo smc-ebpf policy config --port 0 --mode enable
    sudo smc-ebpf policy config --port 80 --mode disable

    Setelah perintah-perintah di atas dijalankan, hanya port 80 yang dilarang menggunakan negosiasi SMC, dan semua port lainnya diizinkan menggunakan negosiasi SMC saat tidak ada kebijakan port yang cocok dengan port-port tersebut.

Perilaku default kebijakan alamat IPv4

Berbeda dengan kebijakan port, kebijakan alamat IPv4 hanya berlaku untuk socket klien dan digunakan untuk mengontrol apakah klien menggunakan negosiasi SMC saat terhubung ke server berdasarkan alamat IPv4 server.

Catatan

Semua kebijakan port dan alamat IPv4 yang dikonfigurasi dievaluasi menggunakan logika AND. Negosiasi SMC hanya digunakan jika semua kebijakan yang cocok dengan koneksi mengizinkan penggunaan negosiasi SMC. Jika ada kebijakan yang cocok melarang penggunaan negosiasi SMC, negosiasi SMC tidak digunakan.

Setelah alat smc-ebpf dimuat, jika tidak ada kebijakan alamat IPv4 yang cocok dengan alamat IP server target, klien diizinkan menggunakan negosiasi SMC untuk alamat IP server target.

Contoh:

  • Jika alat smc-ebpf dimuat tanpa kebijakan alamat IPv4 yang dikonfigurasi, socket klien diizinkan menggunakan negosiasi SMC saat terhubung ke semua alamat IP server.

  • Setelah alat smc-ebpf dimuat, alat tersebut mengonfigurasi hanya satu kebijakan yang melarang penggunaan negosiasi SMC untuk akses ke 192.168.1.0/24. Dalam hal ini, tidak ada kebijakan yang cocok dengan 192.168.3.11, dan negosiasi SMC diizinkan saat 192.168.3.11 diakses.

Secara spesifik, Anda dapat menjalankan perintah berikut untuk mengatur --mode ke disable untuk 0.0.0.0/32 guna mengubah perilaku default menjadi melarang penggunaan negosiasi SMC saat tidak ada kebijakan alamat IPv4 yang cocok dengan alamat IP server:

sudo smc-ebpf policy config --ip 0.0.0.0 --mask 32 --mode disable

Demikian pula, Anda dapat menjalankan perintah berikut untuk mengatur --mode ke enable untuk 0.0.0.0/32 guna mengembalikan perilaku default menjadi mengizinkan penggunaan negosiasi SMC saat tidak ada kebijakan alamat IPv4 yang cocok dengan alamat IP server:

sudo smc-ebpf policy config --ip 0.0.0.0 --mask 32 --mode enable

Konfigurasikan kebijakan alamat IPv4

Anda dapat mengonfigurasi kebijakan alamat IPv4 berdasarkan perilaku default untuk mengontrol apakah klien menggunakan negosiasi SMC saat terhubung ke alamat IP server tertentu.

Catatan

Kebijakan alamat IPv4 yang dikonfigurasi hanya mengontrol apakah klien menggunakan negosiasi SMC saat socket klien terhubung ke alamat IPv4 server. Apakah socket server menggunakan negosiasi SMC tidak dipengaruhi oleh kebijakan alamat IPv4.

Contoh:

  • Contoh 1: Izinkan klien menggunakan negosiasi SMC hanya saat terhubung ke 192.168.2.0/24, dan larang klien menggunakan negosiasi SMC saat mengakses alamat IP server lainnya.

    Jalankan perintah berikut untuk mengatur --mode ke disable untuk 0.0.0.0/32 guna mengubah perilaku default menjadi melarang penggunaan negosiasi SMC saat tidak ada kebijakan alamat IPv4 yang cocok dengan alamat IP server, serta menambahkan kebijakan yang mengizinkan penggunaan negosiasi SMC untuk alamat IP server dalam 192.168.2.0/24:

    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

    Jalankan perintah berikut untuk melihat pengaturan kebijakan IPv4:

    sudo smc-ebpf policy dump

    Keluaran perintah contoh:

    • key: menunjukkan alamat IPv4 yang ditargetkan oleh kebijakan.

    • value: menunjukkan apakah penggunaan negosiasi SMC diizinkan. Nilai pass menunjukkan bahwa penggunaan negosiasi SMC diizinkan, dan nilai denied menunjukkan bahwa penggunaan negosiasi SMC dilarang.

    # sudo smc-ebpf policy dump
    key:     0.0.0.0/32           value:   "denied"
    key:     192.168.2.0/24       value:   "pass"

    Jika Anda tidak lagi memerlukan kebijakan alamat IPv4 di atas, jalankan perintah berikut untuk menghapus kebijakan untuk 0.0.0.0/32 dan 192.168.2.0/24:

    sudo smc-ebpf policy delete --ip 192.168.2.0 --mask 24
    sudo smc-ebpf policy delete --ip 0.0.0.0 --mask 32
  • Contoh 2: Larang klien menggunakan negosiasi SMC hanya saat terhubung ke 192.168.2.0/24, dan izinkan klien menggunakan negosiasi SMC saat mengakses alamat IP server lainnya.

    Jalankan perintah berikut untuk menambahkan kebijakan yang melarang penggunaan negosiasi SMC untuk alamat IP server dalam 192.168.2.0/24:

    sudo smc-ebpf policy config --ip 192.168.2.0 --mask 24 --mode disable

    Tidak diperlukan operasi tambahan karena setelah alat smc-ebpf dimuat, jika tidak ada kebijakan alamat IPv4 yang cocok dengan alamat IP server target, klien diizinkan menggunakan negosiasi SMC untuk alamat IP server target. Penggunaan negosiasi SMC diizinkan untuk alamat IP server selain 192.168.2.0/24.

Kebijakan yang jelas

Jalankan perintah berikut untuk menghapus semua kebijakan yang telah dikonfigurasi:

sudo smc-ebpf policy clear

Setelah menjalankan perintah di atas, semua kebijakan yang telah dikonfigurasi akan dihapus, dan perilaku default dipulihkan menjadi melarang negosiasi SMC. Dalam hal ini, penggunaan negosiasi SMC dilarang untuk semua port dan diizinkan untuk semua alamat IPv4. Kebijakan port dan kebijakan alamat IPv4 dievaluasi menggunakan logika AND. Akibatnya, semua koneksi dilarang menggunakan negosiasi SMC.

Gunakan SMC di Alibaba Cloud ACK

Dalam Alibaba Cloud Container Service for Kubernetes (ACK), Anda dapat mengaktifkan SMC dengan menggunakan komponen ACK eRDMA Controller. eRDMA Controller digunakan untuk mengelola dan menjadwalkan ERIs serta menyediakan kemampuan jaringan untuk pod. Untuk informasi lebih lanjut, lihat Skenario 2: Gunakan SMC-R untuk Mempercepat Jaringan Aplikasi.

Catatan

Mirip dengan menggunakan SMC pada Alibaba Cloud ECS, saat Anda menggunakan SMC pada Alibaba Cloud ACK, Anda juga dapat mengonfigurasi kebijakan berbasis BPF yang lebih halus untuk mengaktifkan SMC pada node.

Parameter

Tumpukan SMC menyediakan berbagai antarmuka konfigurasi menggunakan sysfs dan alat mode pengguna, seperti smc-tools. Berikut ini menjelaskan fitur yang dapat dikonfigurasi dari SMC.

Konfigurasikan parameter berikut menggunakan sysfs

Parameter Kernel

Deskripsi

Versi Kernel yang Didukung

Rekomendasi Konfigurasi

net.smc.autocorking_size

SMC-R menyediakan fitur autocork, yang mirip dengan autocork TCP. Fitur autocork menggabungkan beberapa paket kecil menjadi paket yang lebih besar untuk transmisi dalam satu operasi Kirim. Ini meningkatkan throughput dalam skenario paket kecil tanpa memengaruhi latensi ping-pong.

Parameter net.smc.autocorking_size menentukan batas atas ukuran paket yang digabungkan.

Nilai default: 65535.

Nilai valid: 0 hingga 4294967295. Nilai 0 menunjukkan bahwa fitur dinonaktifkan.

Versi kernel: 5.10.112-11 dan lebih baru.

Dalam skenario paket kecil yang memerlukan bandwidth, Anda dapat mengatur parameter ini ke nilai yang sesuai untuk mencapai efek bandwidth terbaik.

Dalam skenario transmisi pipeline di mana latensi sangat penting, Anda dapat mengatur konfigurasi ini ke 0 untuk mencegah autocork menyebabkan penundaan dalam pemrosesan pipeline.

net.smc.autosplit_size

SMC menyediakan fitur autosplit, yang membagi paket besar menjadi beberapa paket kecil untuk transmisi batch guna meningkatkan latensi. Saat ukuran paket melebihi 1,3 kali nilai parameter net.smc.autosplit_size, paket tersebut dibagi.

Nilai default: 131072.

Nilai valid: 32768 hingga 536870912.

Versi kernel:

  • 5.10.134-18 dan lebih baru.

  • 5.10.134-17.3 dan lebih baru dalam seri 17.

  • 5.10.134-16.5 dan lebih baru dalam seri 16.

Dalam skenario paket besar di mana latensi penting, Anda dapat menyesuaikan parameter ini secara tepat untuk mencapai efek latensi terbaik.

net.smc.experiment_vendor_options

Opsi fitur eksperimental Alibaba Cloud.

Nilai default: 4294967295 (0xFFFFFFFF).

Versi kernel: 5.10.134-16 dan lebih baru.

Kami merekomendasikan agar Anda mempertahankan nilai default.

net.smc.global_mem

Ambang batas penggunaan memori tingkat sistem untuk SMC. Saat ukuran buffer transmisi dan penerimaan yang dikelola oleh tumpukan SMC lebih besar atau sama dengan nilai global_mem[2], semua koneksi SMC baru akan kembali ke TCP.

Nilai default: [25% dari memori tingkat sistem, 50% dari memori tingkat sistem, 75% dari memori tingkat sistem].

Versi kernel:

  • 5.10.134-18 dan lebih baru.

  • 5.10.134-17.3 dan lebih baru dalam seri 17.

  • 5.10.134-16.5 dan lebih baru dalam seri 16.

Anda dapat mengonfigurasi global_mem[2] berdasarkan level memori yang diharapkan.

net.smc.limit_smc_hs

Mengontrol apakah akan kembali ke TCP dalam kasus tekanan koneksi tinggi.

Nilai default: 1.

Nilai valid:

  • 0: tidak kembali ke TCP.

  • 1: kembali ke TCP.

Versi kernel:

  • 5.10.134-18 dan lebih baru.

  • 5.10.134-17.3 dan lebih baru dalam seri 17.

  • 5.10.134-16.5 dan lebih baru dalam seri 16.

Kami merekomendasikan agar Anda mengatur parameter ini ke 1.

Dalam skenario di mana Anda tidak ingin tumpukan SMC kembali berdasarkan tekanan koneksi, Anda dapat mengatur parameter ini ke 0.

net.smc.mem

Ambang batas penggunaan memori untuk SMC dalam namespace jaringan saat ini. Saat ukuran buffer transmisi dan penerimaan yang digunakan oleh semua koneksi SMC dalam namespace jaringan lebih besar atau sama dengan nilai mem[2], semua koneksi SMC baru dalam namespace jaringan akan kembali ke TCP.

Nilai default: [25% dari memori tingkat sistem, 50% dari memori tingkat sistem, 75% dari memori tingkat sistem].

Versi kernel:

  • 5.10.134-18 dan lebih baru.

  • 5.10.134-17.3 dan lebih baru dalam seri 17.

  • 5.10.134-16.5 dan lebih baru dalam seri 16.

Anda dapat mengonfigurasi mem[2] berdasarkan level memori yang diharapkan.

net.smc.rmem

Ukuran buffer penerimaan default untuk socket SMC. Jika setsockopt() tidak digunakan untuk mengatur ukuran buffer penerimaan (SO_RCVBUF), nilai parameter ini digunakan.

Nilai default: 262144.

Nilai valid:

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

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

Versi kernel: 5.10.134-14 dan lebih baru.

  • Saat proporsi metrik Rx/Buffer full di ujung lokal tinggi, kami merekomendasikan agar Anda menaikkan ukuran buffer penerimaan lokal secara tepat.

  • Saat proporsi metrik Tx/Buffer full(remote) dan Tx/Buffer too small(remote) di ujung lokal tinggi, kami merekomendasikan agar Anda menaikkan ukuran buffer penerimaan di ujung peer.

  • Saat sumber daya memori terbatas dan mengurangi ukuran buffer tidak memengaruhi kinerja jaringan, Anda dapat mengurangi ukuran buffer secara tepat.

Untuk informasi lebih lanjut, lihat Pemantauan SMC.

net.smc.wmem

Ukuran buffer transmisi default untuk socket SMC. Jika setsockopt() tidak digunakan untuk mengatur ukuran buffer transmisi (SO_SNDBUF), nilai parameter ini digunakan.

Nilai default: 262144.

Nilai valid:

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

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

Versi kernel: 5.10.134-14 dan lebih baru.

  • Saat proporsi metrik Tx/Buffer full dan Tx/Buffer too small di ujung lokal tinggi, kami merekomendasikan agar Anda menaikkan ukuran buffer transmisi lokal secara tepat.

  • Saat sumber daya memori terbatas dan mengurangi ukuran buffer tidak memengaruhi kinerja jaringan, Anda dapat mengurangi ukuran buffer secara tepat.

Untuk informasi lebih lanjut, lihat Pemantauan SMC.

net.smc.smcr_buf_type

Jenis memori untuk buffer transmisi dan penerimaan SMC-R. Penggunaan memori fisik yang berdekatan memberikan kinerja lebih baik, namun memori jenis ini sulit diperoleh dan dapat menghasilkan buffer yang lebih kecil dari yang diharapkan. Sebaliknya, memori virtual yang berdekatan lebih mudah diperoleh, tetapi memiliki kinerja sedikit lebih rendah.

Setelah nilai parameter ini diubah, pengaturan baru akan berlaku untuk koneksi SMC pada grup link baru, sementara grup link yang sudah ada tidak terpengaruh.

Nilai default: 2.

Nilai valid:

  • 0: menggunakan memori fisik yang berdekatan.

  • 1: menggunakan memori virtual yang berdekatan.

  • 2: lebih memilih menggunakan memori fisik yang berdekatan. Jika memori fisik yang berdekatan tidak tersedia, gunakan memori virtual yang berdekatan.

Versi kernel: 5.10.134-12 atau yang lebih baru.

Disarankan untuk mempertahankan nilai default.

net.smc.smcr_max_conns_per_lgr

Jumlah maksimum koneksi SMC dalam grup link SMC-R.

Nilai default: 32.

Nilai valid:

  • 1 hingga 255 (Versi kernel yang didukung: 5.10.134-18 dan lebih baru, 5.10.134-17.3 dan lebih baru dalam seri 17, 5.10.134-16.5 dan lebih baru dalam seri 16).

  • 16 hingga 255 (versi kernel lainnya).

Versi kernel: 5.10.134-16.1 dan lebih baru.

Ubah dengan hati-hati.

  • Untuk skenario throughput tinggi, Anda dapat mengurangi jumlah koneksi SMC per grup link untuk memastikan setiap koneksi SMC mendapatkan lebih banyak bandwidth RDMA.

  • Disarankan agar nilai ini tidak dinaikkan.

net.smc.smcr_max_links_per_lgr

Jumlah koneksi RDMA andal (RCs) (SMC Links) dalam grup link SMC-R.

Nilai default: 1.

Nilai valid: 1 dan 2.

Versi kernel: 5.10.134-16.1 dan lebih baru.

Disarankan untuk mempertahankan nilai default.

net.smc.smcr_testlink_time

Interval paket denyut jantung (dalam detik) untuk koneksi RDMA RC (SMC Links) dalam SMC-R. Saat tidak ada data yang ditransmisikan melalui SMC Link, 16 byte data dikirim setiap smcr_testlink_time detik untuk memastikan ketersediaan link.

Nilai default: 30.

Nilai valid: 0 hingga 2.147.483.647. Nilai 0 menonaktifkan pemeriksaan denyut jantung.

Versi kernel: 5.10.134-13 dan lebih baru.

Disarankan untuk mempertahankan nilai default.

net.smc.tcp2smc

Mengontrol apakah akan mengaktifkan konversi transparan dari TCP ke SMC dalam namespace jaringan saat ini. Setelah konversi transparan dari TCP ke SMC diaktifkan, socket TCP baru dalam namespace jaringan dicegat di kernel dan dikonversi menjadi socket SMC untuk berjalan pada tumpukan SMC setelah parameter family dan protocol diganti.

Nilai default: 0.

Nilai valid:

  • 0: menonaktifkan konversi transparan dari TCP ke SMC dalam namespace jaringan saat ini.

  • 1: mengaktifkan konversi transparan dari TCP ke SMC dalam namespace jaringan saat ini.

Versi kernel: 5.10.134-16 dan lebih baru.

  • Atur parameter ini ke 1 untuk mengaktifkan konversi transparan dari TCP ke SMC dalam namespace jaringan.

  • Atur parameter ini ke 0 untuk menonaktifkan konversi transparan dari TCP ke SMC dalam namespace jaringan.

Konfigurasikan EID

Enterprise ID (EID) adalah konsep yang diperkenalkan dalam protokol SMCv2. Hanya sistem yang dikonfigurasi dengan EID yang sama yang dapat berkomunikasi menggunakan SMCv2. Jika tidak, mereka akan kembali ke TCP. Sebuah sistem dapat dikonfigurasi dengan hingga delapan EID.

Dalam Alibaba Cloud Linux 3, perangkat eRDMA dapat digunakan hanya dengan protokol SMCv2. Alibaba Cloud Linux 3 awalnya dikonfigurasi dengan EID SMCV2-DEFAULT-UEID. Oleh karena itu, semua node Alibaba Cloud Linux 3 dalam keadaan awal dapat berkomunikasi dengan perangkat eRDMA menggunakan SMCv2 tanpa konfigurasi manual tambahan.

Jika Anda ingin mengontrol ruang lingkup komunikasi dengan memodifikasi EID dalam kasus khusus, lakukan langkah-langkah berikut:

  1. Lihat EID yang ada.

    smcr ueid show
  2. Tambahkan EID baru.

    Sebuah EID dapat memiliki panjang hingga 32 karakter dan berisi huruf kapital, digit, tanda hubung (-), dan titik (.). Sebuah EID harus dimulai dengan huruf atau digit dan tidak boleh mengandung titik (.) berturut-turut.

    sudo smcr ueid add <EID>
  3. Hapus EID yang ada.

    sudo smcr ueid del <EID>

Studi kasus: Gunakan EID untuk mencegah komunikasi SMC-R lintas zona

Untuk lebih memanfaatkan SMC-R untuk akselerasi kinerja, kami merekomendasikan agar Anda menggunakan SMC-R dalam zona yang sama dan komunikasi TCP lintas zona. Dengan menambahkan ID zona sebagai EID, Anda dapat mengimplementasikan SMC-R dalam zona yang sama dan fallback otomatis ke TCP lintas zona.

  • Metode 1: Konfigurasikan EID Langkah demi Langkah

    1. Jalankan perintah berikut untuk mendapatkan ID zona dari metadata instance Alibaba Cloud ECS Instance Metadata:

      ZONE_ID=$(curl -s -m 1 100.100.100.200/latest/meta-data/zone-id | tr "[:lower:]" "[:upper:]")
    2. Jalankan perintah berikut untuk menambahkan ID zona sebagai EID:

      sudo smcr ueid add $ZONE_ID
    3. Jalankan perintah berikut untuk menghapus nilai SMCV2-DEFAULT-UEID:

      smcr ueid | grep SMCV2-DEFAULT-UEID > /dev/null && sudo smcr ueid del SMCV2-DEFAULT-UEID
  • Metode 2: Gunakan Layanan aliyunsmc-ueid dari Alat aliyun-smc-extensions untuk Mengonfigurasi EID dengan Satu Klik

    1. Jalankan perintah berikut untuk memulai layanan aliyunsmc-ueid. Layanan ini secara otomatis menambahkan ID zona sebagai EID dan menghapus EID default.

      sudo systemctl start aliyunsmc-ueid
    2. (Opsional) Jalankan perintah berikut untuk mengonfigurasi layanan aliyunsmc-ueid agar mulai secara otomatis saat boot. Ini karena konfigurasi EID tidak persisten dan akan dikembalikan ke keadaan default saat sistem operasi di-restart.

      sudo systemctl enable aliyunsmc-ueid

Konfigurasikan pengenal jaringan fisik (PNET ID)

Dalam komunikasi TCP, lalu lintas jaringan masuk dan keluar melalui antarmuka Ethernet. Saat komunikasi TCP dikonversi secara transparan menjadi komunikasi SMC-R, tumpukan SMC-R menggunakan ERIs yang terkait dengan antarmuka Ethernet.

Asosiasi ini memiliki dua bentuk berikut:

  • Setelah Anda mendapatkan ERI dengan mengaktifkan eRDMA pada antarmuka Ethernet target, tumpukan SMC-R secara otomatis mengasosiasikan antarmuka Ethernet dengan ERI.

    Dalam hal ini, tumpukan SMC-R dapat secara otomatis mengidentifikasi dan menggunakan ERI yang terkait dengan antarmuka Ethernet tanpa operasi tambahan.

  • Setelah Anda mendapatkan ERI dengan mengaktifkan eRDMA pada antarmuka Ethernet lainnya, Anda harus menggunakan PNET ID untuk mengasosiasikan ERI dengan antarmuka Ethernet.

    Contoh:

    Sebuah node memiliki antarmuka Ethernet bernama eth0 dan eth1, dan eth0 telah mengaktifkan eRDMA dan diasosiasikan dengan ERI bernama erdma_0.

    Jika lalu lintas TCP dikirim dan diterima melalui eth0 dan terjadi konversi transparan dari TCP ke SMC, tumpukan SMC-R dapat secara otomatis mendeteksi ERI terkait erdma_0 dan menggunakan jaringan RDMA untuk komunikasi. Ini adalah kasus pertama asosiasi otomatis yang disebutkan di atas.

    Jika lalu lintas TCP dikirim dan diterima melalui eth1 dan terjadi konversi transparan dari TCP ke SMC, tumpukan SMC-R tidak dapat secara otomatis mendeteksi ERI erdma_0 dan kembali ke TCP. Dalam hal ini, Anda dapat menggunakan PNET ID yang sama untuk mengasosiasikan eth1 dengan erdma_0 untuk memberi tahu SMC-R bahwa ia dapat menggunakan erdma_0 untuk membawa lalu lintas eth1.

    Untuk mengasosiasikan antarmuka Ethernet dan ERI menggunakan PNET ID, lakukan langkah-langkah berikut:

    • Konfigurasikan PNET ID yang sama untuk antarmuka Ethernet dan ERI.

      • Jalankan perintah berikut untuk mengonfigurasi PNET ID untuk antarmuka Ethernet:

        sudo smc_pnet -a <PNET ID> -I <eth_interface>
      • Jalankan perintah berikut untuk mengonfigurasi PNET ID yang sama untuk ERI:

        sudo smc_pnet -a <PNET ID> -D <rdma_interface>

      PNET ID dapat memiliki panjang hingga 16 karakter dan berisi huruf kapital dan digit. Spasi tidak diperbolehkan.

    • Jalankan perintah berikut untuk melihat PNET ID:

      # sudo smc_pnet

      Keluaran perintah contoh:

      # sudo smc_pnet
      00163E0CD751 n/a erdma_0 1
      00163E0CD751 eth1 n/a 255

      Dalam contoh di atas, PNET ID 00163E0CD751 dilampirkan ke erdma_0 dan eth1. Dengan cara ini, tumpukan TCP yang awalnya mengirim dan menerima data melalui eth1 dapat mengirim dan menerima data melalui erdma_0 setelah SMC-R diaktifkan.

Studi kasus: Gunakan PNET ID untuk mengasosiasikan antarmuka Ethernet pod dengan ERI host

Dalam skenario kontainer yang dibangun sendiri di mana beberapa pod berbagi satu atau lebih ERI pada host, Anda dapat menetapkan PNET ID yang sama untuk antarmuka Ethernet virtual (vEth) pod dan ERI host. Dengan cara ini, setelah SMC-R diaktifkan dalam kontainer, tumpukan protokol kernel dapat dengan benar mendeteksi ERI host dan menggunakan jaringan RDMA untuk mempercepat lalu lintas jaringan pada vEth dalam kontainer.

Lakukan langkah-langkah berikut:

  1. Konfigurasikan PNET ID untuk vEth, seperti eth0, dalam namespace jaringan kontainer.

    sudo ip netns exec <pod netns> smc_pnet -a <PNET ID> -I eth0
  2. Konfigurasikan PNET ID untuk ERI, seperti erdma_0, dalam namespace jaringan host.

    sudo smc_pnet -a <PNET ID> -D erdma_0

Studi kasus: Gunakan SMC dalam skenario di mana ECS digunakan dengan Redis

  1. Buat dua instance ECS, satu sebagai klien Redis dan yang lainnya sebagai server Redis. Untuk informasi tentang cara membuat instance ECS, lihat Buat Instance pada Tab Peluncuran Kustom.

  2. Jalankan perintah berikut untuk memuat modul kernel smc dan smc_diag:

    sudo modprobe smc
    sudo modprobe smc_diag
  3. Jalankan perintah berikut untuk menginstal Redis pada instance ECS:

    sudo yum install redis -y
  4. Jalankan perintah berikut pada instance ECS untuk menggunakan EID guna mencegah komunikasi SMC-R lintas zona:

    sudo systemctl start aliyunsmc-ueid
  5. Pada instance ECS, konfigurasikan kebijakan BPF berbasis port yang mengizinkan koneksi menggunakan negosiasi SMC hanya jika koneksi tersebut terkait dengan alamat IP server dari blok CIDR vSwitch yang terhubung dan port server 6379.

    1. Muat alat smc-ebpf.

      sudo smc-ebpf policy load
    2. Tambahkan kebijakan port yang hanya mengizinkan port 6379 menggunakan negosiasi SMC.

      sudo smc-ebpf policy config --port 6379 --mode enable
    3. Tambahkan kebijakan alamat IPv4 yang mengizinkan penggunaan negosiasi SMC untuk alamat IP server dalam blok CIDR vSwitch yang terhubung ke server Redis.

      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}') --enable;
  6. Jalankan perintah berikut pada instance ECS untuk mengaktifkan konversi socket transparan dalam namespace jaringan saat ini:

    sudo sysctl -w net.smc.tcp2smc=1
  7. Jalankan perintah berikut pada server Redis untuk memulai layanan Redis.

    Ganti <IP> dengan alamat IP pribadi dari antarmuka jaringan elastis utama (ENI) yang terikat ke server Redis.

    redis-server --bind <IP> --port 6379 --protected-mode no --save
  8. Sambungkan ke atau uji server Redis pada klien Redis.

    • Jalankan perintah berikut untuk menyambung ke server Redis:

      redis-cli -h <IP> -p 6379
    • Jalankan perintah berikut untuk melakukan uji stres menggunakan redis-benchmark:

      redis-benchmark -h <IP> -p 6379 -n 1000000 -t set -c 100