Feit is dat er geheugen verdwijnt. In userspace zie je dat niet altijd terug, het is kernel-geheugen.
Wat ik bij een geheugenlek zou verwachten, is dat er bij een bepaald object in /proc/slabinfo, een flinke toename over tijd plaatsvindt bij één bepaald object. Namelijk een struct van een bepaalde grootte wordt consistent niet vrijgegeven, dus zullen er over tijd een groot aantal objecten van bestaan. Ik zie geen specifieke naam voor de driver in /proc/slabinfo, dus zal de driver onder de generieke size-objecten geheugen alloceren:
Mijn Duo, met uptime van 9 dagen geeft dit terug:
size-4194304 0 0 4194304 1 1024 : tunables 1 1 0 : slabdata 0 0 0
size-2097152 0 0 2097152 1 512 : tunables 1 1 0 : slabdata 0 0 0
size-1048576 0 0 1048576 1 256 : tunables 1 1 0 : slabdata 0 0 0
size-524288 0 0 524288 1 128 : tunables 1 1 0 : slabdata 0 0 0
size-262144 0 0 262144 1 64 : tunables 1 1 0 : slabdata 0 0 0
size-131072 0 0 131072 1 32 : tunables 8 4 0 : slabdata 0 0 0
size-65536 5 5 65536 1 16 : tunables 8 4 0 : slabdata 5 5 0
size-32768 2 2 32768 1 8 : tunables 8 4 0 : slabdata 2 2 0
size-16384 21 21 16384 1 4 : tunables 8 4 0 : slabdata 21 21 0
size-8192 134 134 8192 1 2 : tunables 8 4 0 : slabdata 134 134 0
size-4096 26 26 4096 1 1 : tunables 24 12 8 : slabdata 26 26 0
size-2048 320 320 2048 2 1 : tunables 24 12 8 : slabdata 160 160 0
size-1024 228 228 1024 4 1 : tunables 54 27 8 : slabdata 57 57 0
size-512 535 560 512 8 1 : tunables 54 27 8 : slabdata 70 70 0
size-256 1460 1890 256 15 1 : tunables 120 60 8 : slabdata 126 126 0
size-192 1124 1155 256 15 1 : tunables 120 60 8 : slabdata 77 77 0
size-128 1235 1260 128 30 1 : tunables 120 60 8 : slabdata 42 42 0
size-96 1292 1350 128 30 1 : tunables 120 60 8 : slabdata 45 45 0
size-64 5066 5280 128 30 1 : tunables 120 60 8 : slabdata 176 176 0
size-32 8723 8790 128 30 1 : tunables 120 60 8 : slabdata 293 293 0
MIjn Uno, met uptime van 51 dagen, geeft dit terug.
size-4194304 0 0 4194304 1 1024 : tunables 1 1 0 : slabdata 0 0 0
size-2097152 0 0 2097152 1 512 : tunables 1 1 0 : slabdata 0 0 0
size-1048576 0 0 1048576 1 256 : tunables 1 1 0 : slabdata 0 0 0
size-524288 0 0 524288 1 128 : tunables 1 1 0 : slabdata 0 0 0
size-262144 0 0 262144 1 64 : tunables 1 1 0 : slabdata 0 0 0
size-131072 0 0 131072 1 32 : tunables 8 4 0 : slabdata 0 0 0
size-65536 12 12 65536 1 16 : tunables 8 4 0 : slabdata 12 12 0
size-32768 3 3 32768 1 8 : tunables 8 4 0 : slabdata 3 3 0
size-16384 10 10 16384 1 4 : tunables 8 4 0 : slabdata 10 10 0
size-8192 110 110 8192 1 2 : tunables 8 4 0 : slabdata 110 110 0
size-4096 28 28 4096 1 1 : tunables 24 12 8 : slabdata 28 28 0
size-2048 318 318 2048 2 1 : tunables 24 12 8 : slabdata 159 159 0
size-1024 216 216 1024 4 1 : tunables 54 27 8 : slabdata 54 54 0
size-512 664 664 512 8 1 : tunables 54 27 8 : slabdata 83 83 0
size-256 1477 1500 256 15 1 : tunables 120 60 8 : slabdata 100 100 0
size-192 1146 1185 256 15 1 : tunables 120 60 8 : slabdata 79 79 0
size-128 1279 1290 128 30 1 : tunables 120 60 8 : slabdata 43 43 0
size-96 1031 1080 128 30 1 : tunables 120 60 8 : slabdata 36 36 0
size-64 5348 5580 128 30 1 : tunables 120 60 8 : slabdata 186 186 0
size-32 8657 8850 128 30 1 : tunables 120 60 8 : slabdata 295 295 0
De tweede kolom, direct na de naam, is de hoeveelheid. Bij een geheugenlek verwacht je dat één van deze over tijd toeneemt. Dat is niet het geval. Maar sterker nog: De waarden van de Duo komen behoorlijk goed overeen met die van de Uno... dus de kernel gebruikt bij beiden ongeveer evenveel geheugen. Dat is wat je zou verwachten bij geen geheugenlekken.
Nu is dit niet het hele verhaal: slabinfo toont alleen geheugenallocaties op slabniveau. De kernel kent nog een andere manier van geheugentoewijzing: Pages. Maar ook als er pages gealloceerd worden die niet vrijgegeven worden... ook daar zouden concrete aanwijzingen voor te vinden moeten zijn. Ik heb dat niet teruggevonden.