bgpd: raise default & max r/w quanta to 64

Vectored writes are more efficient with a higher quantum.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
This commit is contained in:
Quentin Young 2019-10-07 17:33:39 +00:00
parent 093279cd02
commit 8fa7732f5d
2 changed files with 24 additions and 53 deletions

View File

@ -22,7 +22,7 @@
#ifndef _FRR_BGP_IO_H
#define _FRR_BGP_IO_H
#define BGP_WRITE_PACKET_MAX 10U
#define BGP_WRITE_PACKET_MAX 64U
#define BGP_READ_PACKET_MAX 10U
#include "bgpd/bgpd.h"

View File

@ -1586,36 +1586,24 @@ DEFUN (no_bgp_update_delay,
}
static int bgp_wpkt_quanta_config_vty(struct vty *vty, const char *num,
char set)
static int bgp_wpkt_quanta_config_vty(struct vty *vty, uint32_t quanta,
bool set)
{
VTY_DECLVAR_CONTEXT(bgp, bgp);
if (set) {
uint32_t quanta = strtoul(num, NULL, 10);
atomic_store_explicit(&bgp->wpkt_quanta, quanta,
memory_order_relaxed);
} else {
atomic_store_explicit(&bgp->wpkt_quanta, BGP_WRITE_PACKET_MAX,
memory_order_relaxed);
}
quanta = set ? quanta : BGP_WRITE_PACKET_MAX;
atomic_store_explicit(&bgp->wpkt_quanta, quanta, memory_order_relaxed);
return CMD_SUCCESS;
}
static int bgp_rpkt_quanta_config_vty(struct vty *vty, const char *num,
char set)
static int bgp_rpkt_quanta_config_vty(struct vty *vty, uint32_t quanta,
bool set)
{
VTY_DECLVAR_CONTEXT(bgp, bgp);
if (set) {
uint32_t quanta = strtoul(num, NULL, 10);
atomic_store_explicit(&bgp->rpkt_quanta, quanta,
memory_order_relaxed);
} else {
atomic_store_explicit(&bgp->rpkt_quanta, BGP_READ_PACKET_MAX,
memory_order_relaxed);
}
quanta = set ? quanta : BGP_READ_PACKET_MAX;
atomic_store_explicit(&bgp->rpkt_quanta, quanta, memory_order_relaxed);
return CMD_SUCCESS;
}
@ -1636,47 +1624,32 @@ void bgp_config_write_rpkt_quanta(struct vty *vty, struct bgp *bgp)
vty_out(vty, " read-quanta %d\n", quanta);
}
/* Packet quanta configuration */
DEFUN (bgp_wpkt_quanta,
/* Packet quanta configuration
*
* XXX: The value set here controls the size of a stack buffer in the IO
* thread. When changing these limits be careful to prevent stack overflow.
*
* Furthermore, the maximums used here should correspond to
* BGP_WRITE_PACKET_MAX and BGP_READ_PACKET_MAX.
*/
DEFPY (bgp_wpkt_quanta,
bgp_wpkt_quanta_cmd,
"write-quanta (1-10)",
"[no] write-quanta (1-64)$quanta",
NO_STR
"How many packets to write to peer socket per run\n"
"Number of packets\n")
{
int idx_number = 1;
return bgp_wpkt_quanta_config_vty(vty, argv[idx_number]->arg, 1);
return bgp_wpkt_quanta_config_vty(vty, quanta, !no);
}
DEFUN (no_bgp_wpkt_quanta,
no_bgp_wpkt_quanta_cmd,
"no write-quanta (1-10)",
NO_STR
"How many packets to write to peer socket per I/O cycle\n"
"Number of packets\n")
{
int idx_number = 2;
return bgp_wpkt_quanta_config_vty(vty, argv[idx_number]->arg, 0);
}
DEFUN (bgp_rpkt_quanta,
DEFPY (bgp_rpkt_quanta,
bgp_rpkt_quanta_cmd,
"read-quanta (1-10)",
"How many packets to read from peer socket per I/O cycle\n"
"Number of packets\n")
{
int idx_number = 1;
return bgp_rpkt_quanta_config_vty(vty, argv[idx_number]->arg, 1);
}
DEFUN (no_bgp_rpkt_quanta,
no_bgp_rpkt_quanta_cmd,
"no read-quanta (1-10)",
"[no] read-quanta (1-10)$quanta",
NO_STR
"How many packets to read from peer socket per I/O cycle\n"
"Number of packets\n")
{
int idx_number = 2;
return bgp_rpkt_quanta_config_vty(vty, argv[idx_number]->arg, 0);
return bgp_rpkt_quanta_config_vty(vty, quanta, !no);
}
void bgp_config_write_coalesce_time(struct vty *vty, struct bgp *bgp)
@ -13072,9 +13045,7 @@ void bgp_vty_init(void)
install_element(BGP_NODE, &bgp_update_delay_establish_wait_cmd);
install_element(BGP_NODE, &bgp_wpkt_quanta_cmd);
install_element(BGP_NODE, &no_bgp_wpkt_quanta_cmd);
install_element(BGP_NODE, &bgp_rpkt_quanta_cmd);
install_element(BGP_NODE, &no_bgp_rpkt_quanta_cmd);
install_element(BGP_NODE, &bgp_coalesce_time_cmd);
install_element(BGP_NODE, &no_bgp_coalesce_time_cmd);