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

NET_ADAPTER_RECEIVE_SCALING_INDIRECTION_ENTRY

NetAdapterCx Menerima Penskalaan Sisi