From 38fdfd8b69ba5ae747915bbdbb3066d29611437d Mon Sep 17 00:00:00 2001 From: "Suren A. Chilingaryan" Date: Thu, 6 Aug 2015 18:03:59 +0200 Subject: Disable STREAMING_CHECKS for better performance --- dma/ipe_benchmark.c | 2 +- dma/ipe_private.h | 2 +- docs/ToDo | 16 ++++++---------- 3 files changed, 8 insertions(+), 12 deletions(-) diff --git a/dma/ipe_benchmark.c b/dma/ipe_benchmark.c index f8e0a7e..3ce04d3 100644 --- a/dma/ipe_benchmark.c +++ b/dma/ipe_benchmark.c @@ -166,7 +166,7 @@ double dma_ipe_benchmark(pcilib_dma_context_t *vctx, pcilib_dma_engine_addr_t dm for (bytes = 0; bytes < size; bytes += rbytes) { err = read_dma(ctx->dmactx.pcilib, 0, addr, size - bytes, PCILIB_DMA_FLAG_MULTIPACKET, PCILIB_DMA_TIMEOUT, buf + bytes, &rbytes); if (err) { - pcilib_error("Can't read data from DMA, error %i", err); + pcilib_error("Can't read data from DMA (iteration: %zu, offset: %zu), error %i", iter, bytes, err); return -1; } } diff --git a/dma/ipe_private.h b/dma/ipe_private.h index fdebec0..5054a58 100644 --- a/dma/ipe_private.h +++ b/dma/ipe_private.h @@ -9,7 +9,7 @@ //#define IPEDMA_TLP_SIZE 128 /**< If set, enforces the specified TLP size */ #define IPEDMA_STREAMING_MODE /**< Enables streaming DMA operation mode instead of ring-buffer, the page is written once and forgotten and need to be pushed in queue again */ -#define IPEDMA_STREAMING_CHECKS /**< Enables status checks in streaming mode (it will cause performance penalty) */ +//#define IPEDMA_STREAMING_CHECKS /**< Enables status checks in streaming mode (it will cause _significant_ performance penalty, max ~ 2 GB/s) */ #define IPEDMA_PAGE_SIZE 4096 #define IPEDMA_DMA_PAGES 1024 /**< number of DMA pages in the ring buffer to allocate */ #define IPEDMA_DMA_PROGRESS_THRESHOLD 1 /**< how many pages the DMA engine should fill before reporting progress */ diff --git a/docs/ToDo b/docs/ToDo index 4c2c783..f9f14e6 100644 --- a/docs/ToDo +++ b/docs/ToDo @@ -1,23 +1,19 @@ High Priority (we would need it for IPE Camera) ============= - 1. Serialize access to the registers across applications - 2. Protect kmem_entries in the driver using spinlock - 3. Protect mmap operation (multiple kernel calls) with some locking mechanism - 4. Allow overriding of registers and banks (performance?). + 1. Allow overriding of registers and banks (performance?). Normal Priority (it would make just few things a bit easier) =============== - 1. Implement software registers (stored in kernel-memory) - 2. Implement pcilib_configure_autotrigger - 3. Provide OR and AND operations on registers in cli - 4. Support writting a data from a binary file in cli + 1. Implement pcilib_configure_autotrigger + 2. Provide OR and AND operations on registers in cli + 3. Support writting a data from a binary file in cli Low Priority (only as generalization for other projects) ============ 1. XML configurations describing registers (and DMA engines?) - 2. Access register/bank lookups using hash tables + 2. Access register/bank/lock lookups using hash tables 3. Support for Network Registers and Network DMA 4. Define a syntax for register dependencies / delays (?) 5. Use pthread_condition_t instead of polling 6. Support FIFO reads/writes from/to registers - + 7. We managed kmem performance using next kmem prediction, but it is still wise to provide additionally a binary tree for faster search -- cgit v1.2.3