Az interfész lehetővé teszi, hogy egy kisebb, természetesen nyílt forrású kernel driver használata mellett a driver-ek többsége a userspace-ben legyen implementálva.
Milyen előnyei vannak ennek az elképzelésnek:
- a gyártók ezentúl simán írhatnak zárt forrású driver-t ehhez az interfészhez, megszűnik a vita, hogy a kernelbe nem lehet bináris driver-t tölteni, mert itt a driver az userspace-ben fut
- a kernelváltásokkor újrahasznosítható a driver, mivel az API stabil marad
Linkek:
Linux kernel 2.6.23 to have stable userspace driver API
New driver interface for Linux kernel
UIO: Add the User IO core code
UIO commit
- A hozzászóláshoz be kell jelentkezni
- 2624 megtekintés
Hozzászólások
Andy Tanenbaum pedig elégedetten mosolyog magában. :)
---
Sok gyerekkel ellentétben én sose akartam tűzoltó lenni. Lettem helyette informatikus. Nem találjátok ki, hogy mit csinálok nap mint nap...
- A hozzászóláshoz be kell jelentkezni
közben gkh stable api nonsense slideokat vetít
- A hozzászóláshoz be kell jelentkezni
az kernel api, ez meg userspace api a kernelmoduljaid baszkurálásához
--
"SzAM-7 -es, tudjátok amivel a Mirage-okat szokták lelőni" - Robi.
- A hozzászóláshoz be kell jelentkezni
troll-kodásnál ez nem szempont :)
--
trey @ gépház
- A hozzászóláshoz be kell jelentkezni
azt a mindenit
- A hozzászóláshoz be kell jelentkezni
Vazzeg! :DDD Még jó, hogy csukva az ajtó és a család nem ébred föl a röhögésemre. :))
--
Sokan nincsenek tudatában annak, / hogy egyszer mindenki meghal. / Akik ráébrednek erre, / azonnal abbahagyják az ellenségeskedést.
- A hozzászóláshoz be kell jelentkezni
:) Majdnem, vagy pont ellenkezoleg, a hajat tepi, hogy miert nem irnak egy mikrokernel architekturaju cuccot, ha mar ennyi sajatossagat "lekoppintotta" egy alapvetoen azert monolitikus kernel. Bar errol meg sokan azt mondjak hogy igy van ez jol, mert a "teljesen tiszta" mikro/monolitikus felepites helyett erdemes probalkozni a technikak otvozesevel is.
- A hozzászóláshoz be kell jelentkezni
hibrid kernel?
- A hozzászóláshoz be kell jelentkezni
Kíváncsi leszek, a legnagyobb bináris drivereket szállító cégek mikor állnak át az UIO-ra.
- A hozzászóláshoz be kell jelentkezni
ha majd használható lesz bármi értelmesre
- A hozzászóláshoz be kell jelentkezni
Ezt hogy érted? Értelmetlennek tartod UIO-t? Vagy valami más probléma van vele?
- A hozzászóláshoz be kell jelentkezni
'a legnagyobb bináris drivereket szállító cégek'-re vonatkoztatva:
"[..] DMA transfer between userspace and kernelspace is not yet implemented. This means essentially that drivers which involve high traffic are not an option yet. So graphic drivers as well as file system drivers and similar cannot use this API at the moment"
- A hozzászóláshoz be kell jelentkezni
Épp most olvastam el a cikket és sejtettem, hogy erre gondolsz.
- A hozzászóláshoz be kell jelentkezni
Mi a maci? file system driverre mar van userspace megoldas, ugy hivjak FUSE.
- A hozzászóláshoz be kell jelentkezni
file system drivers and similar cannot use this API
- A hozzászóláshoz be kell jelentkezni
a fuses api is fos lassu, ugyhogy tokmindegy.
amugy mi a retkes hetszentsegert ne hasznalhatnak. max
nem a legjobb, mert nincs DMA transzfer. a fuse is ezert lassu
mint allat.
- A hozzászóláshoz be kell jelentkezni
Hmmm, nem vagyok egy FUSE szakértő, de mi az hogy egy API lassú? Ez nekem egy kicsit hülyén hangzik, már bocsánat. Szerintem ha egy API lassú akkor ott valami nagyon nagy tervezési gondok vannak. SZVSZ.
- A hozzászóláshoz be kell jelentkezni
ohm, ize.
igazad van, faradt vagyok. ugy ertem, hogy az API nem ad arra
lehetoseget, hogy GYORSAN mozgassak adatokat az userspace
es kernelspace kozott.
- A hozzászóláshoz be kell jelentkezni
Szóval utánanéztem egy kicsit a dolognak és én őszintén szólva nem látom igazán, hogy miben akadályoz a fuse apija. Egy tipikus (lokális blokkos eszközön lévő) filerendszer esetén három fő adatmozgatási probléma van. Az egyik, ami szorosan kapcsolódik a fuse apihoz hogy a write függvényen keresztül pointerrel kapott adattömböt hogyan is kapod meg, illetve a read függvényen keresztül hogyan adod vissza a tömböt. A másik jellegű probléma, hogy hogyan éred el a nyers eszközt, amin a filerendszer ténylegesen tárolva van. A harmadik, hogy maga a filerendszer implemnetáció meg tudja-e úszni memóriamásolás nélkül, hogy az eszközről kapott blokkot kiadja a read függvénnyel, illetve a write-tal kapott blokkot egy az egyben bele tudja-e mappelni az eszköz területére.
Egy akármilyen userspace program kérheti a kernelt, hogy mappeljen be neki egy filet memóriatartományba, az mmap pont erre való. Az, hogy utána a hozzáférések ténylegesen hogyan zajlanak, vagyis kell-e memóriamásolást végezni az device file-t biztosító filerendszer implementációjától függ. A /dev/hdX /dev/sdX jellegű blokkos eszközök esetén közvetlenül a hardver driver szolgálja ki a kéréseket. Az hogy használ-e dma-t a hardver és ha igen, a dma célpufferből kell-e másolgatni az a hardver driver belső magánügye. Tehát ezidáig én úgy látom, hogy a fuse és egy natív filerendszer driver között nincs érdemi különbség. Tény, hogy az mmap a page-ek userspacebe átmappelésekor több ellenőrzést végez, mintha a kernelen belül férnénk hozzá, de ez az ellenőrzés nem hiábavaló, ugyanis megakadályozza, hogy az esetleg a hibásan működő fs kód kicímezzen a tartományból és ezzel gyakorlatilag a kernelben akármit felülírjon. (Az ilyen kicímzések piszok nehezen megfogható hibák, legalábbis én régebben igen sokat szoptam mikor ilyet kellett debuggolnom. A fő baj vele, hogy egészen máshol bukik ki a hibajelenség, mint ahol az oka van.) Egy jó megbízható natív filerendszer implementációnak saját magának is célszerű ellenőrzéseket végeznie. Tehát a második probléma szerintem megoldható memóriamásolás nélkül is, illetve ha a hw driver miatt mégsem, akkor az egyformán sújtja a nativ filerendszert és a fuse-t is.
Az első számú probléma, vagyis a fuse api hívásokban átadott pointerek által hivatkozott tömbök kezelése a fuse core implementáció felelőssége. Mivel elég triviális leképezés van a vfs hívások és a fuse között, ezért szerinten ez is megúszható másolás nélkül egy mmap hívással. Kérdés, hogy így van-e megoldva. Ha nincs elvi akadálya, de mégsem így van, azon csodálkoznék, de mindenesetre a későbbiekben akkor ez fejleszthető.
A harmadik vagyis a belső adatmozgatás a mappelt eszköz és a read/write tömbjei között, na ez egy cseles kérdés. int (*read) (const char *, char *, size_t, off_t, struct fuse_file_info *); Ha kétszeres indirekció lenne a második paraméternél, akkor triviális lenne a válasz, hogy lehet másolás nélkül, csupán pointerbűvészkedéssel tömböt átadni. Enélkül probléma az, hogy a read egy kívülről adott címen várja az adatot, amit belülről nem tudok befolyásolni. Nade nem ugyanez a helyzet a natív vfs esetén is? Tehát 1db másolást sehogyan sem lehet megúszni? Arról meg aztán nem is beszélve, hogy sok esetben a filerendszer nem is 1:1 tárolja az fájlok tartalmát. Titkosítás, tömörítés egyértelmű, bár nem túl elterjedt, de pl az inode mezőkbe elrakott rezidens fájlok sem túl egyszerűek (asszem az ext3-ban még vannak). Ráadásul memória mappeléssel csak egész számú page-et lehet átadni, viszont úgy tudom, hogy a read/write függvényeket tetszőleges számú charból álló tömbbel lehet hívni. Ez alól a kernel módban futó fs sem kivétel.
Lehet, hogy van valami amit nem teljesen jól tudok, vagy átsiklottam felette, de egyelőre úgy látom, hogy a fuse nem jelent semmi különös megszorítást a vfs metódusaihoz képest.
---
Sok gyerekkel ellentétben én sose akartam tűzoltó lenni. Lettem helyette informatikus. Nem találjátok ki, hogy mit csinálok nap mint nap...
- A hozzászóláshoz be kell jelentkezni
na, ez jokis osszefoglalas lett :-)
amit en tapasztaltam az az, hogy valami _iszonyat_ lassu az, ha pl fuses filerendszerre
irsz. es nem ugy csinaltam, hogy a write() -ba openeltem, fwrite, majd fclose, hanem
egyszer openeltem az opennel, es utana csak write(). mmappal is megneztem, nem volt
sokkal gyorsabb [van egy bactam el a merest, ez esetben mea culpa, es a kodom szar].
nem raw devicet hasznalok, mert nekem mar letezo filerendszerek fole kellett irnom egy
logikai filerendszert, de a tenyleges adattarolas ext3/xfs -en tortent.
11mega/s fole nem ment, pedig u320 -s scsin zuztam.. fusen keresztul legalabbis.
amugy ment szepen.
- A hozzászóláshoz be kell jelentkezni
Akkor lehet, hogy a fuse core csinál valamit buta módon vagypedig a meglévő filerendszer főlé építés okozza a valahogy bajt. A fuse-ntfs úgy rémlik, hogy nem volt ennyire lassú. A top mit mutat mérés közben? user vagy system time a domináns?
---
Sok gyerekkel ellentétben én sose akartam tűzoltó lenni. Lettem helyette informatikus. Nem találjátok ki, hogy mit csinálok nap mint nap...
- A hozzászóláshoz be kell jelentkezni
system... ebbol gondolom en, hogy ott van valami galiba.
- A hozzászóláshoz be kell jelentkezni
Aha. Akkor valszeg ráférne némi profiling a linuxos fuse implementációra. Mondjuk szerintem lesz is ember aki erre rá fogja vetni magát hamarosan. :)
---
Sok gyerekkel ellentétben én sose akartam tűzoltó lenni. Lettem helyette informatikus. Nem találjátok ki, hogy mit csinálok nap mint nap...
- A hozzászóláshoz be kell jelentkezni
A filerendszernek minek a DMA egyáltalán? Szerintem te inkább valami mmap vagy zero copy io funkcionalitással kevered a dolgot. Más kérdés, hogy nem ismerem a fuse api-t annyira, hogy ki tudjam jelenteni, hogy ez a lehetőség tényleg hiányzik belőle. Elméletileg szerintem a fuse-nak nem szabadna lassabbnak lennie a natív filerendszer implementációknál, az az egy hívási indirekció, ami elkerülhetetlen a kernel-userspace átjáráshoz nem okozhat mérhető overheadet. Az viszont már igen, hogyha kikényszerít bizonyos bementi paraméter/visszatérési érték ellenőrzést, na de enélkül fs drivert írni eleve nagyon gáz ötlet. Talán a fuse driverek lassúsága inkább pont abból adódhat, hogy a fuse lehetetlenné tesz bizonyos gány, veszélyes, debuggolhatatlan, de gyorsan futó kódot eredményező programozási megoldásokat.
EDIT: időközben látom a fenti hozzászólásodat, hogy te is valójában mmap jellegű dologra gondoltál. Ez tényleg hiányzik a fuse-ból?
---
Sok gyerekkel ellentétben én sose akartam tűzoltó lenni. Lettem helyette informatikus. Nem találjátok ki, hogy mit csinálok nap mint nap...
- A hozzászóláshoz be kell jelentkezni
hogy belul mit hasznal, bevallom, nem tudom. en workaroundoltam a read()/write()
problemat, es megoldottam service szinten ezt a mappingot [oo, tudom, ez igy nem
igazan ertheto, de eleg bonyolult hogy mire kellett...]
az, hogy te mmappolsz a legelejen, es utana azt a fuses belso structban fi -kent
atadod, az elvileg mukodhet, de ahogy fent irtam, nem volt sokkal gyorsabb
mint az egyszeri open() utan fread()/fwrite(), majd close()
- A hozzászóláshoz be kell jelentkezni
Szukseges, ettol meg marad gaz.
- A hozzászóláshoz be kell jelentkezni
végre
- A hozzászóláshoz be kell jelentkezni
És most már a closed source module hirtelen legális lett? :-)
It doesn't matter if you like my song as long as you can hear me sing
- A hozzászóláshoz be kell jelentkezni
Mikor volt egy closed source program futtatása Linux userspace-ben illegális?
--
trey @ gépház
- A hozzászóláshoz be kell jelentkezni
Majd a GPLv4-el az lesz.
- A hozzászóláshoz be kell jelentkezni
Kímélj.
--
trey @ gépház
- A hozzászóláshoz be kell jelentkezni
És teljesítmény szintjén hogy állunk? Mert oké, szép dolog, de ha pl. csak két harmadát adja egy natív driver teljesítményének, akkor igen erősen meggondolandó a használata.
- A hozzászóláshoz be kell jelentkezni
Nem csak olyan driverek léteznek amik használatához óriási teljesítmény kell. Nem hiszem, hogy hanyattvág, ha 0,01%-ról felugrik a cpu használat 0,02%-ra. Viszont így olyan termékekhez is készülhetnek meghajtóprogramok amikhez jelenleg nincs, mert pl. nincs pénze a gyártónak, hogy az egyes kernelekhez hozzáigazítsa a meghajtóprogramjait.
- A hozzászóláshoz be kell jelentkezni
szerver: vagy rászánja az energiát, vagy kiadja a dokumtációt és megírják ingyen
asztal: egyszer megírják, azt csókolom, megy mindörökké... ámen ... és a sebesség? senkit nem érdekel ... nektek mennyi az átlagos terhelés az asztali gépen? ... nem elég? vegyél vasat vagy nyúlj a konkurenciához ...
hiánypótló, nem is kicsit
- A hozzászóláshoz be kell jelentkezni
Atól függ. Pl. a FAT driver kimehet userspace-be, vagy az iso9660, vagy a cifs. Erre már többen is gondoltak.
It doesn't matter if you like my song as long as you can hear me sing
- A hozzászóláshoz be kell jelentkezni
Es annak mi ertelme, hogy a jol mukodo drivereket kitegyuk userspacebe? (microkernel rulez?)
- A hozzászóláshoz be kell jelentkezni
megtudjuk ... idővel
- A hozzászóláshoz be kell jelentkezni
Gondolom debuggoltál már userspace alkalmazást. Próbálkozz most egy kicsit kernelspace debuggolással és rögvest rájössz, hogy mi az értelme ennek az egész mikrokernel stílusú felfogásnak. :)
---
Sok gyerekkel ellentétben én sose akartam tűzoltó lenni. Lettem helyette informatikus. Nem találjátok ki, hogy mit csinálok nap mint nap...
- A hozzászóláshoz be kell jelentkezni
En ezekrol a jol mukodo driverekrol beszeltem, minek debugolni ami mar jo ideje stabilan mukodik?
- A hozzászóláshoz be kell jelentkezni
Hát mondjuk én tudnék mondani, olyan "jól működő", "stabil" drivert, amit úgy ki kéne vágni userspacebe hogy csak úgy nyekken. (jfs). Az smbfs, cifs, stb hálózati filerendszereket meg azért, hogy javítsák a robosztusságát a hálózati hibákkal szemben. Illetve ha esetleg valami távolról kihasználható security bug van bennük, akkor userspace-ben van esély alacsony privilégiumszintre korlátozni a hibát, kernelspaceben ezt megoldani borzasztóan nehéz, ha egyáltalán lehetséges. Aztán itt van az ütemezés kérdése is. A userspaceben futó modul alapból preemptíven ütemezett, tehát nem tudja hosszú ideig összefüggően fenntartani a többi processt. A kernelspace moduloknál külön trükközni kell, hogy a preemptív ütemezés lehetséges legyen és a modul maga ezt lockok fenntartásával meg is tudja akadályozni. Erre ékes példa a reiserfs, amit komolyabb fs műveleteknél keményen meg tudja fogni a gépet (pl hang lejátszás szinte azonnal leáll, pedig az mp3 egy másik, ext3-as particióról megy) és ezt semilyen preemptív kernel ütemezés nem képes megszűntetni. Persze lehet aztán, hogy ennek a jelenségnek valami más kutyulás van a hátterében, de mindenesetre userspace-ben sokkal kevesebb vandálkodási lehetősége van egy fs drivernek.
---
Sok gyerekkel ellentétben én sose akartam tűzoltó lenni. Lettem helyette informatikus. Nem találjátok ki, hogy mit csinálok nap mint nap...
- A hozzászóláshoz be kell jelentkezni
Előre bocsájtom nem olvastam el UIO leírását.
User space USB -t olvastam anno. Ott absztrakciós réteget, csak egy lib formájában tudnál biztosítani, libnyomtató,libcamera,libscaner ilyesmi, kernel drivereknél ugyebár device nodokat használunk. Elég problémás, ha egy alkalmazást fel kell készíteni user space, és kernel space driverekre. Ha az az API képes olyan device node-nak látszó tárgyat csinálni (libusb, user space usb driver nem tud), amivel kernel drivernek látszik az user driver akkor, egy csomó USB kacat hoz jó lehet.
Ha PCMCIA/PCI cumokhoz tud hálózat/wifi (network) interface nek látszó tárgyat imitálni akkor ez is mogoldódik, de gigabit ethernethez nem ajánlom :)
A másik lehetőség ott ahol lehet, nem a kernel drivert interfacet tekinetni Abstrakciós rétegnek, hanem egy user space libet, ami azért is jó lenne, mert az alkalmazások nagyobb hordozhatóságát jelenthetné. Más Ósekre is implementálnák a lib API -ját, így az alkalmazás írónak nem kell foglalkoznia OS specifikus dolgokkal.
Egy mai gépen, nyomtató/scanner/web cam .., kis usb szarok, telefonok ..etc, user space miatti over headje elhanyagolható.
- A hozzászóláshoz be kell jelentkezni