[Eisfair_dev] Samba 11.5.0 testing:Oplocking geändert

Marcus Röckrath marcus.roeckrath at gmx.de
Do Apr 8 10:35:39 CEST 2021


Hallo,

da ein Abschnitt von mir beim Reinkopieren nicht bereinigt wurde, nun
nochmal:

Marcus Röckrath wrote:

Hallo,

auf Anregung und Mitarbeit von Thomas habe ich das Oplocking in Samba
(Parameter SAMBA_OPLOCKS) etwas geändert.

Für alle, bei denen dieser Parameter auf no steht, ändert sich nichts, nur
bei yes ist das Verhalten geändert/verfeinert.

Was sind OPLOCKS (opportunistisches Locking); hierzu ein älteres Zitat,
was dies ganz gut erklärt:

"Windows benutzt zur Steigerung der Performance ein Opportunistisches
Sperren. Durch einen solchen oplock erhält ein Client, solange er der
Einzige ist, der die Datei in Benutzung hat einen exklusiven Zugriff auf
die gesamte Datei und der Client darf seine IO Aufträge cachen. Durch
dieses Caching wird der Netzwerktraffic deutlich verringert, da nicht jede
kleine Änderung innerhalb der Datei über das Netz übertragen werden muss.
Wenn nun jedoch ein weitere Client auf diese Datei zugreifen möchte, muss
dieser Client erstmal warten, bis der Oplock haltende Client seinen Cache
mit dem Server synchronisiert hat.
Diese Technik funktioniert sehr gut, wenn nur Windows Clients auf den
Samba Share zugreifen, da Samba die Benachrichtigung über Oplocks an die
Clients verschickt.
Wenn nun ein Unix Prozess an Samba vorbei auf eine Datei zugreift, auf die
ein Windows Prozess ein Oplock hält, dann bekommt Samba davon nichts mit.
Der Unix Prozess kann diese Datei editieren und auch speichern, doch
sobald der Windows Prozess die Datei schließt und seinen Cache leert
werden diese Änderungen verloren sein und von Samba überschrieben."
[http://www.schmidti.de/blog/lockinginsamba]
 
 
Bislang wurde bei SAMBA_OPLOCKS=yes folgendes in der smb.conf gesetzt:
 
oplocks = yes
kernel oplocks = yes
level2 oplocks = yes
veto oplock files
=
/*.bak/*.cd*/*.cur/*.*db/*.db*/*.*dx/*.dxf/*.dwg/*.doc/*.fpt/*.igs/*.ia*/*.id*/*.in*/*.ip*/*.log/*.mpp/*.ndx/*.ntx/*.opt/*.ord/*.ppt/*.pst/*.qb*/*.sjb/*.sbs/*.slp/*.st*/*.vsd/*.xl*/"

Allerdings ist "level2 oplocks" ohne Funktion, wenn "kernel oplocks"
aktiviert ist.
 
In der "veto oplock files"-Zeile sind die Dateimasken angegeben, für die
kein Oplocking stattfindet.


Das neue Samba-Paket fügt nun die SAMBA_KERNEL_OPLOCKS als
Konfigurationsoption hinzu, damit die sich ausschließenden Optionen
"kernel oplocks" und "level2 oplocks" nutzbar sind.


Wenn auf eine Samba-Share auch lokal vom Server oder mittels anderer
Freigabetechniken (z. B. NFS) zugegriffen wird, sind "kernel oplocks"
zwingend zu aktivieren, ansonsten aus Performancegründen "level2 oplocks".


Das Paket konfiguriert nun so:

1. SAMBA_OPLOCKS=yes und SAMBA_KERNEL_OPLOCKS=yes:
oplocks = yes
kernel oplocks = yes
level2 oplocks = yes

Dabei ist "level2 oplocks" zwar gesetzt, aber wegen der Nutzung der
"kernel oplocks" inaktiv, also bedeutungslos.


2. SAMBA_OPLOCKS=yes und SAMBA_KERNEL_OPLOCKS=no:
oplocks = yes
kernel oplocks = no
level2 oplocks = yes


Die Direktive "veto oplock files" wird nicht mehr gesetzt.


Die bislang im Paket bei SAMBA_OPLOCKS=yes gesetzte Option erreicht man
nun, indem man auch SAMBA_KERNEL_OPLOCKS auf yes setzt, wobei nun eben die
"veto oplocks files" Direktive fehlt.


OpenSuSE setzt das ähnlich:

# testparm -sv | grep oplock
        veto oplock files =
        kernel oplocks = No
        oplocks = Yes
        level2 oplocks = Yes

Wer ein Ubuntu, RedHat, ... mit Samba-Server laufen hat, kann gerne mal
die dortige Konfiguration posten.

Ich bitte um Tests und Kommentare.

-- 
Gruß Marcus
[eisfair-Team]


Mehr Informationen über die Mailingliste Eisfair_dev