| NVIDIA DOCA SDK | Data Center on a Chip Framework Documentation |
#include <stdio.h>#include <stdlib.h>#include <stdint.h>#include <doca_mmap.h>#include <doca_buf.h>#include <doca_buf_inventory.h>#include <doca_ctx.h>#include <doca_dma.h>#include <doca_types.h>#include <doca_log.h>#include <doca_pe.h>#include <samples/common.h>#include "pe_common.h"
Go to the source code of this file.
Data Structures | |
| struct | pe_task_resubmit_sample_state |
Macros | |
| #define | EXIT_ON_FAILURE(_expression_) |
| #define | NUM_TASKS (4) |
| #define | NUM_BUFFER_PAIRS (NUM_TASKS * 4) |
| #define | DMA_BUFFER_SIZE (1024) |
| #define | BUFFER_SIZE (DMA_BUFFER_SIZE * 2 * NUM_BUFFER_PAIRS) |
| #define | BUF_INVENTORY_SIZE (NUM_BUFFER_PAIRS * 2) |
Functions | |
| DOCA_LOG_REGISTER (PE_TASK_RESUBMIT::SAMPLE) | |
| void | dma_task_resubmit (struct pe_task_resubmit_sample_state *state, struct doca_dma_task_memcpy *dma_task) |
| static void | dma_memcpy_completed_callback (struct doca_dma_task_memcpy *dma_task, union doca_data task_user_data, union doca_data ctx_user_data) |
| static void | dma_memcpy_error_callback (struct doca_dma_task_memcpy *dma_task, union doca_data task_user_data, union doca_data ctx_user_data) |
| doca_error_t | create_dma (struct pe_task_resubmit_sample_state *state) |
| doca_error_t | allocate_doca_bufs (struct pe_task_resubmit_sample_state *state) |
| doca_error_t | allocate_tasks_for_resubmit (struct pe_task_resubmit_sample_state *state) |
| void | cleanup (struct pe_task_resubmit_sample_state *state) |
| doca_error_t | run (struct pe_task_resubmit_sample_state *state) |
| doca_error_t | run_pe_task_resubmit_sample (void) |
| #define BUF_INVENTORY_SIZE (NUM_BUFFER_PAIRS * 2) |
Definition at line 73 of file pe_task_resubmit_sample.c.
| #define BUFFER_SIZE (DMA_BUFFER_SIZE * 2 * NUM_BUFFER_PAIRS) |
Definition at line 72 of file pe_task_resubmit_sample.c.
| #define DMA_BUFFER_SIZE (1024) |
Definition at line 71 of file pe_task_resubmit_sample.c.
| #define EXIT_ON_FAILURE | ( | _expression_ | ) |
This sample demonstrates how to resubmit a task. Task resubmission may increase performance because it doesn't free and allocate tasks. A reused task may contain the same resources (e.g. for DMA it can contain the same source and destination), contain new resources or contain a mixture of resources. This sample releases the buffers of a completed task and uses a new set of buffers for the resubmitted task but this is only to demonstrate how to do that. The sample uses DOCA_DMA context as an example (DOCA PE can run any library that abides to the PE context API). The sample uses 4 tasks and resubmits them until all source buffers are copied to destination buffers. Diff between this sample and pe_polling sample to see the differences for using task resubmission. This macro is used to minimize code size. The macro runs an expression and returns error if the expression status is not DOCA_SUCCESS
Definition at line 59 of file pe_task_resubmit_sample.c.
| #define NUM_BUFFER_PAIRS (NUM_TASKS * 4) |
Definition at line 70 of file pe_task_resubmit_sample.c.
| #define NUM_TASKS (4) |
Definition at line 69 of file pe_task_resubmit_sample.c.
| doca_error_t allocate_doca_bufs | ( | struct pe_task_resubmit_sample_state * | state | ) |
This method allocate the source and destination buffers
@state [in]: sample state
Definition at line 224 of file pe_task_resubmit_sample.c.
| doca_error_t allocate_tasks_for_resubmit | ( | struct pe_task_resubmit_sample_state * | state | ) |
This method allocate the DMA tasks but does not submit them. This is a sample choice. A task can be submitted immediately after it is allocated.
@state [in]: sample state
Definition at line 261 of file pe_task_resubmit_sample.c.
| void cleanup | ( | struct pe_task_resubmit_sample_state * | state | ) |
This method cleans up the sample resources in reverse order of their creation. This method does not check for destroy return values for simplify. Real code should check the return value and act accordingly (e.g. if doca_ctx_stop failed with DOCA_ERROR_IN_PROGRESS it means that some contexts are still added or even that there are still in flight tasks in the progress engine).
@state [in]: sample state
Definition at line 293 of file pe_task_resubmit_sample.c.
| doca_error_t create_dma | ( | struct pe_task_resubmit_sample_state * | state | ) |
Create DMA
@state [in]: sample state
The ctx user data is received in the task completion callback. Setting the state to the user data binds the program to the callback. See dma_memcpy_completed_callback for usage.
Definition at line 190 of file pe_task_resubmit_sample.c.
|
static |
process_completed_dma_memcpy_task returns doca_error_t to be able to use EXIT_ON_FAILURE, but there is nothing to do with the return value.
Definition at line 138 of file pe_task_resubmit_sample.c.
|
static |
Definition at line 165 of file pe_task_resubmit_sample.c.
| void dma_task_resubmit | ( | struct pe_task_resubmit_sample_state * | state, |
| struct doca_dma_task_memcpy * | dma_task | ||
| ) |
Definition at line 98 of file pe_task_resubmit_sample.c.
| DOCA_LOG_REGISTER | ( | PE_TASK_RESUBMIT::SAMPLE | ) |
| doca_error_t run | ( | struct pe_task_resubmit_sample_state * | state | ) |
Run the sample The method (and the method it calls) does not cleanup anything in case of failures. It assumes that cleanup is called after it at any case.
@state [in]: sample state
Definition at line 314 of file pe_task_resubmit_sample.c.
| doca_error_t run_pe_task_resubmit_sample | ( | void | ) |
Run the PE polling sample
Definition at line 341 of file pe_task_resubmit_sample.c.