Is there any possibility that something in the crontab is running at the
same time as your observed "glitches"?
I know that it shouldn't make a difference to RT tasks, but ...
Norm
> -----Original Message-----
> From: [EMAIL PROTECTED] [SMTP:[EMAIL PROTECTED]]
> Sent: Friday, September 08, 2000 10:23 AM
> To: rtlinux mailing list
> Subject: [rtl] Simple thread, massive glitch
>
> I posted this same problem a couple days ago, and would like to thank
> those of you who helped out, but my glitch still exists. Every now and
> again, my system hangs for ~1ms. Running a periodic thread of any period,
> the glitch is always the same duration: 1.1 to 1.3 ms on one machine or
> .5 to .6 ms on another. I think it's safe to say that the glitch is
> prohibiting me from doing hard realtime processing.
>
> The code below is very short and simple. It compiles with the standard
> options available as variables in rtl.mk, and the module depends on
> rtl_sched and rtl_time. All you have to do is compile, insert, wait(for me
> 30 seconds is enough), and dmesg.
>
> Typical dmesg output
>
> > Delay of 192ns near 0ms
> > Delay of 288ns near 95ms
> > Delay of 352ns near 1609ms
> > Delay of 384ns near 1648ms
> > Delay of 448ns near 23322ms
> > Delay of 1141792ns near 937517ms
> > Delay of 1224000ns near 1530446ms
>
> You see the two vastly different scales. The first 5 maximum delays are
> fractions of a microsecond, no problem. The later 2 delays are >100
> periods of the periodic task!
>
> Any advice would be greatly appreciated.
> Thanks in advance - Chuck
>
>
> // Stipped down DAQ code - Chuck
>
> // ***** System headers ***** //
> #include <rtl.h>
> #include <rtl_sync.h>
> #include <time.h>
> #include <pthread.h>
>
> // ***** System Definitions ***** //
> #define FREQUENCY 100000 // Thread frequency [=] Hz
>
> // ***** Function Declarations ***** //
> void *daq_code(void*); // DAQ Periodic function
>
> // ***** Global Variables ***** //
> pthread_t daq_thread; // main rtlinux thread
>
>
> // Simple thread measures clock
> void *daq_code(void *param)
> {
> rtl_irqstate_t irqstate;
>
> hrtime_t zero_time, tick_time, tock_time;
> long delay_time, delay, max_delay=0;
>
> zero_time = clock_gethrtime(CLOCK_REALTIME); // module insert time
>
> while (1) // periodic task, must loop
> {
>
> // Begin DANGER
> rtl_no_interrupts(irqstate); // disable all interrupts
>
> tick_time = clock_gethrtime(CLOCK_REALTIME); //check time
> tock_time = clock_gethrtime(CLOCK_REALTIME); //check time
> delay = (long)(tock_time - tick_time); //find difference
>
> rtl_restore_interrupts(irqstate); // reenable interrupts
> // End DANGER
>
>
> if (delay > max_delay) //is this the biggest delay yet?
> {
> // reset delay max
> max_delay = delay; //record new maximum delay
>
> // reset time of max, >>20 is ~equal to /1e6
> delay_time = (long)((tock_time - zero_time)>>20);
>
> printk( "Delay of %7ldns near %7ldms\n", max_delay, delay_time);
> }
>
> pthread_wait_np( ); //wait for next period
> }
> }
>
>
> // ***** Module Standard Functions ***** ///
>
> int init_module(void)
> {
> pthread_attr_t attr;
> struct sched_param sched_param;
> hrtime_t period, soon;
>
> // initialize pthread attributes
> if( pthread_attr_init(&attr) )
> printk( "Cannot initialize pthread attributes\n" );
>
> // modify pthread priority
> sched_param.sched_priority = 1;
> if ( pthread_attr_setschedparam (&attr, &sched_param) )
> printk( "Cannot set pthread priority: 0\n" );
>
> // initialize the main thread
> if( pthread_create (&daq_thread, &attr, daq_code,(void *)1) )
> printk( "Cannot create pthread\n" );
>
> // make the thread run off the CPU clock
> period = HRTICKS_PER_SEC / FREQUENCY;
> soon = clock_gethrtime(CLOCK_REALTIME) + (100 * period);
> if( pthread_make_periodic_np (daq_thread, soon, period) )
> printk( "Cannot make pthread periodic\n" );
>
> return 0;
> }
>
> void cleanup_module(void)
> {
> // destroy periodic thread
> if( pthread_delete_np(daq_thread) )
> printk( "Cannot destroy phread\n" );
> }
>
>
> -- [rtl] ---
> To unsubscribe:
> echo "unsubscribe rtl" | mail [EMAIL PROTECTED] OR
> echo "unsubscribe rtl <Your_email>" | mail [EMAIL PROTECTED]
> ---
> For more information on Real-Time Linux see:
> http://www.rtlinux.org/rtlinux/
-- [rtl] ---
To unsubscribe:
echo "unsubscribe rtl" | mail [EMAIL PROTECTED] OR
echo "unsubscribe rtl <Your_email>" | mail [EMAIL PROTECTED]
---
For more information on Real-Time Linux see:
http://www.rtlinux.org/rtlinux/