vyznam procfs a fdescfs

Dan Lukes dan at obluda.cz
Sat Apr 22 08:59:16 CEST 2017


Miroslav Lachman wrote:
> Mam na zacatek takovy trivialni dotaz: k cemu slouzi procfs a fdescfs 
> napriklad pro Bash a OpenJDK? 

Na takovouhle otazku nelze odpovedet obecn - jen konkretne.

Bash, pokud spravne nahlednutim do zdrojaku soudim, fdescfs v zasade 
nepouziva. Akorat bez nej nefunguje presmerovani na /dev/fd/... - takze 
se da rict, ze fdescfs potrebujes k tomu, aby bash umel vsechno co je v 
manualu napsane, ze umi.

To Java je jinej bumbrdlicek, takze daleko slozitejsi odpoved. Ono se v 
kodu ne uplne lehce poznava, kdy se konkretni kod pouziva i na FreeBSD a 
kdy jen na nejakem jinem OS. Urcite se ale pouziva /proc/curproc/map 
takze bez nej nebude fungovat napriklad funkce 
getCommittedVirtualMemorySize(). Zda to opravdu bude necemu vadit zalezi 
na tom, zda ji aplikaci vubec pouziva a pokud ano, tak jak reaguje na 
to, ze volani selhalo. Ze by Java na FreeBSD k necemu pouzivala fdescfs 
v kodu nejak nevidim.

> O co teda prichazim, kdyz /proc nemam a ps a w pouzivam?

Nejak nevidim, ze by soucasne ps nebo w /proc pouzivalo.

> Myslim, ze na Linuxu je /proc defaultne primountovany a bez nej by tam 
> asi spousta veci nefungovala, ale u FreeBSD mi nikdy neprislo, ze bych 
> mel /proc mountovat.

Na Linuxu je /proc zakladnim nastrojem pro predavani nekterych informaci 
mezi kernelem a aplikacemi (zejmena scripty). V BSD svete ma tuhle roli 
sysctl strom a odkazy na procfs pochazeji predevsim z prevzateho 
Linuxoveho kodu. A toho by v zakladnim systemu uz melo byt pomalu, 
respektive, zadny.

> Je tam tahle funkce, ktere asi uplne nerozumim

Ne ze bych tusil co je zrep, ale ta funkce se pokousi vyrobit zamek a to 
pomoci symlinku /var/run/zrep.lock smerujiciho na /proc/${OWN_PID}.

Zamek ma patrne slouzit k synchronizaci mezi hlavnim zrep procesem a z 
nej pripadne spoustenymi syny.

PID hlavniho procesu, ktery znaji vsichni, pouzivaji jako jedinecny 
identifikator zamku.

> Jelikoz jsem v zrep uz delal nejake vlastni upravy, aby to fungovalo se 
> sudo, tak bych docela rad prepsal tuhle funkci tak, aby nepotrebovala 
> /proc, ale aby zustala zachovana funkcnost / spolehlivost toho zamku.

Ta funkce /proc vlastne az tak moc nepotrebuje. Udelat symlink na 
/proc/$$ muzes aniz nejakej /proc vubec existuje. Takze staci odstranit 
ten test na to, ze /proc existuje.

Zadrhel nastane jen se 'stale lock' detekci, kde oni zjistuji, zda 
proces, ktery lock drzi, stale existuje (pokud ne, je lock 'stale'). A 
zjistuji to testem existence /proc/$lockpid - tenhe test musis prepsat a 
to, zda v systemu bezi proces s $lockpid testovat jinak, bez proc.

Treba
if ps -axo pid | tr -d ' '  | grep -q "^$lockpid\$" ; then

> V historii na GitHubu jsem nasel, ze se ve starsim kodu pouzival lockf

No a nebo tak. Skoro mi pouziti lockf pripada snazsi nez se patlat s 
vlastni obsluhou delani symlinku ...

> ale taky ze ho kvuli nejakemu bugu odstranili
> https://github.com/bolthole/zrep/commit/bae9a5fb6f2a14a1765d5675879d7171ad805c7f 

Musel bys zjistit jaky meli doopravdy problem - ono to mohlo byt neco, 
co na FreeBSD problemem neni a pak to proste muzes vratit do stavu v 
jakem to meli pred {u|o}pravou.

Dan




More information about the Users-l mailing list