Welcome! Log In Create A New Profile

Advanced

Re: Help with shared memory usage

July 27, 2013 03:12PM
Hello Maxim.

I've been looking into those functions and guided by your comments
made the following patch to merge continuous block of memory.
Can you check if it is ok?
Comments are welcome.

--- src/core/ngx_slab.c 2013-05-06 07:27:10.000000000 -0300
+++ src/core/ngx_slab.c 2013-07-27 15:54:55.316995223 -0300
@@ -687,6 +687,25 @@ ngx_slab_free_pages(ngx_slab_pool_t *poo
page->next->prev = (uintptr_t) page;

pool->free.next = page;
+
+ for (page = pool->pages; ((page->slab > 0) && (&page[page->slab] <
(ngx_slab_page_t *) (pool->start - sizeof(ngx_slab_page_t))));) {
+ ngx_slab_page_t *neighbour = &page[page->slab];
+ if (((ngx_slab_page_t *) page->prev != NULL) && (page->next !=
NULL) && ((page->prev & NGX_SLAB_PAGE_MASK) == NGX_SLAB_PAGE) &&
+ ((ngx_slab_page_t *) neighbour->prev != NULL) &&
(neighbour->next != NULL) && ((neighbour->prev & NGX_SLAB_PAGE_MASK) ==
NGX_SLAB_PAGE)) {
+
+ page->slab += neighbour->slab;
+
+ ((ngx_slab_page_t *) neighbour->prev)->next = neighbour->next;
+ neighbour->next->prev = neighbour->prev;
+
+ neighbour->slab = NGX_SLAB_PAGE_FREE;
+ neighbour->prev = (uintptr_t) &pool->free;
+ neighbour->next = &pool->free;
+ continue;
+ }
+
+ page += ((page->prev & NGX_SLAB_PAGE_MASK) == NGX_SLAB_PAGE) ?
page->slab : 1;
+ }
}



Regards,
Wandenberg


On Mon, Jul 1, 2013 at 8:36 AM, Maxim Dounin <mdounin@mdounin.ru> wrote:

> Hello!
>
> On Fri, Jun 28, 2013 at 10:36:39PM -0300, Wandenberg Peixoto wrote:
>
> > Hi,
> >
> > I'm trying to understand how the shared memory pool works inside the
> Nginx.
> > To do that, I made a very small module which create a shared memory zone
> > with 2097152 bytes,
> > and allocating and freeing blocks of memory, starting from 0 and
> increasing
> > by 1kb until the allocation fails.
> >
> > The strange parts to me were:
> > - the maximum block I could allocate was 128000 bytes
> > - each time the allocation fails, I started again from 0, but the maximum
> > allocated block changed with the following profile
> > 128000
> > 87040
> > 70656
> > 62464
> > 58368
> > 54272
> > 50176
> > 46080
> > 41984
> > 37888
> > 33792
> > 29696
> >
> > This is the expected behavior?
> > Can anyone help me explaining how shared memory works?
> > I have another module which do an intensive shared memory usage, and
> > understanding this can help me improve it solving some "no memory"
> messages.
> >
> > I put the code in attach.
>
> I've looked into this, and the behaviour is expected as per
> nginx slab allocator code and the way you do allocations in your
> test.
>
> Increasing allocations of large blocks immediately followed by
> freeing them result in free memory blocks split into smaller
> blocks, eventually resulting in at most page size allocations
> being possible. Take a look at ngx_slab_alloc_pages() and
> ngx_slab_free_pages() for details.
>
> Note that slab allocator nginx uses for allocations in shared
> memory is designed mostly for small allocations. It works well
> for allocations less than page size, but large allocations support
> is very simple. Probably it should be improved, but as of now
> nothing in nginx uses large allocations in shared memory.
>
> --
> Maxim Dounin
> http://nginx.org/en/donation.html
>
> _______________________________________________
> nginx-devel mailing list
> nginx-devel@nginx.org
> http://mailman.nginx.org/mailman/listinfo/nginx-devel
>
_______________________________________________
nginx-devel mailing list
nginx-devel@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-devel
Subject Author Views Posted

Help with shared memory usage Attachments

wandenberg 3030 June 28, 2013 09:46PM

Re: Help with shared memory usage

Maxim Dounin 1562 July 01, 2013 07:40AM

Re: Help with shared memory usage Attachments

wandenberg 1281 July 27, 2013 03:12PM

Re: Help with shared memory usage

Maxim Dounin 942 July 29, 2013 01:12PM

Re: Help with shared memory usage

wandenberg 1284 July 29, 2013 03:04PM

Re: Help with shared memory usage

Maxim Dounin 760 July 30, 2013 06:10AM

Re: Help with shared memory usage Attachments

wandenberg 1043 July 30, 2013 11:30PM

Re: Help with shared memory usage

wandenberg 923 September 02, 2013 10:28AM

Re: Help with shared memory usage

Maxim Dounin 887 September 02, 2013 10:54AM

Re: Help with shared memory usage

Maxim Dounin 875 October 06, 2013 05:38AM

Re: Help with shared memory usage

wandenberg 696 December 18, 2013 07:44AM

Re: Help with shared memory usage

Maxim Dounin 644 December 20, 2013 11:50AM

Re: Help with shared memory usage

wandenberg 726 December 26, 2013 07:14PM

Re: Help with shared memory usage

wandenberg 718 January 21, 2014 10:42PM

Re: Help with shared memory usage

Maxim Dounin 681 January 22, 2014 11:52AM

Re: Help with shared memory usage

Yichun Zhang (agentzh) 850 January 22, 2014 01:48PM

Re: Help with shared memory usage

John Watson 545 April 25, 2014 03:48PM

Re: Help with shared memory usage

Filipe Da Silva 662 April 26, 2014 07:08AM

Re: Help with shared memory usage

Maxim Dounin 552 April 28, 2014 08:12AM

Re: Help with shared memory usage

Maxim Dounin 683 May 28, 2014 02:42PM

Re: Help with shared memory usage

wandenberg 860 May 31, 2014 10:46PM

Re: Help with shared memory usage

John Watson 1045 August 07, 2013 03:00PM



Sorry, you do not have permission to post/reply in this forum.

Online Users

Guests: 107
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready