Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
61 changes: 37 additions & 24 deletions include/bpftune/libbpftune.h
Original file line number Diff line number Diff line change
Expand Up @@ -135,13 +135,14 @@ void bpftuner_tunables_fini(struct bpftuner *tuner);

/* need a macro in order to generate code for skeleton-specific struct */

#define bpftuner_bpf_open(tuner_name, tuner) \
#define bpftuner_bpf_open(tuner_name, tuner) ({ \
int __err = 0; \
do { \
struct tuner_name##_tuner_bpf *__skel; \
struct tuner_name##_tuner_bpf_legacy *__lskel; \
int __err = bpftune_cap_add(); \
\
if (__err) return __err; \
\
__err = bpftune_cap_add(); \
if (__err) break; \
tuner->name = #tuner_name; \
tuner->bpf_legacy = bpftuner_bpf_legacy(); \
if (!tuner->bpf_legacy) { \
Expand All @@ -168,61 +169,73 @@ void bpftuner_tunables_fini(struct bpftuner *tuner);
if (__err) { \
bpftune_log_bpf_err(__err, \
#tuner_name " open bpf: %s\n"); \
return __err; \
break; \
} \
} while (0)
} while (0); \
__err; \
})

#define bpftuner_bpf_destroy(tuner_name, tuner) \
do { \
if (!tuner->bpf_legacy) \
tuner_name##_tuner_bpf__destroy(tuner->skel); \
else \
tuner_name##_tuner_bpf_legacy__destroy(tuner->skel); \
tuner->skel = NULL; \
} while (0)

#define _bpftuner_bpf_load(tuner_name, tuner, optionals) \
#define _bpftuner_bpf_load(tuner_name, tuner, optionals) ({ \
int __err = 0; \
do { \
struct tuner_name##_tuner_bpf *__skel = tuner->skel; \
struct tuner_name##_tuner_bpf_legacy *__lskel = tuner->skel; \
int __err; \
\
__err = __bpftuner_bpf_load(tuner, optionals); \
if (__err) { \
bpftuner_bpf_destroy(tuner_name, tuner); \
return __err; \
break; \
} \
if (!tuner->bpf_legacy) \
__skel->bss->tuner_id = bpftune_tuner_num(); \
else \
__lskel->bss->tuner_id = bpftune_tuner_num(); \
} while (0)
} while (0); \
__err; \
})

#define bpftuner_bpf_load(tuner_name, tuner) \
_bpftuner_bpf_load(tuner_name, tuner, NULL)

#define bpftuner_bpf_attach(tuner_name, tuner, optionals) \
#define bpftuner_bpf_attach(tuner_name, tuner, optionals) ({ \
int __err = 0; \
do { \
int __err; \
\
__err = __bpftuner_bpf_attach(tuner); \
if (__err && optionals != NULL) { \
bpftuner_bpf_fini(tuner); \
bpftuner_bpf_open(tuner_name, tuner); \
_bpftuner_bpf_load(tuner_name, tuner, optionals); \
__err = bpftuner_bpf_open(tuner_name, tuner); \
if (!__err) \
__err = _bpftuner_bpf_load(tuner_name, tuner, \
optionals); \
if (!__err) \
__err = __bpftuner_bpf_attach(tuner); \
} \
if (__err) { \
if (__err) \
bpftuner_bpf_destroy(tuner_name, tuner); \
return __err; \
} \
} while (0)
} while (0); \
__err; \
})

#define bpftuner_bpf_init(tuner_name, tuner, optionals) \
#define bpftuner_bpf_init(tuner_name, tuner, optionals) ({ \
int __err = 0; \
do { \
bpftuner_bpf_open(tuner_name, tuner); \
bpftuner_bpf_load(tuner_name, tuner); \
bpftuner_bpf_attach(tuner_name, tuner, optionals); \
} while (0)
__err = bpftuner_bpf_open(tuner_name, tuner); \
if (!__err) \
__err = bpftuner_bpf_load(tuner_name, tuner); \
if (!__err) \
__err = bpftuner_bpf_attach(tuner_name, tuner, optionals); \
} while (0); \
__err; \
})


#define bpftuner_bpf_var_set(tuner_name, tuner, var, val) \
Expand Down
3 changes: 1 addition & 2 deletions sample_tuner/sample_tuner.c
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,7 @@

int init(struct bpftuner *tuner)
{
bpftuner_bpf_init(sample, tuner, NULL);
return 0;
return bpftuner_bpf_init(sample, tuner, NULL);
}

void fini(struct bpftuner *tuner)
Expand Down
5 changes: 4 additions & 1 deletion src/neigh_table_tuner.c
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,10 @@ static struct bpftunable_scenario scenarios[] = {

int init(struct bpftuner *tuner)
{
bpftuner_bpf_init(neigh_table, tuner, NULL);
int err = bpftuner_bpf_init(neigh_table, tuner, NULL);

if (err)
return err;
return bpftuner_tunables_init(tuner, ARRAY_SIZE(descs), descs,
ARRAY_SIZE(scenarios), scenarios);
}
Expand Down
13 changes: 10 additions & 3 deletions src/net_buffer_tuner.c
Original file line number Diff line number Diff line change
Expand Up @@ -28,14 +28,21 @@ static struct bpftunable_scenario scenarios[] = {
int init(struct bpftuner *tuner)
{
long cpu_bitmap = 0;
int err;

bpftune_sysctl_read(0, "net.core.flow_limit_cpu_bitmap", &cpu_bitmap);

bpftuner_bpf_open(net_buffer, tuner);
bpftuner_bpf_load(net_buffer, tuner);
err = bpftuner_bpf_open(net_buffer, tuner);
if (err)
return err;
err = bpftuner_bpf_load(net_buffer, tuner);
if (err)
return err;
bpftuner_bpf_var_set(net_buffer, tuner, flow_limit_cpu_bitmap,
cpu_bitmap);
bpftuner_bpf_attach(net_buffer, tuner, NULL);
err = bpftuner_bpf_attach(net_buffer, tuner, NULL);
if (err)
return err;

return bpftuner_tunables_init(tuner, NET_BUFFER_NUM_TUNABLES, descs,
ARRAY_SIZE(scenarios), scenarios);
Expand Down
13 changes: 10 additions & 3 deletions src/netns_tuner.c
Original file line number Diff line number Diff line change
Expand Up @@ -39,13 +39,20 @@ static struct bpftunable_scenario scenarios[] = {
int init(struct bpftuner *tuner)
{
const char *optionals[] = { "entry__net_free", NULL };
int err;

if (!bpftune_netns_cookie_supported())
return -ENOTSUP;

bpftuner_bpf_open(netns, tuner);
bpftuner_bpf_load(netns, tuner);
bpftuner_bpf_attach(netns, tuner, optionals);
err = bpftuner_bpf_open(netns, tuner);
if (err)
return err;
err = bpftuner_bpf_load(netns, tuner);
if (err)
return err;
err = bpftuner_bpf_attach(netns, tuner, optionals);
if (err)
return err;

return bpftuner_tunables_init(tuner, ARRAY_SIZE(descs), descs,
ARRAY_SIZE(scenarios), scenarios);
Expand Down
7 changes: 4 additions & 3 deletions src/route_table_tuner.c
Original file line number Diff line number Diff line change
Expand Up @@ -37,9 +37,10 @@ static struct bpftunable_scenario scenarios[] = {

int init(struct bpftuner *tuner)
{
bpftuner_bpf_open(route_table, tuner);
bpftuner_bpf_load(route_table, tuner);
bpftuner_bpf_attach(route_table, tuner, NULL);
int err = bpftuner_bpf_init(route_table, tuner, NULL);

if (err)
return err;
return bpftuner_tunables_init(tuner, ARRAY_SIZE(descs), descs,
ARRAY_SIZE(scenarios), scenarios);
}
Expand Down
4 changes: 3 additions & 1 deletion src/sysctl_tuner.c
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,10 @@ extern unsigned short learning_rate;

int init(struct bpftuner *tuner)
{
bpftuner_bpf_init(sysctl, tuner, NULL);
int err = bpftuner_bpf_init(sysctl, tuner, NULL);

if (err)
return err;
/* attach to root cgroup */
if (bpftuner_cgroup_attach(tuner, "sysctl_write", BPF_CGROUP_SYSCTL))
return 1;
Expand Down
13 changes: 10 additions & 3 deletions src/tcp_buffer_tuner.c
Original file line number Diff line number Diff line change
Expand Up @@ -139,9 +139,14 @@ long nr_free_buffer_pages(bool initial)
int init(struct bpftuner *tuner)
{
int pagesize;
int err;

bpftuner_bpf_open(tcp_buffer, tuner);
bpftuner_bpf_load(tcp_buffer, tuner);
err = bpftuner_bpf_open(tcp_buffer, tuner);
if (err)
return err;
err = bpftuner_bpf_load(tcp_buffer, tuner);
if (err)
return err;

pagesize = sysconf(_SC_PAGESIZE);
if (pagesize < 0)
Expand All @@ -154,7 +159,9 @@ int init(struct bpftuner *tuner)
ilog2(SK_MEM_QUANTUM));
bpftuner_bpf_var_set(tcp_buffer, tuner, nr_free_buffer_pages,
nr_free_buffer_pages(true));
bpftuner_bpf_attach(tcp_buffer, tuner, NULL);
err = bpftuner_bpf_attach(tcp_buffer, tuner, NULL);
if (err)
return err;
return bpftuner_tunables_init(tuner, TCP_BUFFER_NUM_TUNABLES, descs,
ARRAY_SIZE(scenarios), scenarios);
}
Expand Down
4 changes: 3 additions & 1 deletion src/tcp_cong_tuner.c
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,9 @@ int init(struct bpftuner *tuner)
bpftune_log(LOG_DEBUG, "could not load tcp_bbr module: %s\n",
strerror(-err));

bpftuner_bpf_init(tcp_cong, tuner, NULL);
err = bpftuner_bpf_init(tcp_cong, tuner, NULL);
if (err)
return err;

err = bpftune_cap_add();
if (err) {
Expand Down