mirror of
https://gitlab.nic.cz/labs/bird.git
synced 2024-12-22 09:41:54 +00:00
parent
1740ff57e8
commit
1c7df2c240
@ -145,13 +145,6 @@ BIRD executable by configuring out routing protocols you don't use, and
|
||||
<p>You can pass several command-line options to bird:
|
||||
|
||||
<descrip>
|
||||
<tag><label id="argv-block">-B <m/exp/</tag>
|
||||
allocate memory using 2^<cf/exp/ byte sized blocks;
|
||||
if you're expecting high memory load, raise this to
|
||||
reduce number of allocated memory pages. For a million routes
|
||||
in one table, the recommended setting is 18.
|
||||
Default is your system page size, typically 12 for 4096 bytes.
|
||||
|
||||
<tag><label id="argv-config">-c <m/config name/</tag>
|
||||
use given configuration file instead of <it/prefix/<file>/etc/bird.conf</file>.
|
||||
|
||||
|
@ -61,6 +61,7 @@ pool root_pool;
|
||||
|
||||
void *alloc_sys_page(void);
|
||||
void free_sys_page(void *);
|
||||
void resource_sys_init(void);
|
||||
|
||||
static int indent;
|
||||
|
||||
@ -282,6 +283,7 @@ rlookup(unsigned long a)
|
||||
void
|
||||
resource_init(void)
|
||||
{
|
||||
resource_sys_init();
|
||||
root_pool.r.class = &pool_class;
|
||||
root_pool.name = "Root";
|
||||
init_list(&root_pool.inside);
|
||||
|
@ -178,7 +178,7 @@ struct sl_alignment { /* Magic structure for testing of alignment */
|
||||
int x[0];
|
||||
};
|
||||
|
||||
#define SL_GET_HEAD(x) ((struct sl_head *) PAGE_HEAD(x))
|
||||
#define SL_GET_HEAD(x) ((struct sl_head *) (((uintptr_t) (x)) & ~(page_size-1)))
|
||||
|
||||
/**
|
||||
* sl_new - create a new Slab
|
||||
|
@ -17,7 +17,6 @@
|
||||
#endif
|
||||
|
||||
long page_size = 0;
|
||||
_Bool alloc_multipage = 0;
|
||||
|
||||
#ifdef HAVE_MMAP
|
||||
static _Bool use_fake = 0;
|
||||
@ -46,31 +45,9 @@ alloc_sys_page(void)
|
||||
#ifdef HAVE_MMAP
|
||||
if (!use_fake)
|
||||
{
|
||||
if (alloc_multipage)
|
||||
{
|
||||
void *big = mmap(NULL, page_size * 2, PROT_WRITE | PROT_READ, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
|
||||
if (big == MAP_FAILED)
|
||||
bug("mmap(%lu) failed: %m", page_size);
|
||||
|
||||
uintptr_t offset = ((uintptr_t) big) % page_size;
|
||||
if (offset)
|
||||
{
|
||||
void *ret = big + page_size - offset;
|
||||
munmap(big, page_size - offset);
|
||||
munmap(ret + page_size, offset);
|
||||
return ret;
|
||||
}
|
||||
else
|
||||
{
|
||||
munmap(big + page_size, page_size);
|
||||
return big;
|
||||
}
|
||||
}
|
||||
|
||||
void *ret = mmap(NULL, page_size, PROT_WRITE | PROT_READ, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
|
||||
if (ret == MAP_FAILED)
|
||||
bug("mmap(%lu) failed: %m", page_size);
|
||||
|
||||
return ret;
|
||||
}
|
||||
else
|
||||
|
@ -682,7 +682,7 @@ signal_init(void)
|
||||
* Parsing of command-line arguments
|
||||
*/
|
||||
|
||||
static char *opt_list = "B:c:dD:ps:P:u:g:flRh";
|
||||
static char *opt_list = "bc:dD:ps:P:u:g:flRh";
|
||||
int parse_and_exit;
|
||||
char *bird_name;
|
||||
static char *use_user;
|
||||
@ -703,7 +703,6 @@ display_help(void)
|
||||
fprintf(stderr,
|
||||
"\n"
|
||||
"Options: \n"
|
||||
" -B <block-size> Use 2^this number as memory allocation block size (default: 12)\n"
|
||||
" -c <config-file> Use given configuration file instead of\n"
|
||||
" " PATH_CONFIG_FILE "\n"
|
||||
" -d Enable debug messages and run bird in foreground\n"
|
||||
@ -790,15 +789,12 @@ get_gid(const char *s)
|
||||
return gr->gr_gid;
|
||||
}
|
||||
|
||||
extern _Bool alloc_multipage;
|
||||
|
||||
static void
|
||||
parse_args(int argc, char **argv)
|
||||
{
|
||||
int config_changed = 0;
|
||||
int socket_changed = 0;
|
||||
int c;
|
||||
int bp;
|
||||
|
||||
bird_name = get_bird_name(argv[0], "bird");
|
||||
if (argc == 2)
|
||||
@ -811,29 +807,6 @@ parse_args(int argc, char **argv)
|
||||
while ((c = getopt(argc, argv, opt_list)) >= 0)
|
||||
switch (c)
|
||||
{
|
||||
case 'B':
|
||||
bp = atoi(optarg);
|
||||
if (bp < 1)
|
||||
{
|
||||
fprintf(stderr, "Strange block size power %d\n\n", bp);
|
||||
display_usage();
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if ((1 << bp) < page_size)
|
||||
{
|
||||
fprintf(stderr, "Requested block size %ld is lesser than page size %ld\n\n", (1L<<bp), page_size);
|
||||
display_usage();
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if ((1L << bp) > page_size)
|
||||
{
|
||||
alloc_multipage = 1;
|
||||
page_size = (1L << bp);
|
||||
}
|
||||
|
||||
break;
|
||||
case 'c':
|
||||
config_name = optarg;
|
||||
config_changed = 1;
|
||||
@ -888,8 +861,6 @@ parse_args(int argc, char **argv)
|
||||
}
|
||||
}
|
||||
|
||||
void resource_sys_init(void);
|
||||
|
||||
/*
|
||||
* Hic Est main()
|
||||
*/
|
||||
@ -902,7 +873,6 @@ main(int argc, char **argv)
|
||||
dmalloc_debug(0x2f03d00);
|
||||
#endif
|
||||
|
||||
resource_sys_init();
|
||||
parse_args(argc, argv);
|
||||
log_switch(1, NULL, NULL);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user