Harc a hízó sysfs ellen

Címkék

A sysfs névre hallgató virtuális filerendszer egyike a 2.6-os kernel újdonságainak. A sysfs nem más mint a Linux kernel eszköz modelljének user-space ábrázolása. Használata az udev segédprogrammal lehetséges (udev hivatott például arra, hogy vele eszköz node-okat hozzunk létre a sysfs-ben a hardverek számára). Ezen kívül a sysfs számos más, fontos információt szolgáltat a rendszerről. Ezekből nem egy a régi /proc filerendszerből került át ide. A sysfs létrehozásának egyik célja az volt, hogy a fejlesztők megszüntessék azt a káoszt, amely a /proc filerendszerben az évek alatt kialakult.

A fent említett funkciókból kiderül, hogy a sysfs hasznos dolog. Azonban jelen állapotában van egy kis probléma vele.Az egész sysfs, mint egyszerű kernel filerendszer épül fel, a VFS cache-t használja. Ez a megoldás egyszerű módja annak, hogy kernel filerendszert hozzunk létre, mert VFS kód elvégzi helyettünk a piszkos munka nagy részét. A működése során a kernel a sysfs-ben található minden egyes filehoz és könyvtárhoz egy dentry (directory entry) cache bejegyzést és egy inode-ot tart fenn a memóriában.

Ahogy a sysfs bejegyzéseinek száma nő, azzal párhuzamosan nő a dentry-k és inodok által elfoglalt memória mérete is. Könnyű belátni, hogy kis rendszereken (aholis kevés memória áll rendelkezésre) a sysfs pár száz bejegyzése is nagy gondot okozhat. A nagy rendszereken a bejegyzések száma ennek többszöröse is lehet, amely szintén nem kívánatos memória-foglaláshoz vezethet.

Ezt a problémát enyhítendő Maneesh Soni az IBM munkatársa egy olyan patchen dolgozik, amely egy valódi háttértárat (sysfs backing store) valósít meg a sysfs számára.

A munka nyomán a fejlesztő a tesztek alkalmával 145MB low memóriát takarított meg a tesztgépén. Az aktív dentry-k száma a patch használatakor leesett 60,000-ről 9,000 alá. A patch használatával a fejlesztő szerint a sysfs low memory igényének mintegy 75-80%-át meg lehet spórolni.

A fejlesztő levele itt.

Hozzászólások