Menggunakan Protokol Sesi

Sakelar Windows Sockets menggunakan protokol sesinya untuk mentransfer data melalui koneksi SAN. Jika sakelar mentransfer sejumlah kecil data, sakelar mentransfer data tersebut dalam pesan kontrol. Setiap pesan kontrol terdiri dari header dan payload opsional data aplikasi. Jika sakelar mentransfer sejumlah besar data, sakelar mentransfer data tersebut menggunakan operasi RDMA.

Bagian ini menjelaskan cara menyiapkan dan melakukan transfer data.

Catatan Tergantung pada perilaku aplikasi yang mengaktifkan sakelar, sakelar mengoptimalkan protokol sesinya untuk mengurangi overhead yang muncul dalam proses transfer data aplikasi.

Bagian ini juga menyediakan contoh bagaimana protokol sesi pengalihan melakukan transfer data. Namun, contoh-contoh ini tidak mencakup deskripsi definitif dari operasi ini.

Menyiapkan Proses Transfer Data

Switch mengalokasikan kumpulan buffer pesan kontrol untuk setiap soket yang terhubung. Sakelar kemudian melakukan panggilan ke fungsi WSPRegisterMemory penyedia layanan SAN untuk mendaftarkan buffer pesan tersebut ke wilayah memori fisik. Sakelar menggunakan bagian dari kumpulan buffer untuk mengirim informasi kontrol alur ke peer jarak jauh ketika memanggil fungsi WSPSend dari penyedia layanan SAN. Switch menggunakan bagian lain dari kumpulan untuk memposting buffer pesan untuk menerima informasi kontrol alur dari rekan jarak jauh saat memanggil fungsi WSPRecv dari penyedia layanan SAN. Setelah sakelar menerima pesan kontrol, sakelar mengonsumsinya dengan segera. Setelah memproses pesan kontrol, sakelar memanggil fungsi WSPRecv dari penyedia layanan SAN dan meneruskan buffer penerimaan untuk diposting kembali agar dapat menerima pesan kontrol tambahan dari rekan jarak jauh.

Mentransfer Data Aplikasi

Ukuran transfer data memengaruhi bagaimana sakelar akan menangani operasi transfer data.

Jika aplikasi meminta untuk mengirim sejumlah kecil data, sakelar mentransfer data tersebut seperti yang dijelaskan dalam Mengirim Data Mendesak pada SAN.

Jika aplikasi meminta untuk mengirim sejumlah besar data, sakelar menyalin bagian awal data ke buffer pesan kontrol yang digunakan untuk mengirim. Header untuk pesan kontrol ini berisi informasi yang menentukan jumlah data aplikasi. Sakelar kemudian memanggil fungsi WSPSend penyedia layanan SAN untuk mengirim pesan kontrol ini ke peer jarak jauh soket SAN.

Bagaimana sakelar menyelesaikan transfer data aplikasi tergantung pada apakah penyedia layanan mendukung fungsi WSPRdmaRead.

Transfer Data ke Penyedia yang Mendukung Fungsi WSPRdmaRead

Gambar berikut menunjukkan gambaran umum tentang bagaimana sakelar menyelesaikan transfer data aplikasi jika penyedia layanan SAN di peer jarak jauh mendukung fungsi WSPRdmaRead. Urutan berikut menjelaskan transfer data aplikasi secara lebih rinci.

mitra jarak jauh mendukung wsprdmaread.

Untuk mentransfer data ketika mitra jarak jauh mendukung WSPRdmaRead

  • Sakelar lokal harus memanggil fungsi WSPRegisterRdmaMemory dari penyedia layanan SAN untuk mendaftarkan memori RDMA untuk akses baca. Dalam hal ini, tajuk kontrol untuk penyangga pesan juga mengidentifikasi deskripsi untuk memori (RDMA) yang menyimpan sisa data aplikasi.
  • Saklar di pihak jarak jauh kemudian memanggil WSPRdmaRead untuk mentransfer data aplikasi dari memori RDMA ke buffer penerima yang sebelumnya didaftarkan oleh saklar di pihak jarak jauh dengan panggilan WSPRegisterMemory. Penyedia layanan SAN mengirimkan data yang di-buffer di latar belakang. Melakukannya memungkinkan aplikasi yang tidak memposting lebih dari satu pengiriman sekaligus untuk memposting permintaan pengiriman lain sementara penyedia layanan SAN mengirim data yang di-buffer.
  • Sakelar di peer jarak jauh kemudian memanggil WSPSend untuk mengirim pesan kontrol ke sakelar lokal untuk menunjukkan bahwa transfer selesai.
  • Sakelar lokal memanggil fungsi WSPDeregisterRdmaMemory untuk melepaskan memori RDMA.
  • Pengalih lokal menyelesaikan permintaan pengiriman aplikasi. Jika sakelar tidak dapat mendaftarkan memori untuk buffer data aplikasi atau jika memori sementara tidak dapat dialokasikan sepenuhnya, sakelar menyelesaikan permintaan pengiriman aplikasi dengan kode kesalahan WSAENOBUFS.

Transfer Data ke Penyedia yang Tidak Mendukung Fungsi WSPRdmaRead

Gambar berikut menunjukkan gambaran umum tentang bagaimana sakelar menyelesaikan transfer data aplikasi jika penyedia layanan SAN di peer jarak jauh tidak mendukung fungsiWSPRdmaRead. Urutan berikut menjelaskan transfer data aplikasi secara lebih rinci.

rekan jarak jauh tidak mendukung wsprdmaread.

Untuk mentransfer data saat peer jarak jauh tidak mendukung WSPRdmaRead

  • Switch pada rekan jauh memanggil WSPRegisterRdmaMemory untuk mendaftarkan memori RDMA untuk akses tulis.
  • Sakelar di peer jarak jauh kemudian memanggil WSPSend untuk mengirim pesan kontrol ke sakelar lokal yang menunjukkan lokasi memori RDMA tempat sakelar lokal dapat menulis.
  • Sakelar lokal memanggil fungsi WSPRdmaWrite untuk mentransfer data aplikasi ke memori RDMA. Penyedia layanan SAN mengirimkan data yang di-buffer di latar belakang. Melakukannya memungkinkan aplikasi yang tidak memposting lebih dari satu pengiriman sekaligus untuk memposting permintaan pengiriman lain sementara penyedia layanan SAN mengirim data yang di-buffer.
  • Pengalih lokal memanggil fungsi WSPGetOverlappedResult untuk mendapatkan hasil transfer. Untuk informasi selengkapnya, lihat Menyelesaikan Permintaan Transfer Data.
  • Pengalih lokal memanggil WSPSend untuk mengirim pesan kontrol ke mitra jarak jauh untuk menunjukkan bahwa transfer selesai.
  • Sakelar pada rekan jauh menggunakan WSPDeregisterRdmaMemory untuk merilis memori RDMA.
  • Sakelar lokal menyelesaikan permintaan pengiriman dari aplikasi. Jika sakelar tidak dapat mendaftarkan memori untuk buffer data aplikasi atau jika memori sementara tidak dapat dialokasikan, maka sakelar akan menyelesaikan permintaan pengiriman aplikasi dengan kode kesalahan WSAENOBUFS.

Mentransfer Data pada SAN