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
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.
PentingPerangkat 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 alamatIPv4-mapped IPv6.
Jalankan perintah berikut untuk memuat modul kernel
smcdansmc_diag:sudo modprobe smc sudo modprobe smc_diagJalankan perintah
dmesguntuk 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 smcJalankan perintah berikut untuk menginstal alat O&M
smc-toolsdanaliyun-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
familyadalah AF_INET.Nilai
typeadalah SOCK_STREAM.Nilai
protocoladalah IPPROTO_IP(0) atau IPPROTO_TCP(6).
Gambar berikut menunjukkan proses konversi.
Untuk melakukan konversi socket transparan level namespace jaringan, lakukan langkah-langkah berikut:
Jalankan perintah berikut untuk mengatur
net.smc.tcp2smcke 1 untuk mengaktifkan konversi socket transparan untuknamespace jaringansaat ini.Setelah konversi socket transparan diaktifkan untuk
namespace jaringan, socket TCP baru selanjutnya dalamnamespace jaringandikonversi menjadi socket SMC, sedangkan socket TCP yang ada tidak terpengaruh.sudo sysctl net.smc.tcp2smc=1Secara default,
sysctl net.smc.tcp2smcdisetel ke 0, yang menunjukkan bahwa konversi socket transparan dinonaktifkan.Jalankan perintah berikut untuk menjalankan aplikasi socket TCP dalam
namespace jaringansaat ini.Dalam perintah berikut, ganti
foodengan nama aplikasi sebenarnya:./<foo>Socket TCP yang dibuat oleh aplikasi
foosecara 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.(Opsional) Jalankan perintah berikut untuk menonaktifkan konversi socket transparan untuk
namespace jaringansaat ini. Setelah konversi socket transparan dinonaktifkan untuknamespace jaringan, socket TCP baru selanjutnya dalamnamespace jaringantidak 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
familyadalah AF_INET.Nilai
typeadalah SOCK_STREAM.Nilai
protocoladalah IPPROTO_IP(0) atau IPPROTO_TCP(6).
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:
Konfigurasikan dan aktifkan kebijakan BPF untuk menyiapkan kontrol negosiasi SMC yang lebih halus.
Aktifkan SMC pada level
namespace jaringanatau 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 helpKeluaran 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 24Memuat alat smc-ebpf
Jalankan perintah berikut untuk memuat alat smc-ebpf:
sudo smc-ebpf policy loadAlat
smc-ebpfharus dimuat sebelum koneksi yang akan dikonfigurasi dibuat. Alatsmc-ebpftidak berlaku untuk koneksi yang dibuat sebelum dimuat.Kebijakan yang dikonfigurasi oleh alat
smc-ebpfadalah kebijakan global dan tidak dapat dikonfigurasi secara independen untuk namespace jaringan tertentu (kontainer).Fitur terkait alat
smc-ebpfmasih 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-ebpftelah dimuat:# sudo smc-ebpf policy load Registered smc_sock_negotiator_ops anolis_smc id xxxKeluaran 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-016atau lebih baru. Anda dapat melihat versi kernel dengan menggunakan perintahuname -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-ebpfdimuat tanpa kebijakan port yang dikonfigurasi, semua port dilarang menggunakan negosiasi SMC.Jika alat
smc-ebpfdimuat 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 enableDemikian 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 disableKonfigurasikan 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 enableJalankan perintah berikut untuk memeriksa apakah kebijakan port telah ditambahkan:
sudo smc-ebpf policy dumpKeluaran perintah contoh:
"key": 80menunjukkan bahwa kebijakan menargetkan port 80."mode":menunjukkan apakah penggunaan negosiasi SMC diizinkan. Nilai2menunjukkan bahwa penggunaan negosiasi SMC diizinkan, dan nilai0menunjukkan 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 80Jalankan perintah
dumplagi. 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 disableSetelah 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.
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-ebpfdimuat tanpa kebijakan alamat IPv4 yang dikonfigurasi, socket klien diizinkan menggunakan negosiasi SMC saat terhubung ke semua alamat IP server.Setelah alat
smc-ebpfdimuat, alat tersebut mengonfigurasi hanya satu kebijakan yang melarang penggunaan negosiasi SMC untuk akses ke192.168.1.0/24. Dalam hal ini, tidak ada kebijakan yang cocok dengan192.168.3.11, dan negosiasi SMC diizinkan saat192.168.3.11diakses.
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 disableDemikian 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 enableKonfigurasikan 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.
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
disableuntuk0.0.0.0/32guna 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 enableJalankan perintah berikut untuk melihat pengaturan kebijakan IPv4:
sudo smc-ebpf policy dumpKeluaran perintah contoh:
key: menunjukkan alamat IPv4 yang ditargetkan oleh kebijakan.value: menunjukkan apakah penggunaan negosiasi SMC diizinkan. Nilaipassmenunjukkan bahwa penggunaan negosiasi SMC diizinkan, dan nilaideniedmenunjukkan 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/32dan192.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 32Contoh 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 disableTidak diperlukan operasi tambahan karena setelah alat
smc-ebpfdimuat, 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 selain192.168.2.0/24.
Kebijakan yang jelas
Jalankan perintah berikut untuk menghapus semua kebijakan yang telah dikonfigurasi:
sudo smc-ebpf policy clearSetelah 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.
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: | 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 |
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:
| 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: | 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 Nilai default: [25% dari memori tingkat sistem, 50% dari memori tingkat sistem, 75% dari memori tingkat sistem]. | Versi kernel:
| Anda dapat mengonfigurasi |
net.smc.limit_smc_hs | Mengontrol apakah akan kembali ke TCP dalam kasus tekanan koneksi tinggi. Nilai default: 1. Nilai valid:
| Versi kernel:
| 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 Nilai default: [25% dari memori tingkat sistem, 50% dari memori tingkat sistem, 75% dari memori tingkat sistem]. | Versi kernel:
| Anda dapat mengonfigurasi |
net.smc.rmem | Ukuran buffer penerimaan default untuk socket SMC. Jika Nilai default: 262144. Nilai valid:
| Versi kernel: |
Untuk informasi lebih lanjut, lihat Pemantauan SMC. |
net.smc.wmem | Ukuran buffer transmisi default untuk socket SMC. Jika Nilai default: 262144. Nilai valid:
| Versi kernel: |
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:
| Versi kernel: | 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:
| Versi kernel: | Ubah dengan hati-hati.
|
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: | 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 Nilai default: 30. Nilai valid: 0 hingga 2.147.483.647. Nilai 0 menonaktifkan pemeriksaan denyut jantung. | Versi kernel: | Disarankan untuk mempertahankan nilai default. |
net.smc.tcp2smc | Mengontrol apakah akan mengaktifkan konversi transparan dari TCP ke SMC dalam Nilai default: 0. Nilai valid:
| Versi kernel: |
|
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:
Lihat EID yang ada.
smcr ueid showTambahkan EID baru.
Sebuah
EIDdapat memiliki panjang hingga 32 karakter dan berisi huruf kapital, digit, tanda hubung (-), dan titik (.). SebuahEIDharus dimulai dengan huruf atau digit dan tidak boleh mengandung titik (.) berturut-turut.sudo smcr ueid add <EID>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
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:]")Jalankan perintah berikut untuk menambahkan ID zona sebagai EID:
sudo smcr ueid add $ZONE_IDJalankan 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-ueiddari Alataliyun-smc-extensionsuntuk Mengonfigurasi EID dengan Satu KlikJalankan 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(Opsional) Jalankan perintah berikut untuk mengonfigurasi layanan
aliyunsmc-ueidagar 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.
Untuk memeriksa apakah eRDMA diaktifkan pada antarmuka Ethernet, lihat Lihat ERIs.
Untuk mengaktifkan eRDMA saat membuat antarmuka Ethernet, lihat Buat ERI.
Untuk mengaktifkan eRDMA pada antarmuka Ethernet yang ada, lihat Ubah Status Fitur ERI untuk ENI yang Ada.
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
eth0daneth1, daneth0telah mengaktifkan eRDMA dan diasosiasikan dengan ERI bernamaerdma_0.Jika lalu lintas TCP dikirim dan diterima melalui
eth0dan terjadi konversi transparan dari TCP ke SMC, tumpukan SMC-R dapat secara otomatis mendeteksi ERI terkaiterdma_0dan menggunakan jaringan RDMA untuk komunikasi. Ini adalah kasus pertama asosiasi otomatis yang disebutkan di atas.Jika lalu lintas TCP dikirim dan diterima melalui
eth1dan terjadi konversi transparan dari TCP ke SMC, tumpukan SMC-R tidak dapat secara otomatis mendeteksi ERIerdma_0dan kembali ke TCP. Dalam hal ini, Anda dapat menggunakan PNET ID yang sama untuk mengasosiasikaneth1denganerdma_0untuk memberi tahu SMC-R bahwa ia dapat menggunakanerdma_0untuk membawa lalu lintaseth1.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_pnetKeluaran perintah contoh:
# sudo smc_pnet 00163E0CD751 n/a erdma_0 1 00163E0CD751 eth1 n/a 255Dalam contoh di atas, PNET ID 00163E0CD751 dilampirkan ke
erdma_0daneth1. Dengan cara ini, tumpukan TCP yang awalnya mengirim dan menerima data melaluieth1dapat mengirim dan menerima data melaluierdma_0setelah 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:
Konfigurasikan PNET ID untuk vEth, seperti
eth0, dalamnamespace jaringankontainer.sudo ip netns exec <pod netns> smc_pnet -a <PNET ID> -I eth0Konfigurasikan PNET ID untuk ERI, seperti
erdma_0, dalamnamespace jaringanhost.sudo smc_pnet -a <PNET ID> -D erdma_0
Studi kasus: Gunakan SMC dalam skenario di mana ECS digunakan dengan Redis
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.
Jalankan perintah berikut untuk memuat modul kernel
smcdansmc_diag:sudo modprobe smc sudo modprobe smc_diagJalankan perintah berikut untuk menginstal Redis pada instance ECS:
sudo yum install redis -yJalankan perintah berikut pada instance ECS untuk menggunakan EID guna mencegah komunikasi SMC-R lintas zona:
sudo systemctl start aliyunsmc-ueidPada 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
vSwitchyang terhubung dan port server6379.Muat alat
smc-ebpf.sudo smc-ebpf policy loadTambahkan kebijakan port yang hanya mengizinkan port
6379menggunakan negosiasi SMC.sudo smc-ebpf policy config --port 6379 --mode enableTambahkan kebijakan alamat IPv4 yang mengizinkan penggunaan negosiasi SMC untuk alamat IP server dalam blok CIDR
vSwitchyang 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;
Jalankan perintah berikut pada instance ECS untuk mengaktifkan konversi socket transparan dalam
namespace jaringansaat ini:sudo sysctl -w net.smc.tcp2smc=1Jalankan 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 --saveSambungkan ke atau uji server Redis pada klien Redis.
Jalankan perintah berikut untuk menyambung ke server Redis:
redis-cli -h <IP> -p 6379Jalankan perintah berikut untuk melakukan uji stres menggunakan
redis-benchmark:redis-benchmark -h <IP> -p 6379 -n 1000000 -t set -c 100