EVT_NET_ADAPTER_RECEIVE_SCALING_SET_INDIRECTION_ENTRIES fungsi panggilan balik (netreceivescaling.h)
Fungsi panggilan balik EvtNetAdapterReceiveScalingSetIndirectionEntries diimplementasikan oleh driver klien untuk melakukan pemindahan entri tabel tidak langsung receive side scaling (RSS) ke antrean penerima baru.
Sintaks
EVT_NET_ADAPTER_RECEIVE_SCALING_SET_INDIRECTION_ENTRIES EvtNetAdapterReceiveScalingSetIndirectionEntries;
NTSTATUS EvtNetAdapterReceiveScalingSetIndirectionEntries(
[_In_] NETADAPTER Adapter,
[_Inout_] NET_ADAPTER_RECEIVE_SCALING_INDIRECTION_ENTRIES *IndirectionEntries
)
{...}
Parameter
[_In_] Adapter
Objek NETADAPTER yang diperoleh driver klien dalam panggilan sebelumnya ke NetAdapterCreate.
[_Inout_] IndirectionEntries
Penunjuk ke struktur NET_ADAPTER_RECEIVE_SCALING_INDIRECTION_ENTRIES yang mewakili tabel tidak langsung.
Nilai kembali
Mengembalikan STATUS_SUCCESS jika operasi pemindahan berhasil. Jika tidak, mengembalikan kode kesalahan NTSTATUS yang sesuai.
Keterangan
Daftarkan implementasi fungsi panggilan balik ini dengan mengatur anggota struktur NET_ADAPTER_RECEIVE_SCALING_CAPABILITIES yang sesuai lalu panggil NetAdapterSetReceiveScalingCapabilities. Driver klien biasanya memanggil NetAdapterSetReceiveScalingCapabilities saat memulai adaptor net, sebelum memanggil NetAdapterStart.
Ketika driver protokol perlu menyeimbangkan kembali beban kerja prosesor di RSS, pertama-tama penghitungan pemetaan baru untuk setiap entri tabel tidak langsung ke prosesor baru. Kemudian protokol meneruskan informasi ini ke NetAdapterCx, yang secara internal memetakan nomor prosesor ke NIC menerima ID antrean. NetAdapterCx menyimpan tabel tidak langsung baru, dengan entri yang dipetakan untuk menerima ID antrean, dalam struktur NET_ADAPTER_RECEIVE_SCALING_INDIRECTION_ENTRIES dan meneruskan struktur ini ke driver klien NIC saat memanggil fungsi panggilan balik EvtNetAdapterReceiveScalingSetIndirectionEntries driver.
Dalam panggilan balik ini, driver klien memindahkan setiap entri dalam tabel tidak langsung NIC mereka ke antrean terima yang ditentukan. Setiap struktur NET_ADAPTER_RECEIVE_SCALING_INDIRECTION_ENTRY dalam array NET_ADAPTER_RECEIVE_SCALING_INDIRECTION_ENTRIES berisi indeks hash untuk entri tersebut dalam tabel, antrean penerima baru untuk menetapkan entri, dan bidang status yang menunjukkan apakah pemindahan individu tersebut berhasil atau tidak.
Fungsi penetapan entri indeks ke antrean penerima perangkat keras tergantung pada desain setiap NIC. Misalnya, beberapa driver klien NIC mungkin menetapkan ID mereka sendiri untuk setiap menerima antrean yang berbeda dari ID yang ditetapkan NetAdapterCx, sehingga mereka harus terlebih dahulu menerjemahkan ID antrean yang disediakan ke ID antrean mereka sendiri sebelum menetapkan ulang entri tabel tidak langsung. NIC lain mungkin memiliki tabel tidak langsung terkompresi yang berbeda ukurannya dari tabel tidak langsung yang dikelola sistem, sehingga driver klien dari NIC tersebut perlu menghitung indeks yang benar ke dalam tabel tidak langsung perangkat keras mereka saat menetapkan entri. Untuk sampel kode contoh kedua ini, lihat driver sampel Realtek Github.
Contoh
Contoh sederhana ini mengasumsikan rasio 1:1 dari antrean terima ke prosesor, sehingga tabel tidak langsung NIC berukuran sama dengan tabel tidak langsung sistem.
NTSTATUS
MyEvtNetAdapterReceiveScalingSetIndirectionEntries(
_In_ NETADAPTER Adapter,
_Inout_ PNET_ADAPTER_RECEIVE_SCALING_INDIRECTION_ENTRIES IndirectionEntries
)
{
// Get the adapter's context to retrieve the address of the hardware indirection table
PMY_NET_ADAPTER_CONTEXT adapterContext = GetMyAdapterContext(Adapter);
// Assign each indirection table entry to the specified receive queue
for(size_t i = 0; i < IndirectionEntries->Count; i++)
{
// Get the queue ID from its context
const ULONG queueId = GetMyRxQueueContext(IndirectionEntries->Entries[i].Queue)->QueueId;
// Get the hash index for this entry
const UINT32 index = IndirectionEntries->Entries[i].Index;
// Assign the new queue ID for this index in the indirection table and record success
IndirectionEntries->Entries[i].Status = MySetIndirectionTableEntry(adapterContext->HardwareInfo->RssIndirectionTable[index],
queueId
);
}
return STATUS_SUCCESS;
}
Persyaratan
Persyaratan | Nilai |
---|---|
Target Platform | Universal |
Versi KMDF minimum | 1.25 |
Header | netreceivescaling.h (termasuk netadaptercx.h) |
IRQL | DISPATCH_LEVEL |
Lihat juga
NET_ADAPTER_RECEIVE_SCALING_INDIRECTION_ENTRIES
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk