Portál AbcLinuxu, 7. května 2025 17:04
Nové verze Wine. Mandatorní zámky souborů na Linuxu. Jak analyzovat výkon D3D. Změny v databázi aplikací.
Wine 1.5.26 vyšlo 15. března s těmito změnami:
Wine 1.5.27 vyšlo 29. března s těmito změnami:
Lepší podpora zamykání souborů proti čtení/zápisu je něco, o čem se na LKML diskutovalo už před několika lety. Nyní se tento nápad vrátil a souběžně s tím se podpora této funkce řeší i ve Wine. A důvod? Tato funkce je používána především na Windows; na Linuxu sice historicky podpora pro zamykání souborů existuje, ale její užívání (a respektování) je naprosto volitelné. Přesněji řečeno: najít linuxovou aplikaci, která zamykání používá nebo alespoň respektuje, dá docela zabrat.
Kromě Linuxu se tento námět objevil i na mailing listu NetBSD.
Příznaky O_DENY* se od flock odlišují tím, že práce s nimi je atomická – o případném neúspěchu se tedy dozvíte už při otevírání souboru pomocí open() a uzamčení můžete rovněž provést už při otevírání. Zatím to ale vypadá, že i tak bude mechanismus O_DENY* nějakým způsobem volitelný (aplikace NEBO systémy nepoužívající příznak „chci respektovat zámky“ nebudou ovlivněny), protože uživatelé unixových systémů nejsou na tuto „šikanu“ z Windows navyklí a zvykat si nechtějí, proto ani nepřekvapí, že se podpora zamýšlí hlavně do síťovýcḧ systémů souborů CIFS a NFS.
Toť úvod. Jadernou část diskuze ponechme do případných Jaderných novin a podívejme se na debatu, která se odehrála na wine-devel. Pavel Shilovsky (mluvící o patchi pro Linux):
Tento patch přidává podporu příznaků O_DENY* do linuxové souborové vrstvy. Tyto příznaky mohou být používány libovolnou aplikací, která potřebuje používat řízení přístupu k souborům. VFS už podobnou schopnost má – nyní se to dělá přes mechanismus flock/LOCK_MAND, ale tento přístup není atomický. Tento patch přidává nové schopnost navrch existující podpory, ale nemění nic na voláních flock.
Příznaky mohou být používány v serverech NFS (vestavěných do jádra) a CIFS (Samba) a v aplikacích ve Wine skrze VFS (pro místní systémy souborů) nebo moduly CIFS/NFS. Toto pomůže například tehdy, kdy Samba a NFS server sdílejí ten samý adresář pro uživatele na Windows a na Linuxu nebo aplikace ve Wine používají sdílení Samba/NFS pro přístup ke stejným datům z různých klientů.
Vzhledem k předchozím diskuzím je nejpalčivější otázkou to, jak zabránit situacím jako DoS útokům, kdy např. /lib/liba.so může být otevřeno s příznakem DENYREAD nebo něčím takovým. To je důvod, proč je navíc přidán příznak O_DENYMAND. Nižším vrstvám se tak dává najevo, že aplikace chce používat vlastnosti příznaků O_DENY*. Zamezuje to dopadu na nativní linuxové aplikace (které O_DENYMAND nepoužívají) – takže tyto příznaky (a s tím spojená sémantika systémového volání open) jsou používány jen u aplikací, které to chtějí.
Takže tedy máme čtyři nové příznaky:
[...]
J. Bruce Fields se ozval s tím, že mu tento polovičatě mandatorní přístup nepřijde zrovna dobrý.
Mám tak trochu obavy: jde o mandatorní zámky a aplikace, které je používají, jsou zvyklé na to, že jsou správně vynucovány. Jsme si jistí, že aplikace, která otevře soubor s O_DENYWRITE nehavaruje, jakmile jí někdo bude pod rukama měnit data?
Obecně jsem z nápadu mít volitelně povinné zamykání nervózní. Raději bych viděl něco jako volbu pro mount, aby všichni věděli, že ostatní hrají na tomto systému souborů podle stejných pravidel, ale stále bychom měli možnost mít systémy souborů jako / bez této volby.
Zbytek diskuze se dále točil okolo volitelnosti těchto zámků. Zatím to vypadá, že se všichni (snad i včetně autora patche) přiklánějí k nové volbě pro mount.
Implementovat Direct3D navrch OpenGL je pracné. Dosahovat srovnatelného výkonu je ještě pracnější. Sám se o tom přesvědčuje Graham Knap, kterému vadí nižší výkon StarCraft II pod Wine:
Rád bych pomohl se zlepšením výkonu StarCraftu II pod Wine. Pracuji na tom s kamarádem. Během uplynulých týdnů jsme se snažili číst veškerou dokumentaci, co jsme našli. Různými způsoby jsme se to snažili profilovat, bez výrazného úspěchu.
Můj kamarád rozchodil WineD3D pod Windows. Sestavili jsme Wine z aktuálních zdrojáků, zkusili jsme to na dvou různých konfiguracích a máme podobné výsledky. [...]
Vypadá to, že WineD3D je příčinou většiny rozdílu ve výkonu. Windows se svým D3D nám dávají alespoň dvojnásobné FPS než Windows + WineD3D. Je tam i rozdíl mezi Windows + WineD3D a Linux + Wine, ale ten je mnohem menší, takže třeba něco jako 25 %.
Mohl by nám někdo poradit, jak najít nejvýznamnejší příčiny rozdílu ve výkonu? Nějaké tipy, jak to efektivně profilovat nebo trasovat?
Přispěchal Stefan Dösinger, který upozornil, že zlepšení výkonu není něco, co by se dalo vyřešit jen tak za víkend. Dále řekl, že je nutné rozlišovat mezi nedostatkem výkonu CPU a GPU. Pokud má změna rozlišení za následek výrazný rozdíl ve FPS, pak je problém zjevně v povelech pro GPU. Pokud zůstane výkon podobný, pak je zádrhel přímo na straně softwaru, kterému nestačí výkon CPU.
Graham za několik dnů přišel s informacemi, jak to vlastně je. A podle všeho výkon omezuje CPU:
Jak jsem uvedl v bugu Wine #24558, musím použít taskset, abych dostal vůbec nějaký rozumný výkon.
$ taskset -a -p 2 `pidof SC2.exe` $ taskset -p 1 `pidof SC2.exe`
Nejsem si jist, jestli to je vůbec chyba ve Wine. Řekl bych, že je to jen odlišnost v plánovači OS a správě výkonu. SC2 by asi mělo nastavit CPU affinity, ale neřekl bych, že to dělá.
Nastavení detailů grafiky a rozlišení obrazovky nemá na FPS velký vliv, takže si myslím, že nás omezuje CPU.
Na návrh zkusit omezit používaná CPU přímo ve Windows pak odpověděl:
To má rozhodně vliv. FPS během drobné nahrané bitvy:
Graham pokračoval výčtem způsobů, jak se snažili příčinu nedostatečného výkonu odhalit. Zkoušeli i nástroj perf, ten ale nedokázal ani při kompilaci s -ggdb pojmenovat symboly adresy v některých knihovnách Wine. Debata pak bohužel ustala.
Program | Původní stav/verze | Nový stav/verze | Změna |
Praetorians 1.04 | Garbage (1.5.22) | Gold (1.5.27) | +3 |
Defenders of Ardania Release | Garbage (1.4) | Gold (1.5.23) | +3 |
Frogger Windows | Bronze (1.3.16) | Garbage (1.4.1) | -1 |
Share EX2 | Garbage (1.3.37) | Silver (1.4.1) | +2 |
Praetorians 1.02 | Garbage (1.5.22) | Gold (1.5.25) | +3 |
La-Mulana (Remake) 1.3.3.1 | Garbage (1.5.20) | Silver (1.5.25) | +2 |
League of Legends 1.61.xx | Bronze (1.5.26) | Gold (1.5.27) | +2 |
Mavis Beacon Teaches Typing 15 | Garbage (1.1.41) | Bronze (1.4.1) | +1 |
Notepad++ 6.3 | Gold (1.5.22) | Silver (1.5.25) | -1 |
Paint Windows NT and Windows XP | Silver (1.0.1) | Platinum (1.4.1) | +2 |
SlingPlayer 2.0 | Bronze (1.5.12) | Silver (1.5.26) | +1 |
Wonderland Secret Worlds 1.00 | Gold (1.0.1) | Platinum (1.5.27) | +1 |
Quicken 2011 Home & Business | Bronze (1.3.21) | Silver (1.4.1) | +1 |
Postal 2 Postal2STP-FreeMP | Platinum (1.1.14) | Gold (1.4) | -1 |
Wizard101 Final Live Version | Silver (1.5.12) | Gold (1.5.25) | +1 |
Last Chaos 2.0 | Gold (1.4) | Silver (1.5.26) | -1 |
Angry Birds 3.0.0 | Gold (1.5.23) | Platinum (1.5.27) | +1 |
Sacred 1.8.26 | Silver (1.2-rc3) | Gold (1.4.1) | +1 |
Sacred 2.02.5 --> 2.28 | Silver (1.4-rc6) | Gold (1.4.1) | +1 |
Celková změna | +21 |
Program | Původní stav/verze | Nový stav/verze | Změna |
Heroes of Might and Magic III Complete: 4.0 | Gold (1.3.26) | Platinum (1.4.1) | +1 |
Adobe Fireworks MX | Bronze (1.2.1) | Gold (1.4.1) | +2 |
Sim Tower 1.0 | Silver (1.4.1) | Gold (1.5.24) | +1 |
Origin 7.5 | Silver (1.1.31) | Gold (1.4.1) | +1 |
Anarchy Online Internet Play | Platinum (1.5.24) | Garbage (1.5.25) | -4 |
Façade 1.1b | Silver (1.3.16) | Bronze (1.5.25) | -1 |
Battlefield Bad Company 2 Retail BFBC2 | Gold (1.3.28) | Bronze (1.4.1) | -2 |
Broken Sword – Shadow of the Templars Director's C... | Platinum (1.4) | Gold (1.4.1) | -1 |
The Lord of the Rings: The Battle for Middle-Earth... | Bronze (1.2.2) | Gold (1.5.26) | +2 |
Deus Ex: Invisible War Steam version 1.2 | Bronze (1.3.6) | Garbage (1.5.27) | -1 |
Big Oven 1.8.978 | Gold (0.9.58) | Garbage (1.5.26) | -3 |
Age of Wonders: Shadow Magic GOG Version | Platinum (1.4) | Gold (1.4.1) | -1 |
Mass Effect 3 1.0 | Platinum (1.5.1) | Gold (1.5.25) | -1 |
Scirra Construct 2 | Gold (1.3.36) | Silver (1.4) | -1 |
Origin Latest Release | Garbage (1.5.22) | Silver (1.5.27) | +2 |
Pro Evolution Soccer 2013 1.0 | Gold (1.5.17) | Platinum (1.5.26) | +1 |
Need for Speed: Underground 1.4 | Platinum (1.5.17) | Garbage (1.5.27) | -4 |
Visual Studio 2010 (10.0) | Garbage (1.3.31) | Bronze (1.5.26) | +1 |
7.62 – High Calibre 1.11 | Silver (1.5.15) | Gold (1.5.24) | +1 |
Thief: The Dark Project 1.19 Support (Unofficial, ... | Platinum (1.5.19) | Gold (1.5.25) | -1 |
Aliens vs. Predator (2010) Steam | Gold (1.5.16) | Platinum (1.5.25) | +1 |
Pharaoh Cleopatra: Queen of the Nile: 2.1 | Platinum (1.3.27) | Silver (1.4.1) | -2 |
PKR Latest | Gold (1.3.16) | Silver (1.4.1) | -1 |
Tales of Monkey Island: Chapter 1 – Launch of the ... | Gold (1.3.7) | Bronze (1.4.1) | -2 |
The Lord of the Rings: The Battle for Middle-Earth... | Silver (1.3.11) | Gold (1.5.26) | +1 |
The Settlers II: 10th Anniversary 1.x | Gold (1.5.18) | Platinum (1.5.25) | +1 |
Kingdoms of Amalur: Reckoning Full-Steam | Bronze (1.4-rc4) | Gold (1.5.25) | +2 |
Trackmania 2 Stadium open beta | Platinum (1.5.24) | Gold (1.5.26) | -1 |
Orcad 10.x | Garbage (1.1.19) | Bronze (1.4) | +1 |
SimCity 2000 1.0 | Bronze (1.2.2) | Silver (1.5.26) | +1 |
World of Warcraft 5.2 | Silver (1.5.26) | Platinum (1.5.27) | +2 |
Tropico 2: Pirate Cove 1.2 | Gold (1.3.8) | Silver (1.4.1) | -1 |
Ace of Spades Steam | Garbage (1.5.23) | Bronze (1.5.26) | +1 |
Multimedia Fusion 2.0 | Platinum (1.1.42) | Silver (1.4.1) | -2 |
CorelDRAW X3 (13) | Garbage (1.4) | Bronze (1.5.26) | +1 |
Grand Theft Auto 1.0 | Garbage (1.2.2) | Gold (1.4.1) | +3 |
IETester 0.4.2 | Garbage (1.3.11) | Bronze (1.5.26) | +1 |
Hotline Miami GOG.com | Platinum (1.5.18) | Bronze (1.5.25) | -3 |
Balls of Steel GOG | Garbage (1.5.22) | Bronze (1.5.27) | +1 |
Wizardry Gold 1.1a | Silver (1.3.20) | Platinum (1.4.1) | +2 |
Assassin's Creed III 1.0 | Bronze (1.5.20) | Garbage (1.5.25) | -1 |
Age of Empires II The Conquerors Expansion | Platinum (1.4) | Gold (1.5.25) | -1 |
Path of Exile 0.10.x (Open Beta) | Gold (1.4) | Bronze (1.4.1) | -2 |
ChessBase Light 2009 | Gold (1.2.1) | Bronze (1.4) | -2 |
Dragon Age: Origins 1.x | Garbage (1.5.20) | Bronze (1.5.26) | +1 |
A New Beginning Demo | Platinum (1.3.19) | Gold (1.5.26) | -1 |
Rosetta Stone 4.5.5 | Platinum (1.5.24) | Gold (1.5.25) | -1 |
Panzer General 3D Assault GOG 1.01 | Garbage (1.2-rc2) | Platinum (1.4) | +4 |
Mount&Blade 1.003 | Bronze (1.1.27) | Silver (1.4) | +1 |
Payday: The Heist Steam | Silver (1.5.22) | Platinum (1.5.26) | +2 |
Railworks 3: Train Simulator 2012 Steam | Garbage (1.5.0) | Gold (1.5.26) | +3 |
DX-Ball 1.x | Bronze (1.1.38) | Silver (1.4.1) | +1 |
TERA Online NA Retail | Silver (1.5.26) | Gold (1.5.27) | +1 |
Tony Hawk's Pro Skater 2 1.1 | Platinum (1.2) | Silver (1.5.26) | -2 |
Logger Pro 3.8 | Garbage (1.5.2) | Silver (1.5.25) | +2 |
Train Simulator 1.2 | Gold (1.2.2) | Silver (1.4.1) | -1 |
Amazon Kindle for PC 1.10.5 | Gold (1.4.1) | Garbage (1.5.24) | -3 |
The Witcher 2: Assassins of Kings PC-DVD | Platinum (1.3.34) | Gold (1.5.26) | -1 |
GitHub for Windows 1.0 | Bronze (1.5.23) | Garbage (1.5.25) | -1 |
ElsterFormular 14.x | Platinum (1.4) | Gold (1.5.25) | -1 |
Uprising: Join or die 1.0 | Garbage (1.1.11) | Gold (1.5.25) | +3 |
Yume Nikki (Dream Diary) v0.10 English | Gold (1.1.44) | Platinum (1.4) | +1 |
Spotify 0.8.x | Bronze (1.4.1) | Platinum (1.5.24) | +3 |
Blitzkrieg Blitzkreig Anthology | Bronze (1.2-rc7) | Gold (1.5.26) | +2 |
Left 4 Dead 2 Left 4 Dead 2 Full (Steam) | Gold (1.5.21) | Silver (1.5.25) | -1 |
San Andreas Multiplayer 0.3x | Gold (1.4) | Platinum (1.4.1) | +1 |
Visual Studio 2008 (9.0) | Garbage (1.3.34) | Bronze (1.5.24) | +1 |
Cheat Engine 6.x | Bronze (1.5.0) | Platinum (1.5.24) | +3 |
Call Of Duty: Modern Warfare 2 Retail | Gold (1.2.3) | Platinum (1.5.26) | +1 |
Dawn of Magic 1.0 | Garbage (1.3.18) | Silver (1.5.25) | +2 |
LTspice/Switcher CAD 4.x | Platinum (1.2.3) | Silver (1.4.1) | -2 |
The Sims 3 All | Platinum (1.4) | Gold (1.4.1) | -1 |
Command & Conquer: Generals 1.0x | Platinum (1.5.20) | Gold (1.5.27) | -1 |
Vietcong 1.60 | Bronze (1.5.22) | Garbage (1.5.26) | -1 |
Earth 2160 GoG.com version | Garbage (1.1.44) | Silver (1.4.1) | +2 |
Mark of the Ninja Steam | Platinum (1.5.20) | Gold (1.5.27) | -1 |
Unreal Development Kit (UDK) February 2013 Beta | Bronze (1.5.24) | Silver (1.5.25) | +1 |
Diablo III 1.0.* | Bronze (1.5.24) | Platinum (1.5.26) | +3 |
Guild Wars All Versions | Bronze (1.5.22) | Platinum (1.5.25) | +3 |
The Return of the Incredible Machine: Contraptions... | Platinum (1.3.20) | Garbage (1.4.1) | -4 |
Unity 4.0.1 | Silver (1.5.22) | Bronze (1.5.25) | -1 |
MetaTrader 4.x | Garbage (1.4) | Gold (1.4.1) | +3 |
Heroes of Might and Magic III The Restoration of E... | Silver (1.3.4) | Platinum (1.4.1) | +2 |
Antichamber Steam | Silver (1.5.23) | Garbage (1.5.26) | -2 |
Startopia 1.x | Platinum (1.2.3) | Bronze (1.4.1) | -3 |
PaintTool SAI 1.1.0 | Platinum (1.4) | Silver (1.5.24) | -2 |
Myst III: Exile 1.x | Platinum (1.4) | Garbage (1.4.1) | -4 |
Boulder Remake 2.1 | Bronze (1.5.12) | Gold (1.5.27) | +2 |
Tomb Raider (2013) 1.0 | Garbage (1.5.24) | Gold (1.5.25) | +3 |
Deliplayer 2.50 Public Beta 1 | Garbage (0.9.12) | Gold (1.5.26) | +3 |
GeneRally 1.2c | Gold (1.4) | Platinum (1.5.25) | +1 |
Supreme Commander FA 1.x.3xxx | Gold (1.5.23) | Platinum (1.5.25) | +1 |
Age of Pirates – Caribbean Tales 1.4 | Garbage (1.1.37) | Bronze (1.5.27) | +1 |
ChemSketch 12.0 | Silver (1.2) | Platinum (1.4.1) | +2 |
Soldier of Fortune II: Double Helix 1.03 | Platinum (1.4-rc5) | Gold (1.4.1) | -1 |
Oni 1.0 | Silver (1.5.1) | Gold (1.5.25) | +1 |
Evernote 4.6 | Platinum (1.4) | Silver (1.4.1) | -2 |
CodeVision AVR 2.03.4 | Gold (1.1.14) | Silver (1.4.1) | -1 |
SMITE Beta | Bronze (1.5.19) | Garbage (1.5.22) | -1 |
Polar ProTrainer 5.40.172 | Gold (1.3.28) | Silver (1.4.1) | -1 |
CPU-Z 1.x | Bronze (1.3.32) | Garbage (1.5.26) | -1 |
Need For Speed: World current | Gold (1.5.21) | Garbage (1.5.25) | -3 |
Celková změna | +8 |
To je sice pravda, ale snadno se tomu zabrání. Počítám, že taky nebrojíte proti hláškám typu "opravdu chcete naformátovat tenhle oddíl?". Nebo nechcete, aby vám správce souborů mazal nevratně soubory po stisknutí delete bez potvrzení.Takovehle hlasky nastesti nikde nemam a doufam, ze se to nezmeni. K cemu ta hlaska je, to jako testuje, jestli jsem behem par us, nez se objevi, nezmenil nazor?
... nebo vám na ní nešlápl kocour.Tohle je bezesporu zásadní problém. Ty bestie chlupaté se totiž strašně rádi válí na klávesnici na které právě někdo pracuje a program který to nebere v potaz je jednoduše špatně navržen.
mkfs
se neptá, jestli má formátovat, prostě konzolové aplikace předpokládají, že víte, co děláte. Pokud chcete něco, co se ptá, použijte klikací aplikaci.
Jo, to zamykání, to je věc. x264 se pro Windows kompiluje pomocí MinGW (Ming Nemilosrdný...), takže to pochytilo tyhle unixové móresy. Už se mi stalo, že při nechtěném spuštění další instance enkodéru přepsalo druhé x264 tomu prvnímu jeho výstupní soubor (o velikosti několika GB). Ani jedna z instancí si vůbec nevšimla, že se děje nějaká nepravost (i když došlo k totálnímu znehodnocení výstupu) a vesele pokračovaly v už zbytečném enkódování. Bylo to svým způsobem i legrační - ten enkodér, co byl pozadu, zkrátil výstupní soubor na nulu (a postupně pak začal přidávat), pak ten první enkodér, který už měl několik giga hotových, když chtěl zapsat další data, zase začal zapisovat tam, kde si myslel, že předtím skončil, čímž se soubor opět nafoukl nulami na původní velikost... akorát teď nevím, jestli pak ten druhé enkodér přepisoval vnitřek toho souboru, nebo pořád zkracoval.Todle chovani je velmi zadouci v pripade, ze chcete zkratit logovaci soubor nejakeho demona.
Hele, chapu, ze te jednou vypekl x264 encoder, ale spravne reseni by bylo, aby se te zeptal jestli chces pokracovat, i kdyz soubor uz existuje (na to je v unix konvenci prepinac -f).-f/--force obvykle znamená pravý opak :)
Tak tak, říkal jsem to už u několika minulých Zpravodajů, nejde jen o -4, ale často i třeba o -2 nebo -3. Tak třeba NFS: WC - autor "garbage" hodnocení podle všeho nečetl ani druhý post, který jasně říká, co dělat.
Prakticky se stává velmi zřídka, že by se zhoršila podpora pro nějakou hru / aplikaci. Mě se to stalo jen u SW: Jedi Academy, která mi na wine 1.1.x fungovala bez problémů a workaroundů, a na 1.3.x se mi ji nepodařilo rozjet. Na 1.5.x to podle všeho zase funguje.
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.