Dear folks, as some of you might have heared of, i am trying to get an RPi to do some (image) processing task for me but i run into various odd behaviour. For one, can someone reproduce this? When i run pkgsrc's ImageMagick's `convert' on a bigger image, say a 'PNG image data, 2135 x 3230, 8-bit/color RGB, non-interlaced', and try to scale/rotate/whatever it, the memory usage gets into the 200 Mb eventually. I know the RPi isn't the fastest beast around, but what struck me is that most of the time is spend in system-time! A convert process can easy show: load: 0.99 cmd: convert 12662 [0x401cdec4] 24.72u 109.17s 32% 387220k Note this is a 512 Mb RPi and there is still tens of Mb marked free so no swapping is going on. When running, i do get an occasional "pglistalloc waiting", but not that often. Looking at the vmstat's some things struck me: --------------- rpi# vmstat -e event total rate type vmcmd kills 261793 1 misc vmcmd extends 205133 1 misc vmcmd calls 2642394 16 misc deferred intr 249909 1 misc pmap prefer nochange 3690430 22 misc pmap prefer change 1 0 misc pmap activations 35933461 218 misc pmap updates 105661119 641 misc pmap exec pages discarded (DG) 186 0 misc pmap exec pages discarded (PP) 1459118 8 misc pmap exec pages discarded (UM) 1559175 9 misc pmap exec pages synced (KU) 52 0 misc pmap exec pages synced (DG) 6265 0 misc pmap exec pages synced (RM) 6567285 39 misc pmap exec pages synced (UM) 11858 0 misc pmap exec pages synced (MP) 554171 3 misc pmap exec pages synced 7139631 43 misc pmap exec pages mapped 97736514 593 misc pmap page table pages mapped 48 0 misc pmap kenter pages unmapped 3235883 19 misc pmap kenter pages mapped 4445491 26 misc pmap kernel pages unmapped 4666961 28 misc pmap kernel pages mapped 4669134 28 misc pmap pages remapped 6576304 39 misc pmap pages unmapped 157372322 955 misc pmap pages mapped 157428664 955 misc pmap new page color 93597 0 misc vmemev bt_inuse 730 0 misc vmemev bt_count 1806 0 misc vmemev bt_pages 11 0 misc cpu0 undefined insn traps 509649 3 trap pdpolicy reactanon 153647 0 misc pdpolicy reactexec 54758 0 misc softint net/0 4979224 30 misc softint net block/0 1301 0 misc softint clk/0 7611963 46 misc softint clk block/0 13 0 misc softint ser/0 10885527 66 misc callout late/0 27 0 misc crosscall unicast 2 0 misc crosscall broadcast 113 0 misc namecache entries scanned 399069 2 misc namecache entries collected 1817826 11 misc namecache over scan target 394 0 misc namecache under scan target 164391 0 misc namecache forced reclaims 388 0 misc cpu0 translation abort (S) 2156860 13 trap cpu0 translation abort (P) 45729671 277 trap cpu0 domain abort (P) 4264 0 trap cpu0 permission abort (P) 7362938 44 trap VFP coproc use 326476 1 misc VFP coproc re-use 183173 1 misc bcm2835 pic uart 5334616 32 intr bcm2835 pic emmc 28523984 173 intr bcm2835 pic usb 1331781849 8084 intr bcm2835 pic timer3 16447834 99 intr bcm2835 pic Doorbell0 3 0 intr --------------- Note the exceptional high `pmap pages (un)mapped' rate as well as the `exec pages mapped', the `pmap updates' and the high number of `cpu translation abort (P)' rates. What struck me was that those figures were also high when the machine was idle! The following questions pop into my mind reading the vmstats : - Is there really only ONE page color? - Aren't domains used for kernel/userland pages separation? - Isn't there a pmap for each process? It looks like its rebuild over and over again. - Is the tlb really flushed on each system call? on each interrupt due to this? - What can cause this phenomenon other than a pmap issue? --------------- rpi# vmstat -s 4096 bytes per page 1 page color 111091 pages managed 91054 pages free 8891 pages active 614 pages inactive 0 pages paging 1 pages wired 0 zero pages 1 reserve pagedaemon pages 5 reserve kernel pages 1595 anonymous pages 4848 cached file pages 3063 cached executable pages 256 minimum free pages 341 target free pages 37030 maximum wired pages 1 swap devices 32767 swap pages 1170 swap pages in use 660 swap allocations 64976590 total faults taken 84086976 traps 1383063735 device interrupts 70945103 CPU context switches 23496354 software interrupts 390464092 system calls 650 pagein requests 274 pageout requests 0 pages swapped in 4272 pages swapped out 391171 forks total 202471 forks blocked parent 202471 forks shared address space with parent 0 pagealloc zero wanted and avail 33465894 pagealloc zero wanted and not avail 0 aborts of idle page zeroing 43342463 pagealloc desired color avail 0 pagealloc desired color not avail 43342463 pagealloc local cpu avail 0 pagealloc local cpu not avail 80 faults with no memory 0 faults with no anons 8 faults had to wait on pages 0 faults found released page 423989 faults relock (423989 ok) 7149626 anon page faults 658 anon retry faults 5893120 amap copy faults 7322046 neighbour anon page faults 83451439 neighbour object page faults 23673137 locked pager get faults 423331 unlocked pager get faults 5032015 anon faults 2114109 anon copy on write faults 19507517 object faults 4165620 promote copy faults 33445352 promote zero fill faults 1412 times daemon wokeup 1394 revolutions of the clock hand 1556421 pages freed by daemon 1878659 pages scanned by daemon 4246 anonymous pages scanned by daemon 1552251 object pages scanned by daemon 15255 pages reactivated 98502 pages found busy by daemon 3998 total pending pageouts 1960227 pages deactivated 61741880 total name lookups 54159067 good hits 4306225 negative hits 291577 bad hits 18 false hits 2882911 miss 102082 too long 442788 pass2 hits 556258 2passes cache hits (87% pos + 6% neg) system 0% per-process deletions 0%, falsehits 0%, toolong 0% ------------ For completion, its a 512 Mb RPi : uname -a: NetBSD rpi 6.99.27 NetBSD 6.99.27 (RPI) #1: Tue Nov 19 14:10:25 CET 2013 reinoud%diablo.13thmonkey.org@localhost:/usr/sources/cvs.netbsd.org/src-clean/sys/arch/evbarm/compile/obj/RPI evbarm uname -p: earmv6hf Ideas anyone? With regards, Reinoud
Attachment:
pgpDar7rmqkQc.pgp
Description: PGP signature