Opportunistic locking

Von der Installation bis zur Auslieferung der Applikation

Moderator: Moderatoren

Antworten
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Opportunistic locking

Beitrag von AUGE_OHR »

hi,

hab einen neuen RAM Chip erhalten und bin nun am testen mit dem
Server, jetzt mit DBF Datein.

Nun hab ich mein OP´s Lock Modul rausgeholt und wollte damit den
W200x Server "patchen". Als ich aber mir den Source mal ansah,
stellte ich fest das "nur" der "minimal patch" ist wie ihn Steffen F. Pirsig
in seinem PDF "vorgestellt" hat.

Also hab ich mal angefangen im Alaska Forum zu suchen, und auch hier
(http://www.xbaseforum.de/viewtopic.php? ... nmanserver)
und stellte fest das es scheinbar "deutlich" mehr an Empfehlungen gibt.

Deshalb hab ich hier mal den Thread angefangen und versuche mal
die einzelnen hier zu Diskussion zu stellen. (Syntax nach Thomas Braun´s
RegClass)

Code: Alles auswählen

PROCEDURE OPS_LOCK()
LOCAL cKey , oReg , lRtn := .F.

cKey := "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters"
   oReg := XbpReg():NEW( cKey )
   lRtn := oReg:Status()
   IF ! lRtn
     oReg:Create()
   ENDIF

   * MUST HAVE W200x Server.
   oReg:SetValue( "EnableOpLocks"          , 0 )  // Steffen F. Pirsig
   oReg:SetValue( "CachedOpenLimit"       , 0 )  // Steffen F. Pirsig
so das sind die beiden "MUST HAVE" auf dem W200x Server

Code: Alles auswählen

   oReg:SetValue( "EnableOpLockForceClose" , 1 )
das scheint ein Eintrag zu sein den "die meinsten" haben.

ebenfall wohl für den Server sind

Code: Alles auswählen

   oReg:SetValue( "autodisconnect" ,ffffffff  ) // Prevent premature workstation disconnection - default is 0000000f (15 minutes)

   oReg:SetValue( "ConnectionNoSessionsTimeout" ,ffffffff  ) // This one 
is for Server 2003 - default is 2 minutes!
gedacht zu sein.

Nun muss ich erst eine Frage stellen : Was ist mit den Workstationen ?
(davon steht nicht in der PDF von Steffen F. Pirsig )

deshalb also zu den Workstationen :

Code: Alles auswählen

   * MUST HAVE client
   cKey := "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters"
   oReg := XbpReg():NEW( cKey )
   lRtn := oReg:Status()
   IF ! lRtn
     oReg:Create()
   ENDIF
   * NT/2000/XP (Work/Pro)
   oReg:SetValue( "UtilizeNtCaching"       , 0 ) // Disable file 
caching - effectively forces a commit back to the server

    oReg:SetValue( "UseLockReadUnlock"      , 0 ) // Allows data to be read even if another station has a lock in place - can prevent "deadly 
embrace"

   * NT
   oReg:SetValue( "UseOportunisticLocking" , 0 )
   * 2000/XP (Pro)
   oReg:SetValue( "OplocksDisabled"        , 1 )

    oReg:SetValue( "UseUnlockBehind"        , 1 ) // Unlocks data 
immediately in response to an unlock request (improves performance on W2K)
Hier sieht man also das er für die unterschiedlichen OS auch noch
verschiedene Registy Setting gibt. Für Windows 98 gibt es auch was.

Code: Alles auswählen

* On all Windows 95/98/ME computers:
   - Key Name: 
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\VxD\VREDIR
     1) Value Name (DWORD): DiscardCacheOnOpen
        Value: 1
ok aber nun zurück zu den NT/W2x/XP Workstationen. Ich hab auch dort
die Einträge

Code: Alles auswählen

   oReg:SetValue( "EnableOpLocks"               , 0 )
   oReg:SetValue( "EnableOpLockForceClose" , 1 )
   oReg:SetValue( "CachedOpenLimit"           , 0 )
gefunden, wie auf dem Server für Workstation ... richtig oder falsch ?

so und dann gibt es noch diesen Kommentar von "James Loughner ":
"The location of the client registry entry for opportunistic locking has
changed in Windows 2000 from the earlier location in Microsoft Windows
NT. In Windows 2000, the registry entry that disables opportunistic
locking is:

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\MRXSmb\Parameters\
OplocksDisabled REG_DWORD 0 or 1
Default: 0 (not disabled)"
alles klar ... bin gespannt auf eure Kommentare.

gruss by OHR
Jimmy
Benutzeravatar
Markus Walter
Programmier-Gott
Programmier-Gott
Beiträge: 1018
Registriert: Di, 24. Jan 2006 10:22
Wohnort: Saarland

Beitrag von Markus Walter »

Hi,

wir benutzen folgende Einstellungen. Diese importieren wir der Faulheit halber sowohl bei Servern (W2K, W2003), als auch Workstations (W2K, XP)...

Code: Alles auswählen


[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\lanmanserver\parameters]
"autodisconnect"=dword:ffffffff
"EnableOplocks"=dword:00000000
"CachedOpenLimit"=dword:00000000

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\lanmanworkstation\parameters]
"UseOpportunisticLocking"=dword:00000000
"UtilizeNtCaching"=dword:00000000
"UseLockReadUnlock"=dword:00000000

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MRxSmb\parameters]
"OplocksDisabled"=dword:00000001
Habe ich auch so über die Zeit "zusammengesucht" (von Steffen, Forum, ...). Ob das alles so richtig ist, weiß ich aber auch nicht...
Vor allem bei den Peer-2-Peer-Netzen bei unseren Anwendern (XP Pro als "Server") bin ich skeptisch. Hier bleibt die Frage, ob man "EnableOplocks" auch in den lanmanworkstation-Zweig mit übernehmen müsste oder ob sich XP "als Server" seine Infos dann aus dem lanmanserver-Zweig holt...
Gruß
Markus

Mitglied der XUG Saarland-Pfalz
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Beitrag von AUGE_OHR »

moin,

so nun hab ich mal paar "Test" gemacht.

um nur mal zu verdeutlichen von welchen Mengen/Zeit wir sprechen :
ca. 75 MB DBF/DBT Dateien + ca. 32MB Index Dateien. Für einen
kompletten Neuaufbau der Index Dateien incl. PACK braucht :

Clipper ca. 131 Sec. (real-mode 640Kb)
Xbase++ ca. 107 Sec. (32-bit)

Workstation P4P800-VM, P4 1600A, 512MB M$ XP sp2
mit den Novell Client v4.83sp3a mit SPX/IP oder nur
M$ Client über TCP/IP

Novell v3.20x P2 500MHz und 384MB RAM
und 4GB SCSI-1 Festplatte.

HP Server mit Xeon 3200MHz, 1024MB RAM,
3x80GB Riad-5

mit W2000sp3 Adv. mit NW Client :
Clipper ca. 63 Sec. (!!!)
Xbase++ ohne Patch mit NTX ca. 92 sec.
Xbase++ CDX geht nicht ohne Patch ...

Clipper mit Patch ca. 134 Sec.
Xbase++ mit Patch ca. 89 Sec
Xbase++ mit Patch CDX ok

Mit M$ Client und nur TCP/IP
Clipper mit Patch ca. 164 Sec. (!)
Xbase++ mit Patch ca. 88 Sec

Dies bedeutet das ich sicherlich, in der kurzen Test Phase, längst
nicht alles aus W2000 sp3 rausgeholt habe und noch "irgendwelche"
Dienste und Registry Einträge modifizieren (abschalten) muss um
das Optimum aus W2000 sp3 raus zu holen ... aber "viel" wird es
nicht sein ( ca. 10 Sec. ?)

und es gibt "kaum" (107 zu 88/89) einen Unterschied zwischen Novell
& W2000 sp3 (ausser bei reinem DOS Clipper ohne Patch) aber die
Novell Hard-/Software ist auch 10 Jahre alt ! ... und stabil !

zugegeben, der Zugriff auf den Novell Server ist dann "Minuten lang"
sehr träge, weil er noch beim "schreiben" des Cache ist (Monitor bei
100%) während der HP Server "kurz mal" Spitzen von 20% auf der
1st CPU anzeigt und sonst so bei 5-7% hängt ...

auch hab ich bislang "nur" die Server Registry "bearbeitet" und noch
nicht getestet ob man die selben "Einträge" auch auf der Workstation
machen soll/muss den unter XP sp2 gibt es auch "die Einträge" ?

gruss by OHR
Jimmy
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Hi,

für Win2000 ist SP4 schon seit Jahren verfügbar und bei mir im Einsatz.
Gruß
Hubert
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Beitrag von AUGE_OHR »

hi,
brandelh hat geschrieben: für Win2000 ist SP4 schon seit Jahren verfügbar und bei mir im Einsatz.
yup, klar hab ich schon im "install" Verzeichniss liegen, aber ich wollte
"jede" Version testen, also hab ich mit einen Version ohne "Service Pack"
begonnen (um zu sehen was die macht). Bis zum SP3 Pack bin ich bis-
lang gekommen, wobei die "SP" für "andere" Applicationen notwendig
war. Die Ergebnisse ohne "SP" sind in der selben Grössenordnung wie
mit SP3 sodas ich nur SP3 erwähnt habe.

enttäuscht bin ich trotzdem von dem HP / W2K Gespann, den aufgrund
der Hardware hätte ich mit 400%-500% gerechnet, aber es sind "nur"
20% ... oder ist mein 100-Bit Netzwerk der "Engpass" ???

gruss by OHR
Jimmy
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

AUGE_OHR hat geschrieben: ... oder ist mein 100-Bit Netzwerk der "Engpass" ???
in der Tat, mit 100Bit ist nicht viel los, Standard sind heute 100 MBit :D

sorry für den derben Scherz, ich konnte einfach nicht widerstehen. ;-)

Wieviele Anwender sind es denn ?

Wobei solche Operationen im Netzwerk (DBF und Index öffnen, sperren, schreiben, wiedereinlesen (ohne cache), freigeben) ohne optimistic locking und ohne schreibcach halt immer noch von der Zugriffszeit der Festplatte abhängen. Die reine Datenübertragungsleistung ist da bei DBF Satzzugriffen eher nebensächlich. Festplatten insbesondere die Zugriffszeiten sind nicht viel schneller geworden. Nur große Dateien können die gestiegenen maximalen Übertragungsleistungen (40 MB/Sek. bei Platten oder 10 MB/Sek. bei 100 MBit switched) ausnutzen.

Wenn ich von Rechner zu Rechner kopieren ( Dateien > 1 GB oder mehrere Kleinere mit XCOPY), komme ich selten über 15 MB/Sekunde obwohl ich GBit installiert habe. Festplatten, PCI Bus, Netzwerk, PCI Bus, Festplatte kostet einfach Leistung.

Und diese Leistung wird geteilt durch die Anwender am Server.
Wenn nur gelesen wird, kann man es deutlich beschleunigen (automatisches Locking von Xbase++), sonst nicht.
Darum speichere ich auch Hilfstabellen nach dem 1. Zugriff im Array zwischen.
Gruß
Hubert
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Hi Jimmy,

kleiner Nachtrag. Dass dies so ist, hat Stefen in Berlin erklärt, liegt daran, dass die Operationen die ganze Dateien verarbeiten (Word, Excel Datei laden, oder Video streamen) seit Jahren auf Kosten von geshared geöffneten Dateien beschleunigt werden.

Die Optimierung geht weg von kleinen DBF/Access Anwendungen, hin zu SQL Servern, die ja lokal auf die Daten zugreifen und auch enorm von der gestiegenen Rechenleistung profitieren können. Das senkt auch den Aufwand für die Datenübertragung. Und wer verkauft SQL-Server, richtig ... aber es gibt auch kostenlose Versionen von fast allen großen Herstellern und der Open Source Gemeinde.

Phil Ide hat zu PostGreSQL auch einen nativen Treiber für Xbase im download Angebot. Er bevorzugt diese DB. Mit SQLExpress kann man alle nutzen, aber ODBC bremst wieder etwas.
Gruß
Hubert
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Beitrag von AUGE_OHR »

brandelh hat geschrieben:
AUGE_OHR hat geschrieben: ... oder ist mein 100-Bit Netzwerk der "Engpass" ???
in der Tat, mit 100Bit ist nicht viel los, Standard sind heute 100 MBit :D
klar, logisch ... da war ja sogar der "Akustik-Koppler" mit 300 Baud
schon "schneller" ...
brandelh hat geschrieben: Wieviele Anwender sind es denn ?
zum "testen" ? exclusiv als SysOp.
brandelh hat geschrieben: Wobei solche Operationen im Netzwerk (DBF und Index öffnen, sperren, schreiben, wiedereinlesen (ohne cache), freigeben) ohne optimistic locking und ohne schreibcach halt immer noch von der Zugriffszeit der Festplatte abhängen. Die reine Datenübertragungsleistung ist da bei DBF Satzzugriffen eher nebensächlich.
Das "opportunistic locking" scheint Xbase++ gar nicht "soviel" auszu-
machen (92 89/88 ) evtl. weil ich die DBF ja "exclusiv" öffne zum
INDEX ON ?

Bei der SCSI-1 (10Mbit) vs. RAID-5 UW320/10000RPM hätte ich mir
aber doch einen "deutlichen" Vorteil versprochen.
brandelh hat geschrieben: Festplatten insbesondere die Zugriffszeiten sind nicht viel schneller geworden. Nur große Dateien können die gestiegenen maximalen Übertragungsleistungen (40 MB/Sek. bei Platten oder 10 MB/Sek.
bei 100 MBit switched) ausnutzen.
aber beim "lesen" mit einem RAID-5, müsste da der Zugriff nicht
deutlich besser sein auch bei "kleinen" Blöcken ?
brandelh hat geschrieben: Wenn ich von Rechner zu Rechner kopieren ( Dateien > 1 GB oder mehrere Kleinere mit XCOPY), komme ich selten über 15 MB/Sekunde obwohl ich GBit installiert habe. Festplatten, PCI Bus, Netzwerk, PCI Bus, Festplatte kostet einfach Leistung.
naja, bei "Server" gehen solche Aktionen doch in den Cache ?

wenn ich eine 200MB Datei auf meine NW Server "kopiere" geht
das in < 3 Sec. ... aber dann kann ich "Minuten lang" nichts mehr
auf dem Server machen weil er dann noch am "schreiben" des
Cache ist.

beim neuen HP Server ist das nun kein Problem, da kann ich
weiterarbeiten wärend er "schreibt"
brandelh hat geschrieben: Wenn nur gelesen wird, kann man es deutlich beschleunigen (automatisches Locking von Xbase++), sonst nicht.
Darum speichere ich auch Hilfstabellen nach dem 1. Zugriff im
Array zwischen.
beim "lesen" hatte ich eigendlich bislang weniger ein Problem.
ähnlich wie beim "kopieren" war es eher das "schreiben" was den
Server "blockierte" und man dann auch nicht mehr "lesen" kann.
brandelh hat geschrieben: Und diese Leistung wird geteilt durch die Anwender am Server.
ja der "Multi" User Test steht noch aus und da wird es sicherlich
anders aussehen im "share" Betrieb. Das kann ich aber erst wenn
ich das "opportunistic locking" mit den M$ Servern im Griff habe.

Ich "denke" das die XP Workstationen, die in der Registry die "Schlüssel"
LanmanServer\Parameters bzw. LanmanWorkstation\Parameters haben,
ebenfalls "Einträge" benötigen.
oder sind die "nur" aktive wenn die Workstation "Server" spielt ?

Beim "testen" hatte ich trotz "Patch" des öfteren eine Fehlermeldung
das er eine DBF nicht "exclusive" öffnen könne obwohl die "eigendlich"
geschlossen war (incl. Appication) ...

also wenn jemand noch Erfahrungswerte mit "opportunistic locking" hat,
möge er doch diese hier zur Diskussion stellen, danke.

gruss by OHR
Jimmy
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Opportunistic locking

Beitrag von AUGE_OHR »

moin,
AUGE_OHR hat geschrieben:

Code: Alles auswählen

"HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters"

"HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters"
Das ist obrige ist FALSCH !!!

Es ist "case-intensive" also muss es richtig so heissen :

Code: Alles auswählen

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\lanmanserver\parameters
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\lanmanworkstation\parameters
so nun zu einem "kleinen" neunen Problem : Ich kann zwar anlegen,
Werte setzten nur das "löschen" von solchen settings gelngt mir nicht ?

Code: Alles auswählen

#include "regclass.ch"

PROCEDURE Main
LOCAL aSubkeys, cKEY
LOCAL oReg := XbpReg():NEW( 
"HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\lanmanserver\parameters")

   CLS
   IF ! oReg:Status()
      ALERT("Registry Key not found")
      QUIT
   ENDIF
   ?
   ? "Current Key :", oReg:KeyName
   ?
   // Create an array of all existing subkeys
   aSubkeys := oReg:ValueList(.F.)    // .F. without Value
   ?
   ? "all subkeys of", oReg:KeyName
   WAIT
   AEVAL( aSubkeys, {|aEl| QOUT(aEl)} )
   ?
   WAIT
*   cKEY := "autodisconnect"
   ? cKEY := aSubkeys[2][1]
   ? oReg:DelValue(cKEY)           // return "N" ???
   RunShell( "", "REGEDIT.EXE", .T. )
   WAIT
RETURN
was mache ich "falsch" ?

gruss by OHR
Jimmy
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

VISTA "Ops lock"

Beitrag von AUGE_OHR »

hi,

http://forums.microsoft.com/MSDN/ShowPo ... 8&SiteID=1

... und wieder ein Eintrag für die Registry ...

gruss by OHR
Jimmy
Antworten