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