So, let me put it this way, and no that's not what John was trying to infer. *Any* time you cross over from user space to kernel space, and back. There is *always* a performance hit. Which technically is not 100% accurate, but is accurate for anything that matters . . .
On Thu, Mar 3, 2016 at 12:32 AM, Micka <mickamus...@gmail.com> wrote: > ?? John said that UIO drivers work in ms not in us range .....Looks like > that both of you agree on that ! > > Le jeu. 3 mars 2016 à 08:28, William Hermans <yyrk...@gmail.com> a écrit : > >> *Wrong again, UIO attempts to handle interrupts as events, but the >>> concept is slow (typically ms, not us)* >>> >> >> You're full of it if you're trying to purport that any interrupt in Linux >> works in the uS range. >> >> On Thu, Mar 3, 2016 at 12:26 AM, John Syne <john3...@gmail.com> wrote: >> >>> Wrong again, UIO attempts to handle interrupts as events, but the >>> concept is slow (typically ms, not us) >>> >>> Regards, >>> John >>> >>> >>> >>> >>> On Mar 2, 2016, at 11:22 PM, William Hermans <yyrk...@gmail.com> wrote: >>> >>> *mmap isn't faster than a kernel driver (kernel code has priority over >>>> user space code) and you still cannot handle interrupts from user space. >>>> Anyway, you won’t find any drivers in the kernel implemented your way >>>> (/dev/mem, mmap). However, mmap is used in drivers to eliminate mem to mem >>>> copy when transferring data between user space and kernel space. * >>>> *Regards,* >>>> >>> *John* >>> >>> Now. not only are you wrong, but you're making stuff up. You can handle >>> interrupts from userspace, as much as iio can. But it's not my job to tell >>> you how. I will mention that perhaps you should look into "userspace >>> drivers". As far as whats faster ? who f***ing cares. mmap() is a lot >>> faster than the ADCs . . . and still not the point. >>> >>> The point is, if you need fast ADC you should be using the PRU, and then >>> you may want to seriously consider using an external module. That is, for >>> anything serious. It does not matter how much CPU mmap() or iio uses. As >>> any % can preempt other code that needs to run *now* thus creating >>> potential non determinism. >>> >>> >>> On Thu, Mar 3, 2016 at 12:12 AM, John Syne <john3...@gmail.com> wrote: >>> >>>> mmap isn't faster than a kernel driver (kernel code has priority over >>>> user space code) and you still cannot handle interrupts from user space. >>>> Anyway, you won’t find any drivers in the kernel implemented your way >>>> (/dev/mem, mmap). However, mmap is used in drivers to eliminate mem to mem >>>> copy when transferring data between user space and kernel space. >>>> >>>> Regards, >>>> John >>>> >>>> >>>> >>>> >>>> On Mar 2, 2016, at 11:04 PM, William Hermans <yyrk...@gmail.com> wrote: >>>> >>>> *From what I remember, the solution you proposed was using 90% of the >>>>> CPU. * >>>>> >>>> >>>> 93% CPU load when using one shot mode, and continuously opening / >>>> closing a file descriptor to the ADC module. There is no such load when >>>> using mmap(), as mmap() is light years faster. >>>> >>>> >>>> On Wed, Mar 2, 2016 at 11:52 PM, John Syne <john3...@gmail.com> wrote: >>>> >>>>> When the ADC is in continuous mode, you shouldn't read the data until >>>>> it has been updated. Simply reading the data over and over again to get >>>>> the >>>>> same value that hasn’t been updated is just dumb. The interrupt tells you >>>>> when the conversion has been updated and then you read it. The point I was >>>>> making originally was that there was no need to use PRU to sample the ADC >>>>> at full speed. You can do the same from the IIO driver. Running at full >>>>> speed consumes less than 10% of the CPU. If the IIO driver was updated to >>>>> use DMA, then there would be no CPU utilization. From what I remember, the >>>>> solution you proposed was using 90% of the CPU. >>>>> >>>>> Regards, >>>>> John >>>>> >>>>> >>>>> >>>>> >>>>> On Mar 2, 2016, at 10:12 PM, William Hermans <yyrk...@gmail.com> >>>>> wrote: >>>>> >>>>> *First, that isn’t going to work because the ADC uses a scan loop and >>>>>> unless you can respond to interrupts, you cannot determine when the ADC >>>>>> conversion has completed. There is a much simpler way to do this. Simply >>>>>> use the IIO driver and then* >>>>>> >>>>> >>>>> FIrst of all, it *will* work. I've done it, and it works. Second of >>>>> all, in continuous mode, values are put out as 32bit values. Only the >>>>> first >>>>> 12bits is the actual ADC value. The next 4 bits is the channel ID( 0 - 7 >>>>> ), >>>>> and the last 16bits reserved / unused. Thirdly, using interrupts in fast >>>>> moving code is about as bad of an idea as using try / catch blocks in fast >>>>> moving code. It adds code latency, and also introduces non deterministic >>>>> behavior. This is why iio does not work fast for short data sets. >>>>> >>>>> >>>>> *dd if=/dev/iio:device0 of=~/test* >>>>>> >>>>> >>>>> Maybe, but it's a terrible idea if the target is flash media. The >>>>> ADC's can, and will use up a lot of storage space, very quickly. Just >>>>> using >>>>> 7 channel in one shot mode, one channel after the next. In a loop of 300k >>>>> iterations. I was using up ~3MB/s disk space. Maxed out, and all channel >>>>> used. The ADC's should use up ~9MB/s or more. >>>>> >>>>> >>>>> On Wed, Mar 2, 2016 at 4:06 PM, John Syne <john3...@gmail.com> wrote: >>>>> >>>>>> First, that isn’t going to work because the ADC uses a scan loop and >>>>>> unless you can respond to interrupts, you cannot determine when the ADC >>>>>> conversion has completed. There is a much simpler way to do this. Simply >>>>>> use the IIO driver and then read /dev/iio:device0 >>>>>> >>>>>> For example, do: >>>>>> >>>>>> dd if=/dev/iio:device0 of=~/test >>>>>> >>>>>> Enable the iio buffer and your file will receive samples at the >>>>>> configured speed. >>>>>> >>>>>> Regards, >>>>>> John >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> On Mar 2, 2016, at 2:27 PM, William Hermans <yyrk...@gmail.com> >>>>>> wrote: >>>>>> >>>>>> errr oops, I sent too soon. mmap() is fast, and can actually read >>>>>> from the ADC faster than the ADC can update values. But, it's using the >>>>>> main processor to do so, and if you need to do more than just read the >>>>>> ADC. >>>>>> Additional processes would have to compete for processor time. So, if one >>>>>> does want / need to read at maximum speed, it might be wise to offload >>>>>> the >>>>>> main processor, by using a PRU. >>>>>> >>>>>> It would not matter if this were done in userspace, or kernel space. >>>>>> It'll definitely put a load strain on the ARM processor. >>>>>> >>>>>> On Wed, Mar 2, 2016 at 3:19 PM, William Hermans <yyrk...@gmail.com> >>>>>> wrote: >>>>>> >>>>>>> *You realize that you can read the ADC from Linux at full speed >>>>>>>> also? No need to use the PRU. * >>>>>>>> *Regards,* >>>>>>>> >>>>>>> *John* >>>>>>> >>>>>>> I do, because I've proven just that :) *mmap()* is dahmed fast . . . >>>>>>> >>>>>>> >>>>>>> On Wed, Mar 2, 2016 at 2:32 PM, John Syne <john3...@gmail.com> >>>>>>> wrote: >>>>>>> >>>>>>>> You realize that you can read the ADC from Linux at full speed >>>>>>>> also? No need to use the PRU. >>>>>>>> >>>>>>>> Regards, >>>>>>>> John >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> On Mar 2, 2016, at 12:43 PM, TJF <jeli.freih...@gmail.com> wrote: >>>>>>>> >>>>>>>> Hello PatM001! >>>>>>>> >>>>>>>> There's libpruio <http://beagleboard.org/project/libpruio/>, which >>>>>>>> provides ADC sampling at full speed (200 kHz). You'll get rid of the >>>>>>>> exeptions (and the miss readings of the sysfs driver in case of >>>>>>>> sampling >>>>>>>> multiple channels). >>>>>>>> >>>>>>>> The downside: no C# binding yet. It's written in FreeBASIC/PASM and >>>>>>>> gets shipped with a C header. You may try SWIG >>>>>>>> <http://www.swig.org/> on the C header in order to generate a >>>>>>>> binding for your prefered language. >>>>>>>> >>>>>>>> If you try, please share your results, or at least report. >>>>>>>> >>>>>>>> BR >>>>>>>> >>>>>>>> -- >>>>>>>> For more options, visit http://beagleboard.org/discuss >>>>>>>> --- >>>>>>>> You received this message because you are subscribed to the Google >>>>>>>> Groups "BeagleBoard" group. >>>>>>>> To unsubscribe from this group and stop receiving emails from it, >>>>>>>> send an email to beagleboard+unsubscr...@googlegroups.com. >>>>>>>> For more options, visit https://groups.google.com/d/optout. >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> -- >>>>>>>> For more options, visit http://beagleboard.org/discuss >>>>>>>> --- >>>>>>>> You received this message because you are subscribed to the Google >>>>>>>> Groups "BeagleBoard" group. >>>>>>>> To unsubscribe from this group and stop receiving emails from it, >>>>>>>> send an email to beagleboard+unsubscr...@googlegroups.com. >>>>>>>> For more options, visit https://groups.google.com/d/optout. >>>>>>>> >>>>>>> >>>>>>> >>>>>> >>>>>> -- >>>>>> For more options, visit http://beagleboard.org/discuss >>>>>> --- >>>>>> You received this message because you are subscribed to the Google >>>>>> Groups "BeagleBoard" group. >>>>>> To unsubscribe from this group and stop receiving emails from it, >>>>>> send an email to beagleboard+unsubscr...@googlegroups.com. >>>>>> For more options, visit https://groups.google.com/d/optout. >>>>>> >>>>>> >>>>>> >>>>>> -- >>>>>> For more options, visit http://beagleboard.org/discuss >>>>>> --- >>>>>> You received this message because you are subscribed to the Google >>>>>> Groups "BeagleBoard" group. >>>>>> To unsubscribe from this group and stop receiving emails from it, >>>>>> send an email to beagleboard+unsubscr...@googlegroups.com. >>>>>> For more options, visit https://groups.google.com/d/optout. >>>>>> >>>>> >>>>> >>>>> -- >>>>> For more options, visit http://beagleboard.org/discuss >>>>> --- >>>>> You received this message because you are subscribed to the Google >>>>> Groups "BeagleBoard" group. >>>>> To unsubscribe from this group and stop receiving emails from it, send >>>>> an email to beagleboard+unsubscr...@googlegroups.com. >>>>> For more options, visit https://groups.google.com/d/optout. >>>>> >>>>> >>>>> >>>>> -- >>>>> For more options, visit http://beagleboard.org/discuss >>>>> --- >>>>> You received this message because you are subscribed to the Google >>>>> Groups "BeagleBoard" group. >>>>> To unsubscribe from this group and stop receiving emails from it, send >>>>> an email to beagleboard+unsubscr...@googlegroups.com. >>>>> For more options, visit https://groups.google.com/d/optout. >>>>> >>>> >>>> >>>> -- >>>> For more options, visit http://beagleboard.org/discuss >>>> --- >>>> You received this message because you are subscribed to the Google >>>> Groups "BeagleBoard" group. >>>> To unsubscribe from this group and stop receiving emails from it, send >>>> an email to beagleboard+unsubscr...@googlegroups.com. >>>> For more options, visit https://groups.google.com/d/optout. >>>> >>>> >>>> >>>> -- >>>> For more options, visit http://beagleboard.org/discuss >>>> --- >>>> You received this message because you are subscribed to the Google >>>> Groups "BeagleBoard" group. >>>> To unsubscribe from this group and stop receiving emails from it, send >>>> an email to beagleboard+unsubscr...@googlegroups.com. >>>> For more options, visit https://groups.google.com/d/optout. >>>> >>> >>> >>> -- >>> For more options, visit http://beagleboard.org/discuss >>> --- >>> You received this message because you are subscribed to the Google >>> Groups "BeagleBoard" group. >>> To unsubscribe from this group and stop receiving emails from it, send >>> an email to beagleboard+unsubscr...@googlegroups.com. >>> For more options, visit https://groups.google.com/d/optout. >>> >>> >>> -- >>> For more options, visit http://beagleboard.org/discuss >>> --- >>> You received this message because you are subscribed to the Google >>> Groups "BeagleBoard" group. >>> To unsubscribe from this group and stop receiving emails from it, send >>> an email to beagleboard+unsubscr...@googlegroups.com. >>> For more options, visit https://groups.google.com/d/optout. >>> >> >> -- >> For more options, visit http://beagleboard.org/discuss >> --- >> You received this message because you are subscribed to the Google Groups >> "BeagleBoard" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to beagleboard+unsubscr...@googlegroups.com. >> For more options, visit https://groups.google.com/d/optout. >> > -- > For more options, visit http://beagleboard.org/discuss > --- > You received this message because you are subscribed to the Google Groups > "BeagleBoard" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to beagleboard+unsubscr...@googlegroups.com. > For more options, visit https://groups.google.com/d/optout. > -- For more options, visit http://beagleboard.org/discuss --- You received this message because you are subscribed to the Google Groups "BeagleBoard" group. To unsubscribe from this group and stop receiving emails from it, send an email to beagleboard+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.