diff mbox series

[v3,bpf-next,05/11] bpf: add generic_batch_ops to lpm_trie map

Message ID 20191211223344.165549-6-brianvv@google.com
State Changes Requested
Delegated to: BPF Maintainers
Headers show
Series add bpf batch ops to process more than 1 elem | expand

Commit Message

Brian Vazquez Dec. 11, 2019, 10:33 p.m. UTC
This adds the generic batch ops functionality to bpf lpm_trie.

Signed-off-by: Brian Vazquez <brianvv@google.com>
---
 kernel/bpf/lpm_trie.c | 4 ++++
 1 file changed, 4 insertions(+)

Comments

Yonghong Song Dec. 13, 2019, 5:46 p.m. UTC | #1
On 12/11/19 2:33 PM, Brian Vazquez wrote:
> This adds the generic batch ops functionality to bpf lpm_trie.
> 
> Signed-off-by: Brian Vazquez <brianvv@google.com>
> ---
>   kernel/bpf/lpm_trie.c | 4 ++++
>   1 file changed, 4 insertions(+)
> 
> diff --git a/kernel/bpf/lpm_trie.c b/kernel/bpf/lpm_trie.c
> index 56e6c75d354d9..92c47b4f03337 100644
> --- a/kernel/bpf/lpm_trie.c
> +++ b/kernel/bpf/lpm_trie.c
> @@ -743,4 +743,8 @@ const struct bpf_map_ops trie_map_ops = {
>   	.map_update_elem = trie_update_elem,
>   	.map_delete_elem = trie_delete_elem,
>   	.map_check_btf = trie_check_btf,
> +	.map_lookup_batch = generic_map_lookup_batch,
> +	.map_lookup_and_delete_batch = generic_map_lookup_and_delete_batch,

Not 100% sure whether trie should use generic map
lookup/lookup_and_delete or not. If the key is not available,
the get_next_key will return the 'leftmost' node which roughly
corresponding to the first node in the hash table.

> +	.map_delete_batch = generic_map_delete_batch,
> +	.map_update_batch = generic_map_update_batch,
>   };
>
Brian Vazquez Jan. 7, 2020, 6:39 a.m. UTC | #2
Hi Yonghong, thanks for reviewing it and sorry for the late reply I
had been traveling.

On Fri, Dec 13, 2019 at 11:46 AM Yonghong Song <yhs@fb.com> wrote:
>
>
>
> On 12/11/19 2:33 PM, Brian Vazquez wrote:
> > This adds the generic batch ops functionality to bpf lpm_trie.
> >
> > Signed-off-by: Brian Vazquez <brianvv@google.com>
> > ---
> >   kernel/bpf/lpm_trie.c | 4 ++++
> >   1 file changed, 4 insertions(+)
> >
> > diff --git a/kernel/bpf/lpm_trie.c b/kernel/bpf/lpm_trie.c
> > index 56e6c75d354d9..92c47b4f03337 100644
> > --- a/kernel/bpf/lpm_trie.c
> > +++ b/kernel/bpf/lpm_trie.c
> > @@ -743,4 +743,8 @@ const struct bpf_map_ops trie_map_ops = {
> >       .map_update_elem = trie_update_elem,
> >       .map_delete_elem = trie_delete_elem,
> >       .map_check_btf = trie_check_btf,
> > +     .map_lookup_batch = generic_map_lookup_batch,
> > +     .map_lookup_and_delete_batch = generic_map_lookup_and_delete_batch,
>
> Not 100% sure whether trie should use generic map
> lookup/lookup_and_delete or not. If the key is not available,
> the get_next_key will return the 'leftmost' node which roughly
> corresponding to the first node in the hash table.
>

I think you're right, we shouldn't use generic
lookup/lookup_and_delete for lpm_trie. That being said, would you be
ok, if we don't add lpm_trie support in this patch series? Also we can
drop the generic_map_lookup_and_delete implementation in this patch
series and add it in the future, if needed. What do you think?

> > +     .map_delete_batch = generic_map_delete_batch,
> > +     .map_update_batch = generic_map_update_batch,with efault
> >   };
> >
Yonghong Song Jan. 7, 2020, 5:57 p.m. UTC | #3
On 1/6/20 10:39 PM, Brian Vazquez wrote:
> Hi Yonghong, thanks for reviewing it and sorry for the late reply I
> had been traveling.
> 
> On Fri, Dec 13, 2019 at 11:46 AM Yonghong Song <yhs@fb.com> wrote:
>>
>>
>>
>> On 12/11/19 2:33 PM, Brian Vazquez wrote:
>>> This adds the generic batch ops functionality to bpf lpm_trie.
>>>
>>> Signed-off-by: Brian Vazquez <brianvv@google.com>
>>> ---
>>>    kernel/bpf/lpm_trie.c | 4 ++++
>>>    1 file changed, 4 insertions(+)
>>>
>>> diff --git a/kernel/bpf/lpm_trie.c b/kernel/bpf/lpm_trie.c
>>> index 56e6c75d354d9..92c47b4f03337 100644
>>> --- a/kernel/bpf/lpm_trie.c
>>> +++ b/kernel/bpf/lpm_trie.c
>>> @@ -743,4 +743,8 @@ const struct bpf_map_ops trie_map_ops = {
>>>        .map_update_elem = trie_update_elem,
>>>        .map_delete_elem = trie_delete_elem,
>>>        .map_check_btf = trie_check_btf,
>>> +     .map_lookup_batch = generic_map_lookup_batch,
>>> +     .map_lookup_and_delete_batch = generic_map_lookup_and_delete_batch,
>>
>> Not 100% sure whether trie should use generic map
>> lookup/lookup_and_delete or not. If the key is not available,
>> the get_next_key will return the 'leftmost' node which roughly
>> corresponding to the first node in the hash table.
>>
> 
> I think you're right, we shouldn't use generic
> lookup/lookup_and_delete for lpm_trie. That being said, would you be
> ok, if we don't add lpm_trie support in this patch series? Also we can
> drop the generic_map_lookup_and_delete implementation in this patch
> series and add it in the future, if needed. What do you think?

Yes, we can drop generic_map_lookup_and_delete(), it probably will not
be used a lot. The normal array map, you cannot delete elements.
For fd_array maps, they tend to be small.

> 
>>> +     .map_delete_batch = generic_map_delete_batch,
>>> +     .map_update_batch = generic_map_update_batch,with efault
>>>    };
>>>
diff mbox series

Patch

diff --git a/kernel/bpf/lpm_trie.c b/kernel/bpf/lpm_trie.c
index 56e6c75d354d9..92c47b4f03337 100644
--- a/kernel/bpf/lpm_trie.c
+++ b/kernel/bpf/lpm_trie.c
@@ -743,4 +743,8 @@  const struct bpf_map_ops trie_map_ops = {
 	.map_update_elem = trie_update_elem,
 	.map_delete_elem = trie_delete_elem,
 	.map_check_btf = trie_check_btf,
+	.map_lookup_batch = generic_map_lookup_batch,
+	.map_lookup_and_delete_batch = generic_map_lookup_and_delete_batch,
+	.map_delete_batch = generic_map_delete_batch,
+	.map_update_batch = generic_map_update_batch,
 };