Re: [PATCH v9 bpf-next 02/14] xdp: introduce flags field in xdp_buff/xdp_frame
flat view
From: Alexander Duyck <hidden>
Date: 2021-07-05 21:36:12
Also in:
bpf
On Mon, Jul 5, 2021 at 8:52 AM Lorenzo Bianconi [off-list ref] wrote:
quoted
On Tue, Jun 29, 2021 at 5:43 AM Lorenzo Bianconi [off-list ref] wrote:quoted
quoted
On Mon, Jun 14, 2021 at 5:50 AM Lorenzo Bianconi [off-list ref] wrote:quoted
Introduce flags field in xdp_frame/xdp_buffer data structure to define additional buffer features. At the moment the only supported buffer feature is multi-buffer bit (mb). Multi-buffer bit is used to specify if this is a linear buffer (mb = 0) or a multi-buffer frame (mb = 1). In the latter case the shared_info area at the end of the first buffer will be properly initialized to link together subsequent buffers. Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>Instead of passing this between buffers and frames I wonder if this wouldn't be better to place in something like the xdp_mem_info structure since this is something that would be specific to how the device is handling memory anyway. You could probably split the type field into a 16b type and a 16b flags field. Then add your bit where 0 is linear/legacy and 1 is scatter-gather/multi-buffer.ack, this should be fine but I put the flag field in xdp_buff/xdp_frame in order to reuse it for some xdp hw-hints (e.g rx checksum type). We can put it in xdp_mem_info too but I guess it would be less intuitive, what do you think?I think it makes the most sense in xdp_mem_info. It already tells us what to expect in some respect in regards to memory layout as it tells us if we are dealing with shared pages or whole pages and how to recycle them. I would think that applies almost identically to scatter-gather XDP the same way.Hi Alex, Reviewing the code to address this comment I think I spotted a corner case where we can't use this approach. Whenever we run dev_map_bpf_prog_run() we loose mb info converting xdp_frame to xdp_buff since xdp_convert_frame_to_buff() does not copy it and we have no xdp_rxq_info there. Do you think we should add a rxq_info there similar to what we did for cpumap? I think it is better to keep the previous approach since it seems cleaner and reusable in the future. What do you think?
Hi Lorenzo, What about doing something like breaking up the type value in xdp_mem_info? The fact is having it as an enum doesn't get us much since we have a 32b type field but are only storing 4 possible values there currently The way I see it, scatter-gather is just another memory model attribute rather than being something entirely new. It makes as much sense to have a bit there for MEM_TYPE_PAGE_SG as it does for MEM_TYPE_PAGE_SHARED. I would consider either splitting the type field into two 16b fields. For example you might have one field that describes the source pool which is currently either allocated page (ORDER0, SHARED), page_pool (PAGE_POOL), or XSK pool (XSK_BUFF_POOL), and then two flags for type with there being either shared and/or scatter-gather. Also, looking over the code I don't see any reason why current ORDER0/SHARED couldn't be merged as the free paths are essentially identical since the MEM_TYPE_PAGE_SHARED path would function perfectly fine to free MEM_TYPE_PAGE_ORDER0 pages. Thanks, - Alex