Portál AbcLinuxu, 28. března 2024 11:52
pred par dny jsem upgradoval jadro na jednom stroji a myslim ze jsem zapnul takovou tu feature ktera rozdeluje cpu cas podle uid procesu (nasledujici problem muze a nemusi s tim souviset).
problem: na stroji vznika pomerne hodne procesu s ruznymi uid (to neovlivnim - server pro mnoho uzivatelu). na zaklade toho vznikaji a zanikaji adresare typu /sys/kernel/uids/uid
. pri kazdym takovym vzniku a zaniku se vygeneruje event pro udevd, kterej na zaklade toho pusti obsluzne skripty, viz kus strace:
execve("/sbin/udev", ["udev", "uids"], ["ACTION=remove", "DEVPATH=/kernel/uids/100000114", "SUBSYSTEM=uids", "SEQNUM=1905123", "HOME=/", "PATH=/sbin:/bin:/usr/sbin:/usr/bin", "UDEVD_EVENT=1"]
toto se deje hodne casto a stroj to nestiha, tudiz udev zere hodne % cpu, pripadne vznika hodne (10000+) procesu s eventama (typu /sbin/udevsend uids
).
zkousel jsem s tim ruzne cvicit ale zda se ze nic nezabralo. zkusil jsem do udev rules pridat radek:
SUBSYSTEM="uids", OPTIONS="ignore_device"
ale zda se ze to nema vliv. navic je divne ze v strace snipetu je SUBSYSTEM=uids, zatim co kdyz se na to divam pres udevinfo tak mi pise SUBSYSTEM=unknown. zkousel jsem udevd i zabit, ale z nejakeho duvodu se hned po zabiti vrati (to je dalsi otazka: kde se furt bere, v inittab neni a zadnej pousteci skript taky nema. leda by to hlidal kernel, ale to mi prijde dost prasarna)
takze co s tim? musim rict ze streva udev moc neznam a na netu take neni o tom moc informaci.
udevd 968 root 3r DIR 0,8 0 1 inotify udevd 968 root 4u unix 0xd70b5de0 150 socket udevd 968 root 5u sock 0,4 151 can't identify protocol udevd 968 root 6r FIFO 0,5 152 pipeKonkrétně hlídá změny souborů přes inotify (to asi bude váš případ změn v proc), pak přes NETLINK socket hovoří s jádrem (tudy dostává informace o hardwaru) a pak tu je UNIX socket pro komunikaci s uživatelským prostorem a roura pravděpodobně jako berlička pro zpracování signálů na systémech, které nemají pselect(2). Proč ale udev nechce ignorovat události ohledně uids, to nevím. Rozhodně bych doporučoval upgradovat, protože vztah mezi jádrem a udevd je velmi těsný.
# cat /proc/sys/kernel/hotplug /sbin/udevsendten udevsend pak asi kontroluje jestli udev nechcip a kdyztak ho pusti. to je ale prasarna.
==
', ale myslím, že udev pořád podporuje i starou syntaxi s '=
'. Pokud to nepozná podle SUBSYSTEM
, zkuste DEVPATH=="/kernel/uids/*"
(a samozřejmě by to mělo být v souboru, který se bude zpracovávat jako první).
Tiskni Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.