Getting free list to compile. Added stubs for global fixed shared mem pools.
This commit was SVN r9.
Этот коммит содержится в:
родитель
e952ab1f88
Коммит
695dd34a8f
@ -29,7 +29,10 @@
|
||||
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
|
||||
|
||||
#include "lam/mem/free_list.h"
|
||||
#include "lam/util/lam_log.h"
|
||||
#include "lam/os/numa.h"
|
||||
#include "lam/os/lam_system.h"
|
||||
#include "lam/mem/mem_globals.h"
|
||||
|
||||
/* private list functions */
|
||||
void lam_frl_append_nl(lam_free_list_t *flist, void *chunk, int pool_idx);
|
||||
@ -38,7 +41,7 @@ int lam_frl_create_more_elts(lam_free_list_t *flist, int pool_idx);
|
||||
|
||||
void *lam_frl_get_mem_chunk(lam_free_list_t *flist, int index, size_t *len, int *err);
|
||||
|
||||
int lam_frl_mem_pool_init(int nlists, long pages_per_list, ssize_t chunk_size,
|
||||
int lam_frl_mem_pool_init(lam_free_list_t *flist, int nlists, long pages_per_list, ssize_t chunk_size,
|
||||
size_t page_size, long min_pages_per_list,
|
||||
long default_min_pages_per_list, long default_pages_per_list,
|
||||
long max_pages_per_list, ssize_t max_mem_in_pool);
|
||||
@ -125,8 +128,8 @@ int lam_frl_init_with(
|
||||
size_t max_mem_in_pool;
|
||||
size_t initial_mem_per_list;
|
||||
long max_mem_per_list;
|
||||
int list,pool;
|
||||
int err;
|
||||
int list, pool;
|
||||
int err = LAM_SUCCESS;
|
||||
|
||||
flist->fl_description = description;
|
||||
flist->fl_nlists = nlists;
|
||||
@ -141,8 +144,8 @@ int lam_frl_init_with(
|
||||
{
|
||||
/* instantiate memory pool */
|
||||
max_mem_in_pool = max_pages_per_list * page_size;
|
||||
err = lam_mp_init_with(
|
||||
flist->fl_pool,
|
||||
err = lam_frl_mem_pool_init(
|
||||
flist,
|
||||
nlists,
|
||||
pages_per_list,
|
||||
chunk_size,
|
||||
@ -188,7 +191,7 @@ int lam_frl_init_with(
|
||||
flist->fl_nlists);
|
||||
if ( !flist->fl_free_lists )
|
||||
{
|
||||
ulm_exit((-1, "Error: Out of memory\n"));
|
||||
lam_exit((-1, "Error: Out of memory\n"));
|
||||
}
|
||||
|
||||
/* run constructors */
|
||||
@ -199,7 +202,7 @@ int lam_frl_init_with(
|
||||
/* process shared memory allocation */
|
||||
flist->fl_free_lists[list] =
|
||||
(lam_seg_list_t *)
|
||||
PerProcSharedMemoryPools.getMemorySegment(
|
||||
lam_fmp_get_mem_segment(&lam_per_proc_shmem_pools,
|
||||
sizeof(lam_seg_list_t), CACHE_ALIGNMENT, list);
|
||||
}
|
||||
else
|
||||
@ -210,7 +213,7 @@ int lam_frl_init_with(
|
||||
}
|
||||
|
||||
if (!flist->fl_free_lists[list])
|
||||
ulm_exit((-1, "Error: Out of memory\n"));
|
||||
lam_exit((-1, "Error: Out of memory\n"));
|
||||
|
||||
STATIC_INIT(flist->fl_free_lists[list], &seg_list_cls);
|
||||
|
||||
@ -229,7 +232,7 @@ int lam_frl_init_with(
|
||||
flist->fl_affinity = (affinity_t *)malloc(sizeof(affinity_t) *
|
||||
flist->fl_nlists);
|
||||
if ( !flist->fl_affinity )
|
||||
ulm_exit((-1, "Error: Out of memory\n"));
|
||||
lam_exit((-1, "Error: Out of memory\n"));
|
||||
|
||||
/* copy policies in */
|
||||
for ( pool = 0; pool < flist->fl_nlists; pool++ )
|
||||
@ -248,10 +251,10 @@ int lam_frl_init_with(
|
||||
while ( lam_sgl_get_bytes_pushed(flist->fl_free_lists[pool])
|
||||
< lam_sgl_get_min_bytes_pushed(flist->fl_free_lists[pool]) )
|
||||
{
|
||||
if (lam_frl_create_more_elts(pool) != LAM_SUCCESS)
|
||||
if (lam_frl_create_more_elts(flist, pool) != LAM_SUCCESS)
|
||||
{
|
||||
ulm_exit((-1, "Error: Setting up initial private "
|
||||
"free list for %s.\n", fl_description));
|
||||
lam_exit((-1, "Error: Setting up initial private "
|
||||
"free list for %s.\n", flist->fl_description));
|
||||
}
|
||||
}
|
||||
|
||||
@ -260,7 +263,7 @@ int lam_frl_init_with(
|
||||
else
|
||||
{
|
||||
/* only 1 process should be initializing the list */
|
||||
ulm_exit((-1, "Error: Setting up initial private free "
|
||||
lam_exit((-1, "Error: Setting up initial private free "
|
||||
"list %d for %s.\n", pool, flist->fl_description));
|
||||
}
|
||||
}
|
||||
@ -300,7 +303,9 @@ int lam_frl_mem_pool_init(lam_free_list_t *flist,
|
||||
/* shared memory allocation */
|
||||
to_alloc = sizeof(lam_mem_pool_t);
|
||||
flist->fl_pool =
|
||||
(lam_mem_pool_t *)SharedMemoryPools.getMemorySegment(to_alloc, CACHE_ALIGNMENT);
|
||||
(lam_mem_pool_t *)lam_fmp_get_mem_segment(&lam_shmem_pools,
|
||||
to_alloc,
|
||||
CACHE_ALIGNMENT, 0);
|
||||
if ( flist->fl_pool )
|
||||
STATIC_INIT(flist->fl_pool, &shmem_pool_cls);
|
||||
} else {
|
||||
@ -327,13 +332,15 @@ void *lam_frl_get_mem_chunk(lam_free_list_t *flist, int index, size_t *len, int
|
||||
exceed the amount allowed */
|
||||
sz_to_add = lam_mp_get_chunk_size(flist->fl_pool);
|
||||
|
||||
if (OPT_MEMPROFILE) {
|
||||
/* need to add option to configure */
|
||||
/* if (OPT_MEMPROFILE) { */
|
||||
if ( 0 ) {
|
||||
flist->fl_chunks_req[index]++;
|
||||
}
|
||||
|
||||
if (index >= flist->fl_nlists)
|
||||
{
|
||||
ulm_err(("Error: Array out of bounds\n"));
|
||||
lam_err(("Error: Array out of bounds\n"));
|
||||
return chunk;
|
||||
}
|
||||
|
||||
@ -348,7 +355,7 @@ void *lam_frl_get_mem_chunk(lam_free_list_t *flist, int index, size_t *len, int
|
||||
lam_sgl_get_max_consec_fail(flist->fl_free_lists[index]) )
|
||||
{
|
||||
*err = LAM_ERR_OUT_OF_RESOURCE;
|
||||
ulm_err(("Error: List out of memory in pool for %s\n",
|
||||
lam_err(("Error: List out of memory in pool for %s\n",
|
||||
flist->fl_description));
|
||||
return chunk;
|
||||
} else
|
||||
@ -371,7 +378,7 @@ void *lam_frl_get_mem_chunk(lam_free_list_t *flist, int index, size_t *len, int
|
||||
lam_sgl_get_max_consec_fail(flist->fl_free_lists[index]) )
|
||||
{
|
||||
*err = LAM_ERR_OUT_OF_RESOURCE;
|
||||
ulm_err(("Error: List out of memory in pool for %s\n",
|
||||
lam_err(("Error: List out of memory in pool for %s\n",
|
||||
flist->fl_description));
|
||||
return chunk;
|
||||
} else
|
||||
@ -384,7 +391,8 @@ void *lam_frl_get_mem_chunk(lam_free_list_t *flist, int index, size_t *len, int
|
||||
this far in the code. */
|
||||
lam_sgl_set_consec_fail(flist->fl_free_lists[index], 0);
|
||||
|
||||
if (OPT_MEMPROFILE) {
|
||||
/* if (OPT_MEMPROFILE) { */
|
||||
if ( 0 ) {
|
||||
flist->fl_chunks_returned[index]++;
|
||||
}
|
||||
|
||||
@ -395,11 +403,11 @@ void *lam_frl_get_mem_chunk(lam_free_list_t *flist, int index, size_t *len, int
|
||||
|
||||
void lam_frl_append_nl(lam_free_list_t *flist, void *chunk, int pool_idx)
|
||||
{
|
||||
/* ASSERT: mp_chunk_sz >= fl_n_elt_per_chunk * fl_elt_size */
|
||||
/* ASSERT: mp_chunk_sz >= fl_elt_per_chunk * fl_elt_size */
|
||||
// push items onto list
|
||||
lam_sgl_append_elt_chunk(flist->fl_free_lists[pool_idx],
|
||||
chunk, lam_mp_get_chunk_size(flist->fl_pool),
|
||||
flist->fl_n_elt_per_chunk, flist->fl_elt_size);
|
||||
flist->fl_elt_per_chunk, flist->fl_elt_size);
|
||||
}
|
||||
|
||||
|
||||
@ -407,14 +415,14 @@ void lam_frl_append_nl(lam_free_list_t *flist, void *chunk, int pool_idx)
|
||||
|
||||
int lam_frl_create_more_elts(lam_free_list_t *flist, int pool_idx)
|
||||
{
|
||||
int err = LAM_SUCCESS;
|
||||
int err = LAM_SUCCESS, desc;
|
||||
size_t len_added;
|
||||
char *current_loc;
|
||||
|
||||
void *ptr = lam_frl_get_mem_chunk(flist, pool_idx, &len_added, &err);
|
||||
|
||||
if (0 == ptr ) {
|
||||
ulm_err(("Error: Can't get new elements for %s\n",
|
||||
lam_err(("Error: Can't get new elements for %s\n",
|
||||
flist->fl_description));
|
||||
return err;
|
||||
}
|
||||
@ -425,9 +433,9 @@ int lam_frl_create_more_elts(lam_free_list_t *flist, int pool_idx)
|
||||
if (!lam_set_affinity(ptr, len_added,
|
||||
flist->fl_affinity[pool_idx]))
|
||||
{
|
||||
err = ULM_ERROR;
|
||||
err = LAM_ERROR;
|
||||
#ifdef _DEBUGQUEUES
|
||||
ulm_err(("Error: Can't set memory policy (pool_idx=%d)\n",
|
||||
lam_err(("Error: Can't set memory policy (pool_idx=%d)\n",
|
||||
pool_idx));
|
||||
return err;
|
||||
#endif /* _DEBUGQUEUES */
|
||||
@ -436,11 +444,11 @@ int lam_frl_create_more_elts(lam_free_list_t *flist, int pool_idx)
|
||||
|
||||
/* Construct new descriptors using placement new */
|
||||
current_loc = (char *) ptr;
|
||||
for (int desc = 0; desc < flist->fl_n_elt_per_chunk; desc++)
|
||||
for (desc = 0; desc < flist->fl_elt_per_chunk; desc++)
|
||||
{
|
||||
STATIC_INIT((lam_flist_elt_t *)current_loc, flist->fl_elt_cls);
|
||||
lam_fle_set_idx(current_loc, pool_idx);
|
||||
current_loc += eleSize_m;
|
||||
STATIC_INIT(*(lam_flist_elt_t *)current_loc, flist->fl_elt_cls);
|
||||
lam_fle_set_idx((lam_flist_elt_t *)current_loc, pool_idx);
|
||||
current_loc += flist->fl_elt_size;
|
||||
}
|
||||
|
||||
/* push chunk of memory onto the list */
|
||||
|
54
src/lam/mem/mem_globals.c
Обычный файл
54
src/lam/mem/mem_globals.c
Обычный файл
@ -0,0 +1,54 @@
|
||||
/*
|
||||
* Copyright 2002-2003. The Regents of the University of California. This material
|
||||
* was produced under U.S. Government contract W-7405-ENG-36 for Los Alamos
|
||||
* National Laboratory, which is operated by the University of California for
|
||||
* the U.S. Department of Energy. The Government is granted for itself and
|
||||
* others acting on its behalf a paid-up, nonexclusive, irrevocable worldwide
|
||||
* license in this material to reproduce, prepare derivative works, and
|
||||
* perform publicly and display publicly. Beginning five (5) years after
|
||||
* October 10,2002 subject to additional five-year worldwide renewals, the
|
||||
* Government is granted for itself and others acting on its behalf a paid-up,
|
||||
* nonexclusive, irrevocable worldwide license in this material to reproduce,
|
||||
* prepare derivative works, distribute copies to the public, perform publicly
|
||||
* and display publicly, and to permit others to do so. NEITHER THE UNITED
|
||||
* STATES NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE UNIVERSITY OF
|
||||
* CALIFORNIA, NOR ANY OF THEIR EMPLOYEES, MAKES ANY WARRANTY, EXPRESS OR
|
||||
* IMPLIED, OR ASSUMES ANY LEGAL LIABILITY OR RESPONSIBILITY FOR THE ACCURACY,
|
||||
* COMPLETENESS, OR USEFULNESS OF ANY INFORMATION, APPARATUS, PRODUCT, OR
|
||||
* PROCESS DISCLOSED, OR REPRESENTS THAT ITS USE WOULD NOT INFRINGE PRIVATELY
|
||||
* OWNED RIGHTS.
|
||||
|
||||
* Additionally, this program is free software; you can distribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public License as
|
||||
* published by the Free Software Foundation; either version 2 of the License,
|
||||
* or any later version. Accordingly, this program is distributed in the hope
|
||||
* that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
|
||||
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*/
|
||||
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
|
||||
|
||||
#include <unistd.h>
|
||||
#include "lam_constants.h"
|
||||
#include "lam/base/object.h"
|
||||
#include "lam/mem/mem_globals.h"
|
||||
|
||||
lam_fixed_mpool_t lam_shmem_pools;
|
||||
lam_fixed_mpool_t lam_per_proc_shmem_pools;
|
||||
|
||||
int lam_setup_per_proc_shmem_pools(int npools)
|
||||
{
|
||||
int ret = LAM_SUCCESS;
|
||||
ssize_t initial_alloc = 0;
|
||||
ssize_t min_alloc_size = 4 * getpagesize();
|
||||
int n_array_elts_add = 10;
|
||||
|
||||
STATIC_INIT(lam_per_proc_shmem_pools, &fixed_mem_pool_cls);
|
||||
lam_fmp_init_with(&lam_per_proc_shmem_pools,
|
||||
initial_alloc, min_alloc_size,
|
||||
npools, n_array_elts_add, 1);
|
||||
|
||||
return ret;
|
||||
|
||||
}
|
||||
|
47
src/lam/mem/mem_globals.h
Обычный файл
47
src/lam/mem/mem_globals.h
Обычный файл
@ -0,0 +1,47 @@
|
||||
/*
|
||||
* Copyright 2002-2003. The Regents of the University of California. This material
|
||||
* was produced under U.S. Government contract W-7405-ENG-36 for Los Alamos
|
||||
* National Laboratory, which is operated by the University of California for
|
||||
* the U.S. Department of Energy. The Government is granted for itself and
|
||||
* others acting on its behalf a paid-up, nonexclusive, irrevocable worldwide
|
||||
* license in this material to reproduce, prepare derivative works, and
|
||||
* perform publicly and display publicly. Beginning five (5) years after
|
||||
* October 10,2002 subject to additional five-year worldwide renewals, the
|
||||
* Government is granted for itself and others acting on its behalf a paid-up,
|
||||
* nonexclusive, irrevocable worldwide license in this material to reproduce,
|
||||
* prepare derivative works, distribute copies to the public, perform publicly
|
||||
* and display publicly, and to permit others to do so. NEITHER THE UNITED
|
||||
* STATES NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE UNIVERSITY OF
|
||||
* CALIFORNIA, NOR ANY OF THEIR EMPLOYEES, MAKES ANY WARRANTY, EXPRESS OR
|
||||
* IMPLIED, OR ASSUMES ANY LEGAL LIABILITY OR RESPONSIBILITY FOR THE ACCURACY,
|
||||
* COMPLETENESS, OR USEFULNESS OF ANY INFORMATION, APPARATUS, PRODUCT, OR
|
||||
* PROCESS DISCLOSED, OR REPRESENTS THAT ITS USE WOULD NOT INFRINGE PRIVATELY
|
||||
* OWNED RIGHTS.
|
||||
|
||||
* Additionally, this program is free software; you can distribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public License as
|
||||
* published by the Free Software Foundation; either version 2 of the License,
|
||||
* or any later version. Accordingly, this program is distributed in the hope
|
||||
* that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
|
||||
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*/
|
||||
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
|
||||
|
||||
#ifndef MEM_GLOBALS_H
|
||||
#define MEM_GLOBALS_H
|
||||
|
||||
#include "lam/mem/mem_pool.h"
|
||||
|
||||
/* shared memory pool for use before fork.
|
||||
should be initialized during prefork init.
|
||||
*/
|
||||
extern lam_fixed_mpool_t lam_shmem_pools;
|
||||
|
||||
extern lam_fixed_mpool_t lam_per_proc_shmem_pools;
|
||||
|
||||
int lam_setup_per_proc_shmem_pools(int npools);
|
||||
|
||||
#endif
|
||||
|
||||
|
@ -30,6 +30,7 @@
|
||||
|
||||
#include <string.h>
|
||||
#include <sys/errno.h>
|
||||
#include <unistd.h>
|
||||
#include "lam_constants.h"
|
||||
#include "lam/mem/mem_pool.h"
|
||||
#include "lam/mem/sharedmem_util.h"
|
||||
|
@ -36,7 +36,7 @@ lam_class_info_t seg_list_cls = {"lam_seg_list_t", &object_cls,
|
||||
void lam_sgl_init(lam_seg_list_t *slist)
|
||||
{
|
||||
SUPER_INIT(slist, seg_list_cls.cls_parent);
|
||||
lam_dbl_list_init(&slist->sgl_list);
|
||||
STATIC_INIT(slist->sgl_list, &lam_dbl_list_cls);
|
||||
lam_mtx_init(&slist->sgl_lock);
|
||||
slist->sgl_min_bytes_pushed = 0;
|
||||
slist->sgl_max_bytes_pushed = 0;
|
||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user