Konfigurasi RSS
Untuk mendapatkan informasi konfigurasi RSS, driver yang terlalu berlebihan dapat mengirim kueri OID OID_GEN_RECEIVE_SCALE_CAPABILITIES ke driver miniport. NDIS juga menyediakan informasi konfigurasi RSS untuk driver protokol yang terlalu mengandalkan dalam struktur NDIS_BIND_PARAMETERS selama inisialisasi.
Driver yang terlalu berlebihan memilih fungsi hashing, jenis, dan tabel tidak langsung. Untuk mengatur opsi konfigurasi ini, driver mengirimkan permintaan set OID OID_GEN_RECEIVE_SCALE_PARAMETERS ke driver miniport. Driver yang terlalu berlebihan juga dapat meminta OID ini untuk mendapatkan pengaturan RSS saat ini. Buffer informasi untuk OID OID_GEN_RECEIVE_SCALE_PARAMETERS berisi penunjuk ke struktur NDIS_RECEIVE_SCALE_PARAMETERS.
Driver yang terlalu berlebihan dapat menonaktifkan RSS pada NIC. Dalam hal ini, driver mengatur bendera NDIS_RSS_PARAM_FLAG_DISABLE_RSS di anggota Bendera struktur NDIS_RECEIVE_SCALE_PARAMETERS. Ketika bendera ini diatur, driver miniport harus mengabaikan semua bendera dan pengaturan lainnya dan menonaktifkan RSS pada NIC.
NDIS memproses OID_GEN_RECEIVE_SCALE_PARAMETERS sebelum meneruskannya ke driver miniport dan memperbarui kata kunci adaptor miniport *RSS standar, jika diperlukan. Untuk informasi selengkapnya tentang kata kunci *RSS , lihat Kata Kunci INF Standar untuk RSS.
Setelah menerima permintaan set OID_GEN_RECEIVE_SCALE_PARAMETERS dengan set bendera NDIS_RSS_PARAM_FLAG_DISABLE_RSS, driver miniport harus mengatur status RSS NIC ke status awal NIC setelah inisialisasi. Oleh karena itu, jika driver miniport menerima permintaan set OID_GEN_RECEIVE_SCALE_PARAMETERS berikutnya dengan bendera NDIS_RSS_PARAM_FLAG_DISABLE_RSS dihapus, semua parameter harus memiliki nilai yang sama yang ditetapkan setelah driver miniport menerima permintaan yang ditetapkan OID_GEN_RECEIVE_SCALE_PARAMETERS untuk pertama kalinya setelah adaptor miniport diinisialisasi.
Driver yang terlalu berlebihan dapat menggunakan OID_GEN_RECEIVE_HASH OID untuk mengaktifkan dan mengonfigurasi perhitungan hash pada bingkai yang diterima tanpa mengaktifkan RSS. Driver yang terlalu mengandalkan juga dapat mengkueri OID ini untuk mendapatkan pengaturan hash penerima saat ini.
Buffer informasi untuk OID OID_GEN_RECEIVE_HASH berisi penunjuk ke struktur NDIS_RECEIVE_HASH_PARAMETERS. Untuk permintaan yang ditetapkan, OID menentukan parameter hash yang harus digunakan adaptor miniport. Untuk permintaan kueri, OID mengembalikan parameter hash yang digunakan adaptor miniport. OID ini bersifat opsional untuk driver yang mendukung RSS.
Catatan Jika menerima perhitungan hash diaktifkan, NDIS menonaktifkan menerima perhitungan hash sebelum mengaktifkan RSS. Jika RSS diaktifkan, NDIS menonaktifkan RSS sebelum mengaktifkan penghitungan hash penerimaan.
Semua adaptor miniport yang didukung driver miniport harus menyediakan pengaturan konfigurasi hash yang sama untuk semua pengikatan protokol berikutnya. OID ini juga mencakup kunci rahasia yang harus digunakan driver miniport atau NIC untuk perhitungan hash. Kuncinya panjangnya 320 bit (40 byte) dan dapat berisi data apa pun yang dipilih driver yang terlalu mengandalkan, misalnya, aliran byte acak.
Untuk menyeimbangkan kembali beban pemrosesan, driver yang terlalu mengandalkan dapat mengatur parameter RSS dan memodifikasi tabel tidak langsung. Biasanya, semua parameter tidak berubah kecuali untuk tabel tidak langsung. Namun, setelah RSS diinisialisasi, driver yang terlalu mengandalkan mungkin mengubah parameter inisialisasi RSS lainnya. Jika perlu, driver miniport dapat mengatur ulang perangkat keras NIC untuk mengubah fungsi hash, kunci rahasia hash, jenis hash, nomor CPU dasar, atau jumlah bit yang digunakan untuk mengindeks tabel tidak langsung.
Perhatikan Driver yang terlalu berlebihan dapat mengatur parameter ini kapan saja. Ini dapat menyebabkan indikasi penerimaan yang tidak berurutan. Driver miniport yang mendukung TCP tidak diperlukan untuk menghapus menyeluruh antrean penerima mereka dalam instans ini.
Gambar berikut menyediakan contoh konten untuk dua instans tabel tidak langsung.
Angka sebelumnya mengasumsikan empat konfigurasi prosesor, dan jumlah bit paling tidak signifikan yang digunakan dari nilai hash adalah 6 bit. Oleh karena itu, tabel tidak langsung berisi 64 entri.
Dalam gambar, tabel A mencantumkan nilai dalam tabel tidak langsung segera setelah inisialisasi. Kemudian, karena beban lalu lintas normal bervariasi, beban prosesor tumbuh tidak seimbang. Driver yang terlalu berlebih mendeteksi kondisi yang tidak seimbang dan mencoba menyeimbangkan kembali beban dengan menentukan tabel tidak langsung baru. Tabel B mencantumkan nilai tabel tidak langsung baru. Dalam tabel B, beberapa beban dari CPU 2 dipindahkan ke CPU 1 dan 3.
Catatan Saat tabel tidak langsung diubah, untuk waktu yang singkat (saat antrean deskriptor penerima saat ini sedang diproses), paket dapat diproses pada CPU yang salah. Ini adalah kondisi sementara normal.
Ukuran tabel tidak langsung biasanya dua hingga delapan kali jumlah prosesor dalam sistem.
Ketika driver miniport mendistribusikan paket ke CPU, jika ada terlalu banyak CPU, upaya yang dihabiskan dalam mendistribusikan beban bisa menjadi melarang. Dalam hal ini, driver yang terlalu berlebihan harus memilih subkumpulan CPU tempat pemrosesan data jaringan terjadi.
Dalam beberapa kasus, jumlah antrean penerima perangkat keras yang tersedia mungkin kurang dari jumlah CPU pada sistem. Driver miniport harus memeriksa tabel tidak langsung untuk menentukan nomor CPU yang akan dikaitkan dengan antrean perangkat keras. Jika jumlah total nomor CPU berbeda yang muncul dalam tabel tidak langsung lebih dari jumlah antrean perangkat keras yang didukung NIC, driver miniport harus memilih subset nomor CPU dari tabel tidak langsung. Subset sama dengan jumlah antrean perangkat keras. Driver miniport memperoleh parameter IndirectionTableSize dari OID_GEN_RECEIVE_SCALE_PARAMETERS. Driver miniport menentukan nilai NumberOfReceiveQueues sebagai respons terhadap OID_GEN_RECEIVE_SCALE_CAPABILITIES.