summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSuren A. Chilingaryan <csa@suren.me>2015-08-06 18:03:59 +0200
committerSuren A. Chilingaryan <csa@suren.me>2015-08-06 18:03:59 +0200
commit38fdfd8b69ba5ae747915bbdbb3066d29611437d (patch)
treeb56f22c3c80c3d67863160593ce47f89bc8de05d
parent81de1a078b5c54c81b869564d33ed3e025bb695e (diff)
downloadpcitool-38fdfd8b69ba5ae747915bbdbb3066d29611437d.tar.gz
pcitool-38fdfd8b69ba5ae747915bbdbb3066d29611437d.tar.bz2
pcitool-38fdfd8b69ba5ae747915bbdbb3066d29611437d.tar.xz
pcitool-38fdfd8b69ba5ae747915bbdbb3066d29611437d.zip
Disable STREAMING_CHECKS for better performance
-rw-r--r--dma/ipe_benchmark.c2
-rw-r--r--dma/ipe_private.h2
-rw-r--r--docs/ToDo16
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