Bagikan melalui


Oplock dan pengalih jaringan

Pengalih jaringan menggunakan kunci oportunistik (oplock) untuk mengoptimalkan performa akses file dan mengurangi lalu lintas jaringan di lingkungan server klien.

Dokumentasi ini ditujukan untuk pengembang pengalihan jaringan, meskipun beberapa informasi berlaku untuk pengembang aplikasi klien. Untuk dokumentasi oplock lainnya yang terkait dengan aplikasi klien, lihat artikel Kunci Oportunistik Windows SDK.

Gambaran umum Oplock

Oplock (kunci oportunistik) adalah kunci yang ditempatkan oleh klien pada file yang berada di server. Dalam kebanyakan kasus, klien meminta oplock sehingga dapat menyimpan data secara lokal. Oplock digunakan oleh pengalih jaringan pada klien dengan server jarak jauh, dan oleh aplikasi klien di server lokal. Lihat Jenis oplock untuk deskripsi berbagai oplock saat ini dan warisan.

Oplock memungkinkan klien server file (seperti klien yang menggunakan protokol SMB dan SMB2) untuk mengubah strategi buffering secara dinamis untuk file atau aliran tertentu secara konsisten. Penggunaan oplock meningkatkan performa dan mengurangi penggunaan jaringan. Untuk meningkatkan performa jaringan untuk operasi file jarak jauh, klien dapat menyangga data file secara lokal, yang mengurangi atau menghilangkan kebutuhan untuk mengirim dan menerima paket jaringan. Contohnya:

  • Klien mungkin tidak perlu menulis informasi ke dalam file di server jarak jauh jika klien tahu bahwa tidak ada proses lain yang mengakses data.
  • Klien dapat menyangga data read-ahead dari file jarak jauh jika klien tahu bahwa tidak ada proses lain yang menulis data ke file jarak jauh.

Aplikasi dan driver juga dapat menggunakan oplock untuk mengakses file secara transparan tanpa memengaruhi aplikasi lain yang mungkin perlu menggunakan file-file ini.

Sistem file seperti NTFS mendukung beberapa aliran data per file. Sistem memberikan oplock pada handel aliran, yang berarti bahwa oplock diberikan untuk pembukaan aliran file yang diberikan dan operasi berlaku untuk aliran tersebut. Dengan beberapa pengecualian, operasi pada satu aliran tidak memengaruhi oplock pada aliran yang berbeda. Untuk informasi selengkapnya, lihat Meminta dan memberikan oplock.

Untuk sistem file yang tidak mendukung aliran data alternatif, seperti FAT, pikirkan "file" ketika diskusi oplock mengacu pada "streaming."

Fungsionalitas oplock inti dari paket oplock diimplementasikan dalam kernel, terutama melalui rutinitas FsRtlXxx seperti FsRtlInitializeOplock. Sistem file memanggil paket ini untuk mengimplementasikan fungsionalitas oplock dalam sistem file mereka. Artikel oplock di bagian ini menjelaskan bagaimana sistem file NTFS menginteroperaksi dengan paket oplock kernel. Sistem file lain berfungsi dengan cara yang sama meskipun mungkin ada perbedaan kecil.

Kunci oplock

Handel aliran dapat dikaitkan dengan kunci oplock, yang merupakan nilai GUID yang mengidentifikasi beberapa handel milik tampilan cache klien yang sama. Lebih akurat untuk mengatakan bahwa kunci oplock dikaitkan dengan struktur FILE_OBJECT yang dirujuk oleh handel aliran. Perbedaan ini penting ketika handel diduplikasi, seperti dengan DuplicateHandle. Masing-masing handel duplikat mengacu pada struktur FILE_OBJECT yang mendasar yang sama.

Kunci oplock dapat disediakan secara eksplisit (ke IoCreateFileEx) saat handel aliran dibuat. Jika kunci oplock tidak ditentukan secara eksplisit saat menangani pembuatan, sistem memperlakukan handel sebagai memiliki kunci oplock unik yang terkait dengannya. Kunci unik ini berbeda dari kunci lain pada handel lain.

Oplock rusak ketika:

  • Operasi file diterima pada handel selain yang diberikan oplock, DAN
  • Kunci oplock yang terkait dengan handel oplock berbeda dari kunci yang terkait dengan handel operasi, AND
  • Operasi tidak kompatibel dengan oplock yang saat ini diberikan.

Oplock rusak meskipun proses atau utas yang sama melakukan operasi yang tidak kompatibel. Misalnya, oplock eksklusif segera rusak ketika:

  1. Proses membuka aliran yang diberikan oplock eksklusif.
  2. Proses yang sama kemudian membuka aliran yang sama lagi menggunakan kunci oplock yang berbeda (atau tidak).

Untuk informasi selengkapnya, lihat Melanggar oplock.

Ingatlah bahwa kunci oplock ada pada handel, dan mereka "memakai" handel ketika handel dibuat. Anda dapat mengaitkan handel dengan kunci oplock meskipun tidak ada oplock yang diberikan.