[uClinux-dev] [RFC][PATCH try #3] A new memory algorithm for the embedded linux system

Aubrey Li aubrey.adi at gmail.com
Fri Jan 5 04:30:07 EST 2007


Thirdly, this is the patch attached about a new memory algorithm for
the embedded linux system.
It's a replacement of buddy system and can accept non power of 2 order
memory request.

Thanks Phil to point out one case the previous patch doesn't deal
with. The problem is fixed in this patch. Now it's more robust and
here some test result on my side is as follows, comparing with buddy
system:

1) after system boot, buddyinfo result

-buddy system:

root:~> cat /proc/buddyinfo
Node 0, zone      DMA      0      1      1      0      1      1      0
1      1      1      1      1      1      0

-cake system:

root:~> cat /proc/buddyinfo
--------Node 0, zone DMA--------
No.1    Page addr: 0x229000   num: 3     buddy addr:0x22c000
No.2    Page addr: 0x63a000   num: 8134  buddy addr:0x2600000
-------------End----------------

Comment:
buddy - memory is fragmented into 10 blocks, the biggest block is pow(2,
12) = 4096 pages.
cake - memory is fragmented into 2 blocks, the biggest block is 8134 pages.

2) run a test program, it's attached.

-buddy system:

root:~> time ./t
real    0m 1.54s
user    0m 0.41s
sys     0m 1.13s

-cake system:

root:~> time ./t
real    0m 1.50s
user    0m 0.34s
sys     0m 1.16s

Comment: The time cost is almost the same.

3) After the test program, buddyinfo result:

-buddy:

root:~> cat /proc/buddyinfo
Node 0, zone      DMA     22     39     36     36     34     35     19
2      3      1      1      1      0      0

-cake:

root:~> cat /proc/buddyinfo
--------Node 0, zone DMA--------
No.1    Page addr: 0x5b8000   num: 1     buddy addr:0x5b9000
No.2    Page addr: 0x5bd000   num: 17    buddy addr:0x5ce000
No.3    Page addr: 0x65c000   num: 34    buddy addr:0x67e000
No.4    Page addr: 0x68f000   num: 3     buddy addr:0x692000
No.5    Page addr: 0x694000   num: 8     buddy addr:0x69c000
No.6    Page addr: 0x6aa000   num: 140   buddy addr:0x736000
No.7    Page addr: 0x738000   num: 80    buddy addr:0x788000
No.8    Page addr: 0x78a000   num: 80    buddy addr:0x7da000
No.9    Page addr: 0x7dc000   num: 194   buddy addr:0x89e000
No.10   Page addr: 0x89f000   num: 113   buddy addr:0x910000
No.11   Page addr: 0x911000   num: 96    buddy addr:0x971000
No.12   Page addr: 0x972000   num: 81    buddy addr:0x9c3000
No.13   Page addr: 0x9c4000   num: 166   buddy addr:0xa6a000
No.14   Page addr: 0xa6b000   num: 76    buddy addr:0xab7000
No.15   Page addr: 0xab8000   num: 81    buddy addr:0xb09000
No.16   Page addr: 0xb0a000   num: 186   buddy addr:0xbc4000
No.17   Page addr: 0xbc5000   num: 113   buddy addr:0xc36000
No.18   Page addr: 0xc37000   num: 106   buddy addr:0xca1000
No.19   Page addr: 0xca2000   num: 122   buddy addr:0xd1c000
No.20   Page addr: 0xd1d000   num: 115   buddy addr:0xd90000
No.21   Page addr: 0xd91000   num: 86    buddy addr:0xde7000
No.22   Page addr: 0xde8000   num: 81    buddy addr:0xe39000
No.23   Page addr: 0xe3a000   num: 161   buddy addr:0xedb000
No.24   Page addr: 0xedc000   num: 81    buddy addr:0xf2d000
No.25   Page addr: 0xf2e000   num: 81    buddy addr:0xf7f000
No.26   Page addr: 0xf80000   num: 196   buddy addr:0x1044000
No.27   Page addr: 0x1045000  num: 113   buddy addr:0x10b6000
No.28   Page addr: 0x10b7000  num: 115   buddy addr:0x112a000
No.29   Page addr: 0x112b000  num: 113   buddy addr:0x119c000
No.30   Page addr: 0x119d000  num: 192   buddy addr:0x125d000
No.31   Page addr: 0x125e000  num: 81    buddy addr:0x12af000
No.32   Page addr: 0x12b0000  num: 530   buddy addr:0x14c2000
No.33   Page addr: 0x14c4000  num: 445   buddy addr:0x1681000
No.34   Page addr: 0x1682000  num: 70    buddy addr:0x16c8000
No.35   Page addr: 0x16c9000  num: 3895  buddy addr:0x2600000
-------------End----------------

Comment:
buddy system - memory is fragmented into 229 blocks, the biggest block is
pow(2,11) = 2048 pages.

cake system - memory is fragmented into 35 blocks, the biggest block
is 3895 pages.

Any comments?

Thanks,
-Aubrey
-------------- next part --------------
A non-text attachment was scrubbed...
Name: cake.diff
Type: application/octet-stream
Size: 8300 bytes
Desc: not available
Url : http://mailman.uclinux.org/pipermail/uclinux-dev/attachments/20070105/21ecd542/cake.obj
-------------- next part --------------
A non-text attachment was scrubbed...
Name: t.c
Type: application/octet-stream
Size: 587 bytes
Desc: not available
Url : http://mailman.uclinux.org/pipermail/uclinux-dev/attachments/20070105/21ecd542/t.obj


More information about the uClinux-dev mailing list