Re: kernelTimeSlice clarification
- From: forums_mp@xxxxxxxxxxx
- Date: 13 May 2007 16:34:48 -0700
Jeffrey Creem wrote:
Sorry, I realize now that my response in the morning was not clear as I
left out an important detail. What I was trying to get to was determine
if buffers were being filled by a task that was doing the filling by
polling on the availability of some data (v.s. waiting for an
interrupt). I am starting to get some idea of what you are doing but not
quite there yet.
When you talk about interrupts above, it certainly leaves me wondering
if you really mean interrupts in a true hardware sense or if you are
mixing terms.
My initial question about this (and I don't know that I am any closer to
understanding the answer) was really focused on the way the thread
started -- asking about kerneltimeslice.
If you really have two sources of data, and these two sources of data
are interrupt driven and the destination output spooling is interrupt
driven, and the buffers are sized correctly, there is no reason to
believe that doing any sort of timeslicing could do anything but hurt
the situation.
So, lets step back for a moment and ask some more simple questions
before we dig into the tasking/interrupt structure questions.
1) I believe you said that the destination can write 400 Mbytes/Sec.
Have you demonstrated that or is it based on specs and expectations?
2) If demonstrated, how was the testing done. Was it done in a manner
where (potentially) all available CPU and perhaps memory bandwidth was
allowed to be used by the destination processing? -- If so, then there
is none available for the 'source' processing.
3) 400 Mbytes per second is a very fast rate even by todays standards if
you are talking about files. All sorts of things can conspire to prevent
you from meeting that sort of a rate. It only takes a few drivers doing
copies on things at various levels before suddenly the massive speed of
even you DRAM starts to fail to keep up.
Before looking into the complexity of scheduling, semaphores and the
like, try doing something like having just one source attempt to send
the same data twice per arrival. If you can't make that work at
400Mbytes/sec, your problems are not related to your
tasking/semaphores/context switching, etc.
The vendor has an api suite one of which requires a user callback
function. In a nutshell the destination allocates a buffer. The size
of the buffer along with buffer address and a callback function is
passed to the vendor api's. The source once initialized gets a
"handle" to the buffer. The souce dma's data to the destination, then
notifies the destination. This notification is in the form of a pci
interrupt. Translation when notified the callback function gets
invoked. Within the callback function semaphores are given to the
appropriate task. As for the data rates. Yes benchmarks were done
using a single source. The benchmarks confirmed vendor numbers. Alas
our conversation reminded me of one thing. For a single souce pci
works fine. For multiple sources pci can no longer be used since this
results in collision. Since the vendor api does support two forms of
interrupts I'll retrofit source code to use a different vendor api.
This should assist in my understanding of some issues I encountered
when I decided to use multiple sources. I'll keep you posted.
.
- References:
- kernelTimeSlice clarification
- From: forums_mp
- Re: kernelTimeSlice clarification
- From: Jeffrey Creem
- Re: kernelTimeSlice clarification
- From: forums_mp
- Re: kernelTimeSlice clarification
- From: Jeffrey Creem
- kernelTimeSlice clarification
- Prev by Date: Re: How to use C++ in vxworks ??
- Next by Date: tDebugTask stack overflow - change the default stack size
- Previous by thread: Re: kernelTimeSlice clarification
- Next by thread: [help!] How to use C++ in vxworks ??
- Index(es):
Relevant Pages
|