[RFC] Efficiency of the phandle_cache on ppc64/SLOF
Michael Ellerman
mpe at ellerman.id.au
Tue Dec 3 15:03:22 AEDT 2019
Sebastian Andrzej Siewior <bigeasy at linutronix.de> writes:
> I've been looking at phandle_cache and noticed the following: The raw
> phandle value as generated by dtc starts at zero and is incremented by
> one for each phandle entry. The qemu pSeries model is using Slof (which
> is probably the same thing as used on real hardware) and this looks like
> a poiner value for the phandle.
We don't use SLOF on bare metal these days.
I've certainly heard it said that on some OF's the phandle was just ==
the address of the internal representation, and I guess maybe for SLOF
that is true.
They seem to vary wildly though, eg. on an Apple G5:
$ find /proc/device-tree/ -name phandle | xargs lsprop | head -10
/proc/device-tree/vsp at 0,f9000000/veo at f9180000/phandle ff970848
/proc/device-tree/vsp at 0,f9000000/phandle ff970360
/proc/device-tree/vsp at 0,f9000000/veo at f9080000/phandle ff970730
/proc/device-tree/nvram at 0,fff04000/phandle ff967fb8
/proc/device-tree/xmodem/phandle ff9655e8
/proc/device-tree/multiboot/phandle ff9504f0
/proc/device-tree/diagnostics/phandle ff965550
/proc/device-tree/options/phandle ff893cf0
/proc/device-tree/openprom/client-services/phandle ff8925b8
/proc/device-tree/openprom/phandle ff892458
That machine does not have enough RAM for those to be 32-bit real
addresses. I think Apple OF is running in virtual mode though (?), so
maybe they are pointers?
And on an IBM pseries machine they're a bit all over the place:
/proc/device-tree/cpus/PowerPC,POWER8 at 40/ibm,phandle 10000040
/proc/device-tree/cpus/l2-cache at 2005/ibm,phandle 00002005
/proc/device-tree/cpus/PowerPC,POWER8 at 30/ibm,phandle 10000030
/proc/device-tree/cpus/PowerPC,POWER8 at 20/ibm,phandle 10000020
/proc/device-tree/cpus/PowerPC,POWER8 at 10/ibm,phandle 10000010
/proc/device-tree/cpus/l2-cache at 2003/ibm,phandle 00002003
/proc/device-tree/cpus/l2-cache at 200a/ibm,phandle 0000200a
/proc/device-tree/cpus/l3-cache at 3108/ibm,phandle 00003108
/proc/device-tree/cpus/l2-cache at 2001/ibm,phandle 00002001
/proc/device-tree/cpus/l3-cache at 3106/ibm,phandle 00003106
/proc/device-tree/cpus/ibm,phandle fffffff8
/proc/device-tree/cpus/l3-cache at 3104/ibm,phandle 00003104
/proc/device-tree/cpus/l2-cache at 2008/ibm,phandle 00002008
/proc/device-tree/cpus/l3-cache at 3102/ibm,phandle 00003102
/proc/device-tree/cpus/l2-cache at 2006/ibm,phandle 00002006
/proc/device-tree/cpus/l3-cache at 3100/ibm,phandle 00003100
/proc/device-tree/cpus/PowerPC,POWER8 at 8/ibm,phandle 10000008
/proc/device-tree/cpus/l2-cache at 2004/ibm,phandle 00002004
/proc/device-tree/cpus/PowerPC,POWER8 at 48/ibm,phandle 10000048
/proc/device-tree/cpus/PowerPC,POWER8 at 38/ibm,phandle 10000038
/proc/device-tree/cpus/l2-cache at 2002/ibm,phandle 00002002
/proc/device-tree/cpus/PowerPC,POWER8 at 28/ibm,phandle 10000028
/proc/device-tree/cpus/l3-cache at 3107/ibm,phandle 00003107
/proc/device-tree/cpus/PowerPC,POWER8 at 18/ibm,phandle 10000018
/proc/device-tree/cpus/l2-cache at 2000/ibm,phandle 00002000
/proc/device-tree/cpus/l3-cache at 3105/ibm,phandle 00003105
/proc/device-tree/cpus/l3-cache at 3103/ibm,phandle 00003103
/proc/device-tree/cpus/l3-cache at 310a/ibm,phandle 0000310a
/proc/device-tree/cpus/PowerPC,POWER8 at 0/ibm,phandle 10000000
/proc/device-tree/cpus/l2-cache at 2007/ibm,phandle 00002007
/proc/device-tree/cpus/l3-cache at 3101/ibm,phandle 00003101
/proc/device-tree/pci at 80000002000001b/ibm,phandle 2000001b
> With
> qemu-system-ppc64le -m 16G -machine pseries -smp 8
>
> I got the following output:
> | entries: 64
> | phandle 7e732468 slot 28 hash c
> | phandle 7e732ad0 slot 10 hash 27
> | phandle 7e732ee8 slot 28 hash 3a
> | phandle 7e734160 slot 20 hash 36
> | phandle 7e734318 slot 18 hash 3a
> | phandle 7e734428 slot 28 hash 33
> | phandle 7e734538 slot 38 hash 2c
> | phandle 7e734850 slot 10 hash e
> | phandle 7e735220 slot 20 hash 2d
> | phandle 7e735bf0 slot 30 hash d
> | phandle 7e7365c0 slot 0 hash 2d
> | phandle 7e736f90 slot 10 hash d
> | phandle 7e737960 slot 20 hash 2d
> | phandle 7e738330 slot 30 hash d
> | phandle 7e738d00 slot 0 hash 2d
> | phandle 7e739730 slot 30 hash 38
> | phandle 7e73bd08 slot 8 hash 17
> | phandle 7e73c2e0 slot 20 hash 32
> | phandle 7e73c7f8 slot 38 hash 37
> | phandle 7e782420 slot 20 hash 13
> | phandle 7e782ed8 slot 18 hash 1b
> | phandle 7e73ce28 slot 28 hash 39
> | phandle 7e73d390 slot 10 hash 22
> | phandle 7e73d9a8 slot 28 hash 1a
> | phandle 7e73dc28 slot 28 hash 37
> | phandle 7e73de00 slot 0 hash a
> | phandle 7e73e028 slot 28 hash 0
> | phandle 7e7621a8 slot 28 hash 36
> | phandle 7e73e458 slot 18 hash 1e
> | phandle 7e73e608 slot 8 hash 1e
> | phandle 7e740078 slot 38 hash 28
> | phandle 7e740180 slot 0 hash 1d
> | phandle 7e740240 slot 0 hash 33
> | phandle 7e740348 slot 8 hash 29
> | phandle 7e740410 slot 10 hash 2
> | phandle 7e740eb0 slot 30 hash 3e
> | phandle 7e745390 slot 10 hash 33
> | phandle 7e747b08 slot 8 hash c
> | phandle 7e748528 slot 28 hash f
> | phandle 7e74a6e0 slot 20 hash 18
> | phandle 7e74aab0 slot 30 hash b
> | phandle 7e74f788 slot 8 hash d
> | Used entries: 8, hashed: 29
>
> So the hash array has 64 entries out which only 8 are populated. Using
> hash_32() populates 29 entries.
> Could someone with real hardware verify this?
> I'm not sure how important this performance wise, it looks just like a
> waste using only 1/8 of the array.
On the G5 it's similarly inefficient:
[ 0.005444] OF: of_populate_phandle_cache(222) entries: 256
[ 0.005457] OF: of_populate_phandle_cache(231) phandle ff88e0c0 slot c0 hash da
[ 0.005469] OF: of_populate_phandle_cache(231) phandle ff890a20 slot 20 hash a3
[ 0.005480] OF: of_populate_phandle_cache(231) phandle ff890c88 slot 88 hash ed
[ 0.005499] OF: of_populate_phandle_cache(231) phandle ff891138 slot 38 hash 49
[ 0.005513] OF: of_populate_phandle_cache(231) phandle ff8920c0 slot c0 hash fc
[ 0.005528] OF: of_populate_phandle_cache(231) phandle ff892248 slot 48 hash b7
[ 0.005542] OF: of_populate_phandle_cache(231) phandle ff892458 slot 58 hash 64
[ 0.005557] OF: of_populate_phandle_cache(231) phandle ff8925b8 slot b8 hash d8
[ 0.005571] OF: of_populate_phandle_cache(231) phandle ff8938a8 slot a8 hash 9d
[ 0.005585] OF: of_populate_phandle_cache(231) phandle ff893a68 slot 68 hash bc
[ 0.005599] OF: of_populate_phandle_cache(231) phandle ff893c58 slot 58 hash 31
[ 0.005614] OF: of_populate_phandle_cache(231) phandle ff893cf0 slot f0 hash 40
[ 0.005628] OF: of_populate_phandle_cache(231) phandle ff893d88 slot 88 hash 4f
[ 0.005642] OF: of_populate_phandle_cache(231) phandle ff894178 slot 78 hash 55
[ 0.005657] OF: of_populate_phandle_cache(231) phandle ff894ac8 slot c8 hash f0
[ 0.005671] OF: of_populate_phandle_cache(231) phandle ff895548 slot 48 hash a9
[ 0.005685] OF: of_populate_phandle_cache(231) phandle ff8a0118 slot 18 hash e
[ 0.005700] OF: of_populate_phandle_cache(231) phandle ff8a09d0 slot d0 hash 9a
[ 0.005714] OF: of_populate_phandle_cache(231) phandle ff8a22f8 slot f8 hash 77
[ 0.005729] OF: of_populate_phandle_cache(231) phandle ff8a5470 slot 70 hash af
[ 0.005743] OF: of_populate_phandle_cache(231) phandle ff8aa718 slot 18 hash 15
[ 0.005757] OF: of_populate_phandle_cache(231) phandle ff8ad4b8 slot b8 hash 72
[ 0.005771] OF: of_populate_phandle_cache(231) phandle ff8ae2d0 slot d0 hash 94
[ 0.005786] OF: of_populate_phandle_cache(231) phandle ff8aff38 slot 38 hash 3c
[ 0.005800] OF: of_populate_phandle_cache(231) phandle ff8b0a10 slot 10 hash 93
[ 0.005815] OF: of_populate_phandle_cache(231) phandle ff8b3880 slot 80 hash 63
[ 0.005829] OF: of_populate_phandle_cache(231) phandle ff8b4288 slot 88 hash 46
[ 0.005843] OF: of_populate_phandle_cache(231) phandle ff8b61d0 slot d0 hash f
[ 0.005858] OF: of_populate_phandle_cache(231) phandle ff8b8d20 slot 20 hash 4c
[ 0.005872] OF: of_populate_phandle_cache(231) phandle ff8bba60 slot 60 hash fe
[ 0.005886] OF: of_populate_phandle_cache(231) phandle ff929568 slot 68 hash bd
[ 0.005901] OF: of_populate_phandle_cache(231) phandle ff92bb30 slot 30 hash 1d
[ 0.005915] OF: of_populate_phandle_cache(231) phandle ff92e180 slot 80 hash 6f
[ 0.005929] OF: of_populate_phandle_cache(231) phandle ff931b98 slot 98 hash 8
[ 0.005944] OF: of_populate_phandle_cache(231) phandle ff938788 slot 88 hash 85
[ 0.005958] OF: of_populate_phandle_cache(231) phandle ff938850 slot 50 hash e9
[ 0.005972] OF: of_populate_phandle_cache(231) phandle ff94f338 slot 38 hash 15
[ 0.005987] OF: of_populate_phandle_cache(231) phandle ff94f3f0 slot f0 hash 5d
[ 0.006001] OF: of_populate_phandle_cache(231) phandle ff94fb08 slot 8 hash 3
[ 0.006014] OF: of_populate_phandle_cache(231) phandle ff950058 slot 58 hash 7d
[ 0.006028] OF: of_populate_phandle_cache(231) phandle ff9504f0 slot f0 hash ae
[ 0.006043] OF: of_populate_phandle_cache(231) phandle ff965550 slot 50 hash 89
[ 0.006057] OF: of_populate_phandle_cache(231) phandle ff9655e8 slot e8 hash 98
[ 0.006071] OF: of_populate_phandle_cache(231) phandle ff967fb8 slot b8 hash 29
[ 0.006086] OF: of_populate_phandle_cache(231) phandle ff969740 slot 40 hash 1f
[ 0.006100] OF: of_populate_phandle_cache(231) phandle ff969a20 slot 20 hash 40
[ 0.006114] OF: of_populate_phandle_cache(231) phandle ff96a5b0 slot b0 hash df
[ 0.006129] OF: of_populate_phandle_cache(231) phandle ff96acb0 slot b0 hash 5a
[ 0.006143] OF: of_populate_phandle_cache(231) phandle ff96adf8 slot f8 hash a3
[ 0.006157] OF: of_populate_phandle_cache(231) phandle ff96b088 slot 88 hash 35
[ 0.006171] OF: of_populate_phandle_cache(231) phandle ff9c1100 slot 0 hash dd
[ 0.006186] OF: of_populate_phandle_cache(231) phandle ff9f0428 slot 28 hash 88
[ 0.006200] OF: of_populate_phandle_cache(231) phandle ff9f3c60 slot 60 hash c9
[ 0.006214] OF: of_populate_phandle_cache(231) phandle ff9f1230 slot 30 hash 8e
[ 0.006228] OF: of_populate_phandle_cache(231) phandle ff96c240 slot 40 hash ce
[ 0.006242] OF: of_populate_phandle_cache(231) phandle ff96d050 slot 50 hash e2
[ 0.006256] OF: of_populate_phandle_cache(231) phandle ff9bca00 slot 0 hash 3f
[ 0.006271] OF: of_populate_phandle_cache(231) phandle ff9f3080 slot 80 hash 9c
[ 0.006285] OF: of_populate_phandle_cache(231) phandle ff96e148 slot 48 hash 25
[ 0.006299] OF: of_populate_phandle_cache(231) phandle ff970960 slot 60 hash a4
[ 0.006313] OF: of_populate_phandle_cache(231) phandle ff972038 slot 38 hash 61
[ 0.006328] OF: of_populate_phandle_cache(231) phandle ff9723e0 slot e0 hash e6
[ 0.006342] OF: of_populate_phandle_cache(231) phandle ff972808 slot 8 hash 50
[ 0.006356] OF: of_populate_phandle_cache(231) phandle ff9729c0 slot c0 hash 60
[ 0.006370] OF: of_populate_phandle_cache(231) phandle ff972b78 slot 78 hash 71
[ 0.006385] OF: of_populate_phandle_cache(231) phandle ff972da8 slot a8 hash 58
[ 0.006399] OF: of_populate_phandle_cache(231) phandle ff972f00 slot 0 hash bd
[ 0.006414] OF: of_populate_phandle_cache(231) phandle ff973058 slot 58 hash 22
[ 0.006428] OF: of_populate_phandle_cache(231) phandle ff973210 slot 10 hash 33
[ 0.006442] OF: of_populate_phandle_cache(231) phandle ff973360 slot 60 hash 8a
[ 0.006456] OF: of_populate_phandle_cache(231) phandle ff973520 slot 20 hash a9
[ 0.006471] OF: of_populate_phandle_cache(231) phandle ff973670 slot 70 hash 0
[ 0.006485] OF: of_populate_phandle_cache(231) phandle ff973828 slot 28 hash 11
[ 0.006499] OF: of_populate_phandle_cache(231) phandle ff9739e0 slot e0 hash 22
[ 0.006513] OF: of_populate_phandle_cache(231) phandle ff973b40 slot 40 hash 95
[ 0.006528] OF: of_populate_phandle_cache(231) phandle ff973d88 slot 88 hash a7
[ 0.006542] OF: of_populate_phandle_cache(231) phandle ff973fb0 slot b0 hash 7f
[ 0.006556] OF: of_populate_phandle_cache(231) phandle ff974168 slot 68 hash 90
[ 0.006570] OF: of_populate_phandle_cache(231) phandle ff974320 slot 20 hash a1
[ 0.006584] OF: of_populate_phandle_cache(231) phandle ff974560 slot 60 hash a4
[ 0.006599] OF: of_populate_phandle_cache(231) phandle ff975178 slot 78 hash 35
[ 0.006613] OF: of_populate_phandle_cache(231) phandle ff975ce8 slot e8 hash 9a
[ 0.006628] OF: of_populate_phandle_cache(231) phandle ff9768a8 slot a8 hash 8f
[ 0.006642] OF: of_populate_phandle_cache(231) phandle ff976fa8 slot a8 hash a
[ 0.006656] OF: of_populate_phandle_cache(231) phandle ff9770a8 slot a8 hash d3
[ 0.006670] OF: of_populate_phandle_cache(231) phandle ff9772a0 slot a0 hash 56
[ 0.006685] OF: of_populate_phandle_cache(231) phandle ff977468 slot 68 hash 83
[ 0.006699] OF: of_populate_phandle_cache(231) phandle ff9f3710 slot 10 hash 50
[ 0.006713] OF: of_populate_phandle_cache(231) phandle ff977600 slot 0 hash 5a
[ 0.006728] OF: of_populate_phandle_cache(231) phandle ff977978 slot 78 hash 8a
[ 0.006742] OF: of_populate_phandle_cache(231) phandle ff994880 slot 80 hash 43
[ 0.006757] OF: of_populate_phandle_cache(231) phandle ff9f1f80 slot 80 hash 4b
[ 0.006771] OF: of_populate_phandle_cache(231) phandle ff9f2190 slot 90 hash f9
[ 0.006785] OF: of_populate_phandle_cache(231) phandle ff9f24b8 slot b8 hash 9a
[ 0.006800] OF: of_populate_phandle_cache(231) phandle ff9f2638 slot 38 hash 46
[ 0.006814] OF: of_populate_phandle_cache(231) phandle ff9f2980 slot 80 hash 20
[ 0.006828] OF: of_populate_phandle_cache(231) phandle ff99ccd0 slot d0 hash 37
[ 0.006843] OF: of_populate_phandle_cache(231) phandle ff9a5120 slot 20 hash 2b
[ 0.006857] OF: of_populate_phandle_cache(231) phandle ff96f258 slot 58 hash 92
[ 0.006872] OF: of_populate_phandle_cache(231) phandle ff9a5520 slot 20 hash 4d
[ 0.006886] OF: of_populate_phandle_cache(231) phandle ff9a6438 slot 38 hash 38
[ 0.006901] OF: of_populate_phandle_cache(231) phandle ff9a9340 slot 40 hash 16
[ 0.006915] OF: of_populate_phandle_cache(231) phandle ff9a99d0 slot d0 hash ca
[ 0.006929] OF: of_populate_phandle_cache(231) phandle ff9acba0 slot a0 hash 9f
[ 0.006944] OF: of_populate_phandle_cache(231) phandle ff9ad210 slot 10 hash 1a
[ 0.006959] OF: of_populate_phandle_cache(231) phandle ff970360 slot 60 hash f1
[ 0.006973] OF: of_populate_phandle_cache(231) phandle ff970730 slot 30 hash be
[ 0.006987] OF: of_populate_phandle_cache(231) phandle ff970848 slot 48 hash b1
[ 0.007002] OF: of_populate_phandle_cache(231) phandle ff977ab8 slot b8 hash c4
[ 0.007016] OF: of_populate_phandle_cache(231) phandle ff977c98 slot 98 hash 1c
[ 0.007030] OF: of_populate_phandle_cache(231) phandle ff97f300 slot 0 hash 44
[ 0.007044] OF: of_populate_phandle_cache(231) phandle ff97f4e8 slot e8 hash aa
[ 0.007059] OF: of_populate_phandle_cache(231) phandle ff97f708 slot 8 hash 74
[ 0.007073] OF: of_populate_phandle_cache(231) phandle ff97f920 slot 20 hash 30
[ 0.007087] OF: of_populate_phandle_cache(231) phandle ff97fb40 slot 40 hash fa
[ 0.007102] OF: of_populate_phandle_cache(231) phandle ff97fd18 slot 18 hash 44
[ 0.007116] OF: of_populate_phandle_cache(231) phandle ff97fee8 slot e8 hash 7f
[ 0.007130] OF: of_populate_phandle_cache(231) phandle ff9800c0 slot c0 hash c9
[ 0.007144] OF: of_populate_phandle_cache(231) phandle ff980298 slot 98 hash 13
[ 0.007158] OF: of_populate_phandle_cache(231) phandle ff980430 slot 30 hash ea
[ 0.007172] OF: of_populate_phandle_cache(231) phandle ff9806c8 slot c8 hash 8a
[ 0.007187] OF: of_populate_phandle_cache(231) phandle ff980898 slot 98 hash c6
[ 0.007201] OF: of_populate_phandle_cache(231) phandle ff980ba8 slot a8 hash 3c
[ 0.007215] OF: of_populate_phandle_cache(231) phandle ff982648 slot 48 hash b7
[ 0.007230] OF: of_populate_phandle_cache(231) phandle ff982df0 slot f0 hash 5e
[ 0.007244] OF: of_populate_phandle_cache(231) phandle ff98e7a0 slot a0 hash 81
[ 0.007259] OF: of_populate_phandle_cache(231) phandle ff98e998 slot 98 hash 4
[ 0.007273] OF: of_populate_phandle_cache(231) phandle ff98eb28 slot 28 hash cd
[ 0.007287] OF: of_populate_phandle_cache(231) phandle ff98ecb8 slot b8 hash 97
[ 0.007301] OF: of_populate_phandle_cache(231) phandle ff98ee50 slot 50 hash 6e
[ 0.007316] OF: of_populate_phandle_cache(231) phandle ff98efe8 slot e8 hash 46
[ 0.007330] OF: of_populate_phandle_cache(231) phandle ff98f178 slot 78 hash f
[ 0.007344] OF: of_populate_phandle_cache(231) phandle ff98f310 slot 10 hash e7
[ 0.007358] OF: of_populate_phandle_cache(231) phandle ff98f4a8 slot a8 hash be
[ 0.007379] OF: of_populate_phandle_cache(242) Used entries: 31, hashed: 111
And some output from a "real" pseries machine (IBM OF), which is
slightly better:
[ 0.129026] OF: of_populate_phandle_cache(222) entries: 128
[ 0.129030] OF: of_populate_phandle_cache(231) phandle ffffffff slot 7f hash 4f
[ 0.129034] OF: of_populate_phandle_cache(231) phandle cbffa0 slot 20 hash 2a
[ 0.129038] OF: of_populate_phandle_cache(231) phandle fffffff7 slot 77 hash 47
[ 0.129043] OF: of_populate_phandle_cache(231) phandle fffffff8 slot 78 hash 78
[ 0.129046] OF: of_populate_phandle_cache(231) phandle 10000000 slot 0 hash 38
[ 0.129050] OF: of_populate_phandle_cache(231) phandle 10000008 slot 8 hash 3f
[ 0.129055] OF: of_populate_phandle_cache(231) phandle 10000010 slot 10 hash 46
[ 0.129058] OF: of_populate_phandle_cache(231) phandle 10000018 slot 18 hash 4d
[ 0.129062] OF: of_populate_phandle_cache(231) phandle 10000020 slot 20 hash 54
[ 0.129066] OF: of_populate_phandle_cache(231) phandle 10000028 slot 28 hash 5b
[ 0.129070] OF: of_populate_phandle_cache(231) phandle 10000030 slot 30 hash 62
[ 0.129074] OF: of_populate_phandle_cache(231) phandle 10000038 slot 38 hash 69
[ 0.129078] OF: of_populate_phandle_cache(231) phandle 10000040 slot 40 hash 71
[ 0.129082] OF: of_populate_phandle_cache(231) phandle 10000048 slot 48 hash 78
[ 0.129086] OF: of_populate_phandle_cache(231) phandle 2000 slot 0 hash 8
[ 0.129089] OF: of_populate_phandle_cache(231) phandle 2001 slot 1 hash 39
[ 0.129093] OF: of_populate_phandle_cache(231) phandle 2002 slot 2 hash 6a
[ 0.129097] OF: of_populate_phandle_cache(231) phandle 2003 slot 3 hash 1b
[ 0.129100] OF: of_populate_phandle_cache(231) phandle 2004 slot 4 hash 4b
[ 0.129104] OF: of_populate_phandle_cache(231) phandle 2005 slot 5 hash 7c
[ 0.129108] OF: of_populate_phandle_cache(231) phandle 2006 slot 6 hash 2d
[ 0.129112] OF: of_populate_phandle_cache(231) phandle 2007 slot 7 hash 5e
[ 0.129115] OF: of_populate_phandle_cache(231) phandle 2008 slot 8 hash f
[ 0.129119] OF: of_populate_phandle_cache(231) phandle 200a slot a hash 71
[ 0.129123] OF: of_populate_phandle_cache(231) phandle 3100 slot 0 hash 30
[ 0.129127] OF: of_populate_phandle_cache(231) phandle 3101 slot 1 hash 61
[ 0.129130] OF: of_populate_phandle_cache(231) phandle 3102 slot 2 hash 12
[ 0.129134] OF: of_populate_phandle_cache(231) phandle 3103 slot 3 hash 43
[ 0.129138] OF: of_populate_phandle_cache(231) phandle 3104 slot 4 hash 74
[ 0.129141] OF: of_populate_phandle_cache(231) phandle 3105 slot 5 hash 25
[ 0.129145] OF: of_populate_phandle_cache(231) phandle 3106 slot 6 hash 56
[ 0.129148] OF: of_populate_phandle_cache(231) phandle 3107 slot 7 hash 7
[ 0.129152] OF: of_populate_phandle_cache(231) phandle 3108 slot 8 hash 37
[ 0.129156] OF: of_populate_phandle_cache(231) phandle 310a slot a hash 19
[ 0.129160] OF: of_populate_phandle_cache(231) phandle dd08a0 slot 20 hash 26
[ 0.129164] OF: of_populate_phandle_cache(231) phandle dd2a58 slot 58 hash 37
[ 0.129168] OF: of_populate_phandle_cache(231) phandle fffffff9 slot 79 hash 29
[ 0.129172] OF: of_populate_phandle_cache(231) phandle fffffff6 slot 76 hash 17
[ 0.129176] OF: of_populate_phandle_cache(231) phandle fffffff4 slot 74 hash 35
[ 0.129180] OF: of_populate_phandle_cache(231) phandle fffffff5 slot 75 hash 66
[ 0.129184] OF: of_populate_phandle_cache(231) phandle fffffff3 slot 73 hash 4
[ 0.129188] OF: of_populate_phandle_cache(231) phandle c9cca8 slot 28 hash 32
[ 0.129191] OF: of_populate_phandle_cache(231) phandle dd2bc8 slot 48 hash 7f
[ 0.129195] OF: of_populate_phandle_cache(231) phandle 25000015 slot 15 hash 24
[ 0.129199] OF: of_populate_phandle_cache(231) phandle 2500001b slot 1b hash 49
[ 0.129203] OF: of_populate_phandle_cache(231) phandle 2500001e slot 1e hash 5c
[ 0.129207] OF: of_populate_phandle_cache(231) phandle fffffffa slot 7a hash 5a
[ 0.129211] OF: of_populate_phandle_cache(231) phandle 80000100 slot 0 hash 24
[ 0.129215] OF: of_populate_phandle_cache(231) phandle 80000140 slot 40 hash 5d
[ 0.129219] OF: of_populate_phandle_cache(231) phandle fffffffe slot 7e hash 1e
[ 0.129223] OF: of_populate_phandle_cache(231) phandle fffffffb slot 7b hash b
[ 0.129227] OF: of_populate_phandle_cache(231) phandle c9ed48 slot 48 hash 49
[ 0.129231] OF: of_populate_phandle_cache(231) phandle db9740 slot 40 hash 4c
[ 0.129235] OF: of_populate_phandle_cache(231) phandle d609a0 slot 20 hash 34
[ 0.129238] OF: of_populate_phandle_cache(231) phandle dcd820 slot 20 hash 67
[ 0.129242] OF: of_populate_phandle_cache(231) phandle dae0a0 slot 20 hash 75
[ 0.129246] OF: of_populate_phandle_cache(231) phandle d21df0 slot 70 hash 44
[ 0.129250] OF: of_populate_phandle_cache(231) phandle cc2ec8 slot 48 hash 36
[ 0.129254] OF: of_populate_phandle_cache(231) phandle d6a2a8 slot 28 hash 27
[ 0.129258] OF: of_populate_phandle_cache(231) phandle d23330 slot 30 hash 37
[ 0.129262] OF: of_populate_phandle_cache(231) phandle dd0320 slot 20 hash 3e
[ 0.129266] OF: of_populate_phandle_cache(231) phandle dae248 slot 48 hash 6f
[ 0.129270] OF: of_populate_phandle_cache(231) phandle d981d8 slot 58 hash 2f
[ 0.129274] OF: of_populate_phandle_cache(231) phandle da3da8 slot 28 hash 26
[ 0.129278] OF: of_populate_phandle_cache(231) phandle d88480 slot 0 hash 4a
[ 0.129282] OF: of_populate_phandle_cache(231) phandle d8e118 slot 18 hash 5a
[ 0.129285] OF: of_populate_phandle_cache(231) phandle d8ff50 slot 50 hash 4c
[ 0.129289] OF: of_populate_phandle_cache(231) phandle e9da68 slot 68 hash 59
[ 0.129293] OF: of_populate_phandle_cache(231) phandle ebc460 slot 60 hash 3a
[ 0.129297] OF: of_populate_phandle_cache(231) phandle d91c48 slot 48 hash 20
[ 0.129301] OF: of_populate_phandle_cache(231) phandle d3b5f0 slot 70 hash f
[ 0.129305] OF: of_populate_phandle_cache(231) phandle d428d0 slot 50 hash 7d
[ 0.129309] OF: of_populate_phandle_cache(231) phandle d80ae0 slot 60 hash 58
[ 0.129313] OF: of_populate_phandle_cache(231) phandle d9a500 slot 0 hash 8
[ 0.129316] OF: of_populate_phandle_cache(231) phandle dacc78 slot 78 hash 7c
[ 0.129320] OF: of_populate_phandle_cache(231) phandle cc4930 slot 30 hash 42
[ 0.129324] OF: of_populate_phandle_cache(231) phandle db2510 slot 10 hash 7b
[ 0.129328] OF: of_populate_phandle_cache(231) phandle dcca28 slot 28 hash 73
[ 0.129332] OF: of_populate_phandle_cache(231) phandle d28488 slot 8 hash 3f
[ 0.129336] OF: of_populate_phandle_cache(231) phandle d589f8 slot 78 hash 61
[ 0.129340] OF: of_populate_phandle_cache(231) phandle ecf870 slot 70 hash 69
[ 0.129344] OF: of_populate_phandle_cache(231) phandle d97948 slot 48 hash d
[ 0.129348] OF: of_populate_phandle_cache(231) phandle d27720 slot 20 hash 4a
[ 0.129352] OF: of_populate_phandle_cache(231) phandle d513c8 slot 48 hash 7f
[ 0.129356] OF: of_populate_phandle_cache(231) phandle dd0228 slot 28 hash 61
[ 0.129360] OF: of_populate_phandle_cache(231) phandle d76568 slot 68 hash 4e
[ 0.129364] OF: of_populate_phandle_cache(231) phandle d4a390 slot 10 hash 70
[ 0.129368] OF: of_populate_phandle_cache(231) phandle cf3a10 slot 10 hash f
[ 0.129372] OF: of_populate_phandle_cache(231) phandle d0bc58 slot 58 hash 7c
[ 0.129376] OF: of_populate_phandle_cache(231) phandle 20000015 slot 15 hash 72
[ 0.129380] OF: of_populate_phandle_cache(231) phandle e21228 slot 28 hash 75
[ 0.129384] OF: of_populate_phandle_cache(231) phandle e33b48 slot 48 hash 64
[ 0.129388] OF: of_populate_phandle_cache(231) phandle e38f08 slot 8 hash 11
[ 0.129392] OF: of_populate_phandle_cache(231) phandle e3b8a0 slot 20 hash 27
[ 0.129396] OF: of_populate_phandle_cache(231) phandle e3e378 slot 78 hash 5b
[ 0.129400] OF: of_populate_phandle_cache(231) phandle e43740 slot 40 hash f
[ 0.129404] OF: of_populate_phandle_cache(231) phandle 2000001b slot 1b hash 18
[ 0.129408] OF: of_populate_phandle_cache(231) phandle e45fc8 slot 48 hash 32
[ 0.129412] OF: of_populate_phandle_cache(231) phandle e5be68 slot 68 hash 55
[ 0.129416] OF: of_populate_phandle_cache(231) phandle 2000001e slot 1e hash 2a
[ 0.129420] OF: of_populate_phandle_cache(231) phandle 2204001e slot 1e hash 7e
[ 0.129423] OF: of_populate_phandle_cache(231) phandle e6c880 slot 0 hash 18
[ 0.129427] OF: of_populate_phandle_cache(231) phandle e7bca0 slot 20 hash 45
[ 0.129431] OF: of_populate_phandle_cache(231) phandle e8b0c0 slot 40 hash 71
[ 0.129435] OF: of_populate_phandle_cache(231) phandle fffffffd slot 7d hash 6d
[ 0.129439] OF: of_populate_phandle_cache(231) phandle fffffffc slot 7c hash 3c
[ 0.129443] OF: of_populate_phandle_cache(231) phandle df1d80 slot 0 hash 49
[ 0.129447] OF: of_populate_phandle_cache(231) phandle df3488 slot 8 hash 52
[ 0.129451] OF: of_populate_phandle_cache(231) phandle df3d80 slot 0 hash 52
[ 0.129454] OF: of_populate_phandle_cache(231) phandle df3198 slot 18 hash 34
[ 0.129458] OF: of_populate_phandle_cache(231) phandle df2888 slot 8 hash 1f
[ 0.129462] OF: of_populate_phandle_cache(231) phandle 30000000 slot 0 hash 28
[ 0.129467] OF: of_populate_phandle_cache(242) Used entries: 39, hashed: 81
So yeah using hash_32() is quite a bit better in both cases.
And if I'm reading your patch right it would be a single line change to
switch, so that seems like it's worth doing to me.
cheers
> The patch used for testing:
>
> diff --git a/drivers/of/base.c b/drivers/of/base.c
> index 1d667eb730e19..2640d4bc81a9a 100644
> --- a/drivers/of/base.c
> +++ b/drivers/of/base.c
> @@ -197,6 +197,7 @@ void of_populate_phandle_cache(void)
> u32 cache_entries;
> struct device_node *np;
> u32 phandles = 0;
> + struct device_node **cache2;
>
> raw_spin_lock_irqsave(&devtree_lock, flags);
>
> @@ -214,14 +215,32 @@ void of_populate_phandle_cache(void)
>
> phandle_cache = kcalloc(cache_entries, sizeof(*phandle_cache),
> GFP_ATOMIC);
> + cache2 = kcalloc(cache_entries, sizeof(*phandle_cache), GFP_ATOMIC);
> if (!phandle_cache)
> goto out;
>
> + pr_err("%s(%d) entries: %d\n", __func__, __LINE__, cache_entries);
> for_each_of_allnodes(np)
> if (np->phandle && np->phandle != OF_PHANDLE_ILLEGAL) {
> + int slot;
> of_node_get(np);
> phandle_cache[np->phandle & phandle_cache_mask] = np;
> + slot = hash_32(np->phandle, __ffs(cache_entries));
> + cache2[slot] = np;
> + pr_err("%s(%d) phandle %x slot %x hash %x\n", __func__, __LINE__,
> + np->phandle, np->phandle & phandle_cache_mask, slot);
> }
> + {
> + int i, filled = 0, filled_hash = 0;
> +
> + for (i = 0; i < cache_entries; i++) {
> + if (phandle_cache[i])
> + filled++;
> + if (cache2[i])
> + filled_hash++;
> + }
> + pr_err("%s(%d) Used entries: %d, hashed: %d\n", __func__, __LINE__, filled, filled_hash);
> + }
>
> out:
> raw_spin_unlock_irqrestore(&devtree_lock, flags);
>
> Sebastian
More information about the Linuxppc-dev
mailing list