2011-07-28 18:03:28     Symptoms of memory fragmentation?

Document created by Aaronwu Employee on Aug 27, 2013
Version 1Show Document
  • View in full screen mode

2011-07-28 18:03:28     Symptoms of memory fragmentation?

Cameron Barfield (UNITED STATES)

Message: 102704   

 

I think I'm experiencing an issue related to memory fragmentation, but I'm not sure.

 

My application is based on mediastream and oRTP (receiving RTP streams, playing the audio, etc).

 

I realize that if there is a fragmentation issue, I'm SOL, but I really don't know what to look for to determine whether or not this is a fragmentation issue. I'm thinking it is, given the amount of RAM I still have available.

 

I've already checked my application for memory leaks, and there don't appear to be any. My application has been running for about 4 hours through over 1500 iterations. About 5-10 minutes before I started experiencing problems, I ran free and checked /proc/buddyinfo and /proc/slabinfo:

 

 

 

root:/> free

              total         used         free       shared      buffers

  Mem:        55212        17952        37260            0            0

 

 

 

 

root:/> cat /proc/buddyinfo

Node 0, zone      DMA    385    384    386    337    239      1      1      0      0      0      0      0      0      0

 

 

 

 

root:/> cat /proc/slabinfo

slabinfo - version: 2.1

# name            <active_objs> <num_objs> <objsize> <objperslab> <pagesperslab> : tunables <limit> <batchcount> <sharedfactor> : slabdata <active_slabs> <num_slabs> <sharedavail>

cfq_io_context         0      0     88   44    1 : tunables  120   60    0 : slabdata      0      0      0

cfq_queue              0      0     88   44    1 : tunables  120   60    0 : slabdata      0      0      0

jffs2_inode_cache     23    145     24  145    1 : tunables  120   60    0 : slabdata      1      1      0

jffs2_node_frag        0      0     24  145    1 : tunables  120   60    0 : slabdata      0      0      0

jffs2_refblock        65     80    248   16    1 : tunables  120   60    0 : slabdata      5      5      0

jffs2_tmp_dnode        0      0     32  113    1 : tunables  120   60    0 : slabdata      0      0      0

jffs2_raw_inode        0      0     68   56    1 : tunables  120   60    0 : slabdata      0      0      0

jffs2_raw_dirent       0      0     40   92    1 : tunables  120   60    0 : slabdata      0      0      0

jffs2_full_dnode       1    203     16  203    1 : tunables  120   60    0 : slabdata      1      1      0

jffs2_i                2     12    328   12    1 : tunables   54   27    0 : slabdata      1      1      0

inotify_event_cache      0      0     28  127    1 : tunables  120   60    0 : slabdata      0      0      0

inotify_watch_cache      0      0     40   92    1 : tunables  120   60    0 : slabdata      0      0      0

fasync_cache           0      0     16  203    1 : tunables  120   60    0 : slabdata      0      0      0

nsproxy                0      0     28  127    1 : tunables  120   60    0 : slabdata      0      0      0

posix_timers_cache      0      0    100   39    1 : tunables  120   60    0 : slabdata      0      0      0

uid_cache              0      0     64   59    1 : tunables  120   60    0 : slabdata      0      0      0

UNIX                   0      0    384   10    1 : tunables   54   27    0 : slabdata      0      0      0

UDP-Lite               0      0    480    8    1 : tunables   54   27    0 : slabdata      0      0      0

tcp_bind_bucket        3    113     32  113    1 : tunables  120   60    0 : slabdata      1      1      0

inet_peer_cache        1     59     64   59    1 : tunables  120   60    0 : slabdata      1      1      0

ip_fib_alias           0      0     16  203    1 : tunables  120   60    0 : slabdata      0      0      0

ip_fib_hash           11    101     36  101    1 : tunables  120   60    0 : slabdata      1      1      0

ip_dst_cache          11     15    256   15    1 : tunables  120   60    0 : slabdata      1      1      0

arp_cache              3     30    128   30    1 : tunables  120   60    0 : slabdata      1      1      0

RAW                    2      8    480    8    1 : tunables   54   27    0 : slabdata      1      1      0

UDP                    8      8    480    8    1 : tunables   54   27    0 : slabdata      1      1      0

tw_sock_TCP            2     40     96   40    1 : tunables  120   60    0 : slabdata      1      1      0

request_sock_TCP       2     40     96   40    1 : tunables  120   60    0 : slabdata      1      1      0

TCP                    7      7   1056    7    2 : tunables   24   12    0 : slabdata      1      1      0

eventpoll_pwq          0      0     36  101    1 : tunables  120   60    0 : slabdata      0      0      0

eventpoll_epi          0      0     96   40    1 : tunables  120   60    0 : slabdata      0      0      0

blkdev_queue          17     18   1208    3    1 : tunables   24   12    0 : slabdata      6      6      0

blkdev_requests        4     18    216   18    1 : tunables  120   60    0 : slabdata      1      1      0

blkdev_ioc             0      0     44   84    1 : tunables  120   60    0 : slabdata      0      0      0

biovec-256             2      2   3072    2    2 : tunables   24   12    0 : slabdata      1      1      0

biovec-128             2      5   1536    5    2 : tunables   24   12    0 : slabdata      1      1      0

biovec-64              2      5    768    5    1 : tunables   54   27    0 : slabdata      1      1      0

biovec-16              2     20    192   20    1 : tunables  120   60    0 : slabdata      1      1      0

biovec-4               2     59     64   59    1 : tunables  120   60    0 : slabdata      1      1      0

biovec-1               2    203     16  203    1 : tunables  120   60    0 : slabdata      1      1      0

bio                    2     40     96   40    1 : tunables  120   60    0 : slabdata      1      1      0

sock_inode_cache      22     22    352   11    1 : tunables   54   27    0 : slabdata      2      2      0

skbuff_fclone_cache     11     11    352   11    1 : tunables   54   27    0 : slabdata      1      1      0

skbuff_head_cache     48     48    160   24    1 : tunables  120   60    0 : slabdata      2      2      0

file_lock_cache        0      0     96   40    1 : tunables  120   60    0 : slabdata      0      0      0

sram_piece_cache      11    203     16  203    1 : tunables  120   60    0 : slabdata      1      1      0

proc_inode_cache      36     36    312   12    1 : tunables   54   27    0 : slabdata      3      3      0

sigqueue               2     27    144   27    1 : tunables  120   60    0 : slabdata      1      1      0

radix_tree_node       95    104    288   13    1 : tunables   54   27    0 : slabdata      8      8      0

bdev_cache             2      9    416    9    1 : tunables   54   27    0 : slabdata      1      1      0

sysfs_dir_cache     1437   1512     44   84    1 : tunables  120   60    0 : slabdata     18     18      0

mnt_cache             17     30    128   30    1 : tunables  120   60    0 : slabdata      1      1      0

inode_cache         2574   2574    288   13    1 : tunables   54   27    0 : slabdata    198    198      0

dentry              2635   2635    124   31    1 : tunables  120   60    0 : slabdata     85     85      0

filp                 150    150    128   30    1 : tunables  120   60    0 : slabdata      5      5      0

names_cache            1      1   4096    1    1 : tunables   24   12    0 : slabdata      1      1      0

buffer_head            0      0     52   72    1 : tunables  120   60    0 : slabdata      0      0      0

mm_struct             20     20    384   10    1 : tunables   54   27    0 : slabdata      2      2      0

vm_area_struct         0      0     88   44    1 : tunables  120   60    0 : slabdata      0      0      0

fs_cache              25    113     32  113    1 : tunables  120   60    0 : slabdata      1      1      0

files_cache           26     40    192   20    1 : tunables  120   60    0 : slabdata      2      2      0

signal_cache          36     36    416    9    1 : tunables   54   27    0 : slabdata      4      4      0

 

sighand_cache         24     24   1312    3    1 : tunables   24   12    0 : slabdata      8      8      0

task_struct           40     40    768    5    1 : tunables   54   27    0 : slabdata      8      8      0

pid                   30     59     64   59    1 : tunables  120   60    0 : slabdata      1      1      0

idr_layer_cache       72     78    148   26    1 : tunables  120   60    0 : slabdata      3      3      0

size-33554432(DMA)      0      0 33554432    1 8192 : tunables    1    1    0 : slabdata      0      0      0

size-33554432          0      0 33554432    1 8192 : tunables    1    1    0 : slabdata      0      0      0

size-16777216(DMA)      0      0 16777216    1 4096 : tunables    1    1    0 : slabdata      0      0      0

size-16777216          0      0 16777216    1 4096 : tunables    1    1    0 : slabdata      0      0      0

size-8388608(DMA)      0      0 8388608    1 2048 : tunables    1    1    0 : slabdata      0      0      0

size-8388608           0      0 8388608    1 2048 : tunables  ca  1    1    0 : slabdata      0      0      0

size-4194304(DMA)      0      0 4194304    1 1024 : tunables    1    1    0 : slabdata      0      0      0

size-4194304           0      0 4194304    1 1024 : tunables    1    1    0 : slabdata      0      0      0

size-2097152(DMA)      0      0 2097152    1  512 : 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(DMA)      0      0 1048576    1  256 : 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(DMA)       0      0 524288    1  128 : tunables    1    1    0 : slabdata      0      0      0

size-524288            1      1 524288    1  128 : tunables    1    1    0 : slabdata      1      1      0

size-262144(DMA)       0      0 262144    1   64 : 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(DMA)       0      0 131072    1   32 : tunables    8    4    0 : slabdata      0      0      0

size-131072            0      0 131072    1   32 : tunables    8    4    0 : slabdata      0      0      0

size-65536(DMA)        0      0  65536    1   16 : tunables    8    4    0 : slabdata      0      0      0

size-65536             1      1  65536    1   16 : tunables    8    4    0 : slabdata      1      1      0

size-32768(DMA)        0      0  32768    1    8 : tunables    8    4    0 : slabdata      0      0      0

size-32768             0      0  32768    1    8 : tunables    8    4    0 : slabdata      0      0      0

size-16384(DMA)        0      0  16384    1    4 : tunables    8    4    0 : slabdata      0      0      0

size-16384             0      0  16384    1    4 : tunables    8    4    0 : slabdata      0      0      0

size-8192(DMA)         0      0   8192    1    2 : tunables    8    4    0 : slabdata      0      0      0

size-8192              0      0   8192    1    2 : tunables    8    4    0 : slabdata      0      0      0

size-4096(DMA)         0      0   4096    1    1 : tunables   24   12    0 : slabdata      0      0      0

size-4096              3      3   4096    1    1 : tunables   24   12    0 : slabdata      3      3      0

size-2048(DMA)         0      0   2048    2    1 : tunables   24   12    0 : slabdata      0      0      0

size-2048             30     30   2048    2    1 : tunables   24   12    0 : slabdata     15     15      0

size-1024(DMA)         0      0   1024    4    1 : tunables   54   27    0 : slabdata      0      0      0

size-1024             20     20   1024    4    1 : tunables   54   27    0 : slabdata      5      5      0

size-512(DMA)          0      0    512    8    1 : tunables   54   27    0 : slabdata      0      0      0

size-512             224    232    512    8    1 : tunables   54   27    0 : slabdata     29     29      0

size-256(DMA)          0      0    256   15    1 : tunables  120   60    0 : slabdata      0      0      0

size-256              45     45    256   15    1 : tunables  120   60    0 : slabdata      3      3      0

size-192(DMA)          0      0    192   20    1 : tunables  120   60    0 : slabdata      0      0      0

size-192              30     40    192   20    1 : tunables  120   60    0 : slabdata      2      2      0

size-128(DMA)          0      0    128   30    1 : tunables  120   60    0 : slabdata      0      0      0

size-128             191    210    128   30    1 : tunables  120   60    0 : slabdata      7      7      0

size-96(DMA)           0      0     96   40    1 : tunables  120   60    0 : slabdata      0      0      0

size-96           t /pr   800    800     96   40    1 : tunables  120   60    0 : slabdata     20     20      0

size-64(DMA)           0      0     64   59    1 : tunables  120   60    0 : slabdata      0      0      0

size-32(DMA)           0      0     32  113    1 : tunables  120   60    0 : slabdata      0      0      0

size-64              331    354     64   59    1 : tunables  120   60    0 : slabdata      6      6      0

size-32             1921   1921     32  113    1 : tunables  120   60    0 : slabdata     17     17      0

kmem_cache           112    120     96   40    1 : tunables  120   60    0 : slabdata      3      3      0

 

 

 

 

 

 

Here's the output from my application when I started having problems:

 

synapps: page allocation failure. order:5, mode:0x200d2

Hardware Trace:

   0 Target : <0x00004b34> { _dump_stack + 0x0 }

     Source : <0x00031260> { ___alloc_pages_internal + 0x1c0 } CALL pcrel

   1 Target : <0x00031260> { ___alloc_pages_internal + 0x1c0

 

<snip>

 

Return addresses in stack:

    address : <0x00031238> { ___alloc_pages_internal + 0x198 }

    address : <0x00031264> { ___alloc_pages_internal + 0x1c4 }

    address : <0x0007029c> { _ramfs_nommu_expand_for_mapping + 0x74 }

    address : <0x0004a2c4> { _alloc_inode + 0x160 }

    address : <0x0004ac90> { _new_inode + 0xc }

    address : <0x0006fd2e> { _ramfs_get_inode + 0xe }

    address : <0x000392e0> { _shmem_file_setup + 0x90 }

    address : <0x00095766> { _sprintf + 0x1a }

    address : <0x00081724> { _newseg + 0xd4 }

    address : <0x00090afc> { _idr_pre_get + 0x30 }

    address : <0x0007ec14> { _ipcget + 0x94 }

    address : <0x00081646> { _sys_shmget + 0x52 }

    address : <0x03268314> [ /usr/lib/libasound.so.2 + 0x68314 ]

Mem-Info:

DMA per-cpu:

CPU    0: hi:   18, btch:   3 usd:   2

Active_anon:0 active_file:652 inactive_anon:0

inactive_file:608 dirty:0 writeback:0 unstable:0

free:9389 slab:648 mapped:0 pagetables:0 bounce:0

DMA free:37556kB min:952kB low:1188kB high:1428kB active_anon:0kB inactive_anon:0kB active_file:2608kB inactive_file:2432kB present:56892kB pages_scanned:0 all_unreclaimable? no

lowmem_reserve[]: 0 0 0

DMA: 383*4kB 391*8kB 392*16kB 342*32kB 243*64kB 1*128kB 0*256kB 0*512kB 0*1024kB 0*2048kB 0*4096kB 0*8192kB 0*16384kB 0*32768kB = 37556kB

1260 total pagecache pages

14335 pages RAM

532 pages reserved

0 pages shared

4385 pages non-shared

 

 

 

 

Once my application gets into this state, running any application (even kill or free) results in similar errors. Some socket operations in my application appear to still be working, though.

QuoteReplyEditDelete

 

 

2011-07-29 06:30:13     Re: Symptoms of memory fragmentation?

Sonic Zhang (CHINA)

Message: 102716   

 

synapps: page allocation failure. order:5, mode:0x200d2

 

DMA: 383*4kB 391*8kB 392*16kB 342*32kB 243*64kB 1*128kB 0*256kB 0*512kB 0*1024kB 0*2048kB

 

It is clear that you run out of  128kb memory blocks. If you want to allocate big memory block, only do once at the beginning of your application.

QuoteReplyEditDelete

 

 

2011-07-29 11:37:19     Re: Symptoms of memory fragmentation?

Cameron Barfield (UNITED STATES)

Message: 102717   

 

Could this be related to the memory leak I'm seeing in this thread?

 

  blackfin.uclinux.org/gf/project/uclinux-dist/forum/?_forum_action=ForumMessageBrowse&thread_id=46280&action=ForumBrowse&forum_id=39

 

I don't fully understand how the slab allocation works, but if I (actually, ALSA, most likely) allocate a 128KB block and then free it, shouldn't it be returned to the kernel as a 128KB block?

Attachments

    Outcomes