Topik ini menjelaskan masalah-masalah yang mungkin terjadi dalam Komunikasi Memori Bersama (SMC) dan cara menyelesaikan masalah tersebut. Topik ini berlaku untuk Alibaba Cloud Linux 3.
SMC tidak memberikan peningkatan performa aplikasi dibandingkan TCP
Deskripsi masalah
Ketika menggunakan SMC sebagai pengganti TCP untuk mempercepat koneksi TCP suatu aplikasi, performa aplikasi tidak meningkat.
Penyebab dan solusi
Koneksi SMC yang dibuat untuk aplikasi jatuh kembali ke TCP. Dalam kasus ini, Anda tidak dapat menggunakan Remote Direct Memory Access (RDMA) untuk mempercepat komunikasi jaringan. Untuk informasi tentang cara mendiagnosis dan menyelesaikan masalah fallback, lihat bagian SMC jatuh kembali ke TCP dan RDMA tidak dapat digunakan untuk mempercepat komunikasi dalam topik ini.
Overhead komunikasi jaringan aplikasi hanya mencakup sebagian kecil dari overhead keseluruhan. Sebagai contoh, aplikasi bersifat intensif CPU dan sedikit bergantung pada komunikasi jaringan.
Dibandingkan dengan paket TCP, paket RDMA memerlukan ruang header tambahan untuk menampung informasi terkait RDMA. Mengingat bandwidth yang tersedia sama, bandwidth aktual yang dapat dicapai untuk transmisi paket RDMA sedikit lebih rendah daripada transmisi paket TCP. Untuk mengurangi masalah ini, gunakan fitur Jumbo Frames. Untuk informasi tentang fitur ini, lihat Jumbo Frames.
SMC tidak kompatibel dengan model komunikasi jaringan aplikasi. Contoh skenario:
Skema di mana koneksi singkat sering dibuat dan ditutup. Pembuatan koneksi SMC melibatkan operasi jalur lambat seperti pembuatan dan permintaan sumber daya RDMA. Untuk aplikasi yang sebagian besar menggunakan koneksi singkat, SMC tidak memberikan peningkatan performa dibandingkan TCP.
Skema di mana sumber daya terbatas. Sumber daya yang diperlukan untuk komunikasi SMC bergantung pada spesifikasi memori dan antarmuka eRDMA (ERI) dari Instance ECS. Jika sumber daya tidak cukup, SMC mungkin jatuh kembali ke TCP. Untuk informasi lebih lanjut, lihat Aktifkan dan konfigurasikan SMC.
Komunikasi gagal setelah SMC diaktifkan
Deskripsi masalah
Setelah mengaktifkan Shared Memory Communications over Remote Direct Memory Access (SMC-R) untuk Instance ECS yang menjalankan Alibaba Cloud Linux 3, alamat tertentu seperti alamat layanan Internet tertentu dapat diping tetapi tidak dapat diakses. Setelah menonaktifkan SMC-R, masalah teratasi.
Penyebab
Beberapa server tidak sepenuhnya sesuai dengan spesifikasi TCP. Ketika server memproses opsi TCP, server mungkin mereplay opsi TCP. Akibatnya, ujung lokal secara salah menganggap bahwa server peer yang tidak mendukung SMC mendukung SMC.
Implementasi TCP MUST (MUST-6) mengabaikan tanpa kesalahan opsi TCP apa pun yang tidak diimplementasikan, dengan asumsi bahwa opsi tersebut memiliki bidang panjang. Untuk informasi lebih lanjut, lihat RFC 9293.
Jika opsi TCP yang digunakan untuk menunjukkan dukungan SMC direplay, ujung lokal salah mengidentifikasi server peer sebagai mendukung SMC. Dalam hal ini, terjadi kesalahan jabat tangan. Akibatnya, permintaan seperti permintaan cURL gagal, tetapi ping melalui Protokol Pesan Kontrol Internet (ICMP) berhasil.
Anda dapat melakukan pemeriksaan tautan komunikasi untuk mendiagnosis masalah.
Solusi
Masalah replay opsi TCP terjadi secara tak terduga, dan tidak dapat diselesaikan karena opsi TCP direplay oleh node jaringan perantara atau peer. Kami sarankan Anda melakukan kontrol negosiasi SMC berdasarkan kebijakan BPF dan tidak menggunakan SMC untuk akses pada tautan bermasalah.
SMC gagal diaktifkan setelah perintah smc_run dijalankan
Deskripsi masalah
Setelah menjalankan perintah smc_run ./foo untuk mengaktifkan SMC pada aplikasi, Anda dapat menjalankan perintah smcr l untuk mengeksplorasi grup tautan SMC-R. Namun, keluaran perintah menunjukkan bahwa tidak ada grup tautan SMC-R yang dibuat. Selanjutnya, saat menjalankan perintah smcss -a untuk memeriksa soket SMC, hasilnya menunjukkan bahwa tidak ada koneksi SMC yang tersedia atau koneksi SMC jatuh kembali ke TCP di salah satu sisi. Untuk informasi lebih lanjut tentang perintah, lihat Aktifkan dan konfigurasikan SMC.
Penyebab
Perintah smc_run menggunakan mekanisme berikut untuk secara transparan mengaktifkan SMC: Pra-muat pustaka tautan dinamis dari smc-tools yang ditentukan dalam variabel LD_PRELOAD sebelum pustaka lain, lalu buat panggilan socket(2) dalam pustaka tautan dinamis yang dimuat sebelumnya untuk memodifikasi keluarga dan protokol soket. Jika aplikasi tidak dilink secara dinamis, Anda tidak dapat menjalankan perintah smc_run untuk secara transparan mengaktifkan SMC untuk aplikasi tersebut.
Solusi
Jalankan perintah sysctl net.smc.tcp2smc yang dijelaskan dalam Aktifkan dan konfigurasikan SMC untuk mengaktifkan SMC.
Port tertentu menjadi tidak dapat digunakan setelah SMC diaktifkan
Deskripsi masalah
Setelah SMC dimuat, 16 port dalam rentang port 65.500 hingga 65.515 menjadi tidak dapat digunakan. Setelah membuat panggilan bind(2) untuk port-port tersebut, EADDRINUSE dikembalikan.
Penyebab
SMC-R dan eRDMA digunakan bersama-sama. Modul SMC menggunakan port 65.500 hingga 65.515 dalam namespace jaringan tempat ERIs berada untuk membangun koneksi out-of-band (OOB). Anda dapat menjalankan perintah dmesg dan melihat informasi berikut dalam keluaran perintah:
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 pnetidJika modul SMC gagal menempati port, modul SMC tidak dapat menggunakan perangkat eRDMA.
Solusi
Lepaskan modul SMC untuk melepaskan port. Untuk informasi tentang cara melepaskan modul SMC, lihat bagian Gunakan SMC di Alibaba Cloud ECS dalam topik "Gunakan SMC".
SMC jatuh kembali ke TCP ketika alamat IPv6 digunakan
Deskripsi masalah
Setelah mengaktifkan SMC untuk aplikasi yang menggunakan alamat IPv6, keluaran perintah smcss menunjukkan bahwa SMC jatuh kembali ke TCP dengan kode penyebab 0x03030000 atau 0x0x09990000.
Penyebab
SMC jatuh kembali ke TCP karena perangkat eRDMA Alibaba Cloud dan SMC tidak mendukung alamat IPv6.
Solusi
Sebelum mengaktifkan SMC untuk koneksi baru, gunakan salah satu metode berikut:
Metode 1: Nonaktifkan alamat IPv6.
Jalankan perintah berikut untuk menonaktifkan alamat IPv6 untuk semua antarmuka jaringan:
sudo sysctl -w net.ipv6.conf.all.disable_ipv6=1 sysctl -w net.ipv6.conf.default.disable_ipv6=1Jalankan perintah berikut untuk menonaktifkan alamat IPv6 untuk antarmuka jaringan tertentu.
Ganti
<NetInName>dengan nama antarmuka jaringan.sudo sysctl -w net.ipv6.conf.<NetInName>.disable_ipv6=1
Metode 2: Gunakan alamat
IPv4-mapped IPv6untuk versi kernel5.10.134-17.3dan yang lebih baru.
Performa SMC lebih rendah daripada performa TCP dalam kondisi PPS ekstrem
Deskripsi masalah
Ketika beban jaringan mencapai laju maksimum paket per detik (PPS) yang ditentukan oleh jenis Instance ECS, aplikasi yang menggunakan SMC dengan eRDMA memiliki performa permintaan per detik (QPS) yang lebih rendah dibandingkan yang menggunakan TCP.
Traffic TCP: Jalankan perintah
sar -n DEV 1untuk memeriksa jumlah paket yang ditransmisikan per detik (rxpck/sdantxpck/s) pada antarmuka jaringan dan lihat apakah beban jaringan telah mencapai batas PPS.Traffic SMC eRDMA: Jalankan perintah
eadm stat -d <ibdev_name> -luntuk memeriksa jumlah paket yang ditransmisikan per detik pada antarmuka jaringan eRDMA dan lihat apakah beban jaringan telah mencapai batas PPS. Untuk informasi tentangeadm, lihat Gunakan eadm untuk mendiagnosis dan memecahkan masalah dalam eRDMA.
Penyebab
RDMA menghasilkan lebih banyak paket jaringan untuk jumlah permintaan jaringan yang sama dibandingkan TCP. Akibatnya, batas PPS dari Instance ECS tercapai lebih cepat, mencegah peningkatan performa QPS aplikasi.
Solusi
Masalah ini hanya terjadi dalam kondisi beban jaringan ekstrem di mana batas PPS tercapai, seperti selama tes stres benchmark. Dalam skenario nyata, beban lalu lintas jaringan jarang mencapai batas PPS. Jika ini terjadi, kami sarankan Anda tidak menggunakan SMC.
SMC jatuh kembali ke TCP dan RDMA tidak dapat digunakan untuk mempercepat komunikasi
Deskripsi masalah
Setelah mengaktifkan SMC untuk menggantikan TCP dalam aplikasi, Anda menjalankan perintah smcss -a dan keluaran perintah menunjukkan bahwa koneksi SMC secara otomatis jatuh kembali ke TCP.
Penyebab
Jika pengecualian menyebabkan koneksi SMC jatuh kembali ke TCP selama pembuatan koneksi SMC, koneksi SMC masih dapat digunakan untuk komunikasi, tetapi aplikasi yang menggunakan koneksi SMC tidak dapat memanfaatkan manfaat performa RDMA. Ketika terjadi fallback SMC ke TCP, kode penyebab dikembalikan. Anda dapat mengidentifikasi penyebab fallback berdasarkan kode tersebut.
Solusi
Jalankan perintah
smcss -auntuk mendapatkan kode penyebab fallback SMC ke TCP.Contoh keluaran perintah:
State UID Inode Local Address Peer Address Intf Mode ACTIVE 00000 0156721 192.168.99.21:60188 192.168.99.22:8090 0000 TCP 0x03010000 ACTIVE 00000 1202539 172.16.4.189:44780 172.16.4.190:1811 0000 SMCRPada entri pertama, TCP di kolom Intf Mode menunjukkan bahwa koneksi SMC jatuh kembali ke TCP. Kode penyebab adalah 0x03010000. Pada entri kedua, SMCR di kolom Intf Mode menunjukkan bahwa koneksi SMC-R telah dibuat. Jika dua kode penyebab (contoh: 0x05000000 dan 0x03030001) ditampilkan di kolom Intf Mode, kode pertama menunjukkan penyebab untuk host lokal dan kode kedua menunjukkan penyebab untuk host peer. Dalam kebanyakan kasus, fallback SMC ke TCP disebabkan oleh host peer.
Identifikasi penyebab fallback SMC ke TCP berdasarkan kode penyebab dan selesaikan fallback.
Setelah Anda mengaktifkan SMC, data yang dikumpulkan oleh alat O&M jaringan umum tidak sesuai harapan
Deskripsi masalah
Setelah mengaktifkan SMC untuk Instance ECS yang menjalankan Alibaba Cloud Linux 3, alat analisis jaringan umum seperti tcpdump dan Wireshark serta alat pemantauan jaringan seperti utilitas Socket Statistics (ss) dan netstat mengumpulkan data lalu lintas jaringan yang tidak sesuai harapan atau tidak dapat mengumpulkan data lalu lintas yang diharapkan.
Penyebab
SMC-R adalah protokol komunikasi yang didasarkan pada RDMA. Saat ini, alat O&M jaringan umum hanya menganalisis atau memantau traffic TCP dan tidak dapat mengidentifikasi paket RDMA. Akibatnya, data yang ditampilkan dalam alat O&M jaringan tidak sesuai dengan data jaringan aktual.
Solusi
Gunakan alat O&M terkait RDMA untuk menganalisis atau memantau data. Untuk informasi lebih lanjut, lihat Pantau dan Periksa eRDMA.
Modul SMC yang dimuat pada instance GPU-dipercepat atau Super Computing Cluster (SCC) tidak dapat digunakan
Deskripsi masalah
Modul SMC yang dimuat pada instance GPU-dipercepat atau SCC tidak dapat digunakan.
Penyebab
Driver Mellanox OpenFabrics Enterprise Distribution (OFED) diinstal pada instance GPU-dipercepat dan SCC. Modul SMC dalam tumpukan OFED dimuat secara otomatis dan tidak dapat bekerja. Setelah menginstal driver Mellanox OFED, simbol untuk fungsi terkait RDMA berubah. Modul SMC yang termasuk dalam kernel gagal dimuat, dan kesalahan Unknown symbol muncul.
Solusi
Modul SMC dalam Alibaba Cloud Linux 3 tidak dapat digunakan pada instance GPU-dipercepat atau SCC.
Setelah Anda mengaktifkan SMC, beberapa opsi tingkat SOL_SOCKET atau SOL_TCP untuk panggilan setsockopt dan getsockopt tidak bekerja sesuai harapan
Deskripsi masalah
Setelah mengaktifkan SMC untuk menggantikan TCP dalam aplikasi, beberapa opsi tingkat SOL_SOCKET atau SOL_TCP yang sebelumnya digunakan untuk koneksi TCP tidak dapat dikonfigurasikan dengan membuat panggilan setsockopt atau getsockopt atau tidak bekerja sesuai harapan setelah dikonfigurasi.
Penyebab
Setelah mengganti tumpukan protokol TCP dengan tumpukan protokol SMC, buffer bersama digunakan untuk mentransfer data melalui tautan SMC. Desain tumpukan protokol dan metode transfer data SMC sangat berbeda dari desain tumpukan protokol dan metode transfer data TCP. Dalam hal ini, opsi tingkat SOL_SOCKET atau SOL_TCP tidak dapat diterapkan.
Solusi
Catat opsi tingkat SOL_SOCKET atau SOL_TCP yang didukung atau tidak didukung oleh SMC di Alibaba Cloud Linux 3. Tabel berikut menjelaskan dukungan SMC untuk opsi tingkat SOL_SOCKET atau SOL_TCP.
Y, M, dan N ditampilkan dalam tabel.
Y: Opsi didukung oleh SMC dan dapat dikonfigurasikan serta diperoleh dan bekerja sesuai harapan.
M: Opsi tidak didukung oleh SMC dan dapat dikonfigurasikan serta diperoleh, tetapi tidak dapat bekerja sesuai harapan karena perbedaan desain antara SMC dan TCP.
N: Opsi tidak didukung oleh SMC dan tidak dapat dikonfigurasikan atau diperoleh. Fallback ke TCP terjadi dengan kode penyebab 0x03060000 atau 0x03010001.