<meta http-equiv="Content-Type" content="text/html; charset=GB18030"><div><p class="MsoNormal" style="line-height: 23.8px; font-family: "lucida Grande", Verdana, "Microsoft YaHei";"><span lang="EN-US">Dear Etherlab users,<o:p></o:p></span></p><p class="MsoNormal" style="line-height: 23.8px; font-family: "lucida Grande", Verdana, "Microsoft YaHei";"><span lang="EN-US">         I use the lateset igh with unofficial patchset under Linux-3.18.20 and Xenomai-2.6.5. My NIC is Intel i211.My question is, when I run a simple sample, there is no error even if the running time is very long. I just use QtCreator and make the configuration of slave and igh real-time cycling thread to a dynamic library, I find there is a big latency of calling ecrt_master_receive. My testing method is like this:<o:p></o:p></span></p><p class="MsoNormal" style="line-height: 23.8px; font-family: "lucida Grande", Verdana, "Microsoft YaHei";"><span lang="EN-US"> </span></p><p class="MsoNormal" style="line-height: 23.8px; font-family: "lucida Grande", Verdana, "Microsoft YaHei";"><span lang="EN-US">RTIME begin=rt_time_read();<o:p></o:p></span></p><p class="MsoNormal" style="line-height: 23.8px; font-family: "lucida Grande", Verdana, "Microsoft YaHei";"><span lang="EN-US">ecrt_master_receive(master);<o:p></o:p></span></p><p class="MsoNormal" style="line-height: 23.8px; font-family: "lucida Grande", Verdana, "Microsoft YaHei";"><span lang="EN-US">ecrt_domain_process(domain);<o:p></o:p></span></p><p class="MsoNormal" style="line-height: 23.8px; font-family: "lucida Grande", Verdana, "Microsoft YaHei";"><span lang="EN-US">RTIME end=rt_time_read();<o:p></o:p></span></p><p class="MsoNormal" style="line-height: 23.8px; font-family: "lucida Grande", Verdana, "Microsoft YaHei";"><span lang="EN-US"> </span></p><p class="MsoNormal" style="line-height: 23.8px; font-family: "lucida Grande", Verdana, "Microsoft YaHei";"><span lang="EN-US">The latency (end-begin) will reach 1.5ms about 30 minutes after starting the program. Except this error, almost latency is under 10us. At the same time, I execute ¡°cat /proc/xenomai/faults¡± and find there will be page fault. I alse execute ¡°cat /proc/xenomai/stat¡± and find MSW of the real-time thread increases. And there will also be ¡°UNMATCHED Datagram¡± and ¡°Datagram XXX (domain0-0-main) was SKIPPED XX times¡± message log.<o:p></o:p></span></p><p class="MsoNormal" style="line-height: 23.8px; font-family: "lucida Grande", Verdana, "Microsoft YaHei";"><span lang="EN-US"> </span></p><p class="MsoNormal" style="line-height: 23.8px; font-family: "lucida Grande", Verdana, "Microsoft YaHei";"><span lang="EN-US">My real-time thread is:<o:p></o:p></span></p><p class="MsoNormal" style="line-height: 23.8px; font-family: "lucida Grande", Verdana, "Microsoft YaHei";"><span lang="EN-US">   while(1) {<o:p></o:p></span></p><p class="MsoNormal" style="line-height: 23.8px; font-family: "lucida Grande", Verdana, "Microsoft YaHei";"><span lang="EN-US">       wakeupTime = timespec_add(wakeupTime, cycletime);<o:p></o:p></span></p><p class="MsoNormal" style="line-height: 23.8px; font-family: "lucida Grande", Verdana, "Microsoft YaHei";"><span lang="EN-US">       clock_nanosleep(CLOCK_TO_USE, TIMER_ABSTIME, &wakeupTime, NULL);<o:p></o:p></span></p><p class="MsoNormal" style="line-height: 23.8px; font-family: "lucida Grande", Verdana, "Microsoft YaHei";"><span lang="EN-US"> </span></p><p class="MsoNormal" style="line-height: 23.8px; font-family: "lucida Grande", Verdana, "Microsoft YaHei";"><span lang="EN-US">       begin_r=rt_timer_read();<o:p></o:p></span></p><p class="MsoNormal" style="line-height: 23.8px; font-family: "lucida Grande", Verdana, "Microsoft YaHei";"><span lang="EN-US">       ecrt_master_receive(master);<o:p></o:p></span></p><p class="MsoNormal" style="line-height: 23.8px; font-family: "lucida Grande", Verdana, "Microsoft YaHei";"><span lang="EN-US">       ecrt_domain_process(domain1);<o:p></o:p></span></p><p class="MsoNormal" style="line-height: 23.8px; font-family: "lucida Grande", Verdana, "Microsoft YaHei";"><span lang="EN-US">       end_r=rt_timer_read();<o:p></o:p></span></p><p class="MsoNormal" style="line-height: 23.8px; font-family: "lucida Grande", Verdana, "Microsoft YaHei";"><span lang="EN-US">       receive_time=end_r-begin_r;<o:p></o:p></span></p><p class="MsoNormal" style="line-height: 23.8px; font-family: "lucida Grande", Verdana, "Microsoft YaHei";"><span lang="EN-US">       if(receive_time>max_receive_time)<o:p></o:p></span></p><p class="MsoNormal" style="line-height: 23.8px; font-family: "lucida Grande", Verdana, "Microsoft YaHei";"><span lang="EN-US">           max_receive_time=receive_time;</span></p><p class="MsoNormal" style="line-height: 23.8px; font-family: "lucida Grande", Verdana, "Microsoft YaHei";"><span lang="EN-US">            temp[0]=EC_READ_U16(domain1_pd + offset.status_word_6041_0);<o:p></o:p></span></p><p class="MsoNormal" style="line-height: 23.8px; font-family: "lucida Grande", Verdana, "Microsoft YaHei";"><span lang="EN-US">            temp[1]=EC_READ_U32(domain1_pd + offset.position_actual_value_6064_0);</span></p><p class="MsoNormal" style="line-height: 23.8px; font-family: "lucida Grande", Verdana, "Microsoft YaHei";"><span lang="EN-US">            if(once<=800) {target_position=temp[1];once++;}<o:p></o:p></span></p><p class="MsoNormal" style="line-height: 23.8px; font-family: "lucida Grande", Verdana, "Microsoft YaHei";"><span lang="EN-US">                   if(temp[0] == 0x218){<o:p></o:p></span></p><p class="MsoNormal" style="line-height: 23.8px; font-family: "lucida Grande", Verdana, "Microsoft YaHei";"><span lang="EN-US">           EC_WRITE_U16(domain1_pd+offset.control_word_6040_0, 0x0080 );<o:p></o:p></span></p><p class="MsoNormal" style="line-height: 23.8px; font-family: "lucida Grande", Verdana, "Microsoft YaHei";"><span lang="EN-US">       }<o:p></o:p></span></p><p class="MsoNormal" style="line-height: 23.8px; font-family: "lucida Grande", Verdana, "Microsoft YaHei";"><span lang="EN-US">       else if( (temp[0]&0x004f) == 0x0040  ){  //temp[0]==0x250<o:p></o:p></span></p><p class="MsoNormal" style="line-height: 23.8px; font-family: "lucida Grande", Verdana, "Microsoft YaHei";"><span lang="EN-US">           EC_WRITE_U16(domain1_pd+offset.control_word_6040_0, 0x0006 );<o:p></o:p></span></p><p class="MsoNormal" style="line-height: 23.8px; font-family: "lucida Grande", Verdana, "Microsoft YaHei";"><span lang="EN-US">           //printf("1.state = %x\n",temp[0]);<o:p></o:p></span></p><p class="MsoNormal" style="line-height: 23.8px; font-family: "lucida Grande", Verdana, "Microsoft YaHei";"><span lang="EN-US">       }<o:p></o:p></span></p><p class="MsoNormal" style="line-height: 23.8px; font-family: "lucida Grande", Verdana, "Microsoft YaHei";"><span lang="EN-US">       else if( (temp[0]&0x006f) == 0x0021){ //temp[0]==0x231<o:p></o:p></span></p><p class="MsoNormal" style="line-height: 23.8px; font-family: "lucida Grande", Verdana, "Microsoft YaHei";"><span lang="EN-US">           EC_WRITE_U16(domain1_pd+offset.control_word_6040_0, 0x0007 );<o:p></o:p></span></p><p class="MsoNormal" style="line-height: 23.8px; font-family: "lucida Grande", Verdana, "Microsoft YaHei";"><span lang="EN-US">           //printf("2.state = %x\n",temp[0]);<o:p></o:p></span></p><p class="MsoNormal" style="line-height: 23.8px; font-family: "lucida Grande", Verdana, "Microsoft YaHei";"><span lang="EN-US">        }<o:p></o:p></span></p><p class="MsoNormal" style="line-height: 23.8px; font-family: "lucida Grande", Verdana, "Microsoft YaHei";"><span lang="EN-US">       else if( (temp[0]&0x06f) == 0x023){ //temp[0]==0x233<o:p></o:p></span></p><p class="MsoNormal" style="line-height: 23.8px; font-family: "lucida Grande", Verdana, "Microsoft YaHei";"><span lang="EN-US">           EC_WRITE_U8(domain1_pd+offset.modes_operation_6060_0, 8);//csp mode<o:p></o:p></span></p><p class="MsoNormal" style="line-height: 23.8px; font-family: "lucida Grande", Verdana, "Microsoft YaHei";"><span lang="EN-US">           EC_WRITE_S32(domain1_pd+offset.target_position_607a_0,target_position);<o:p></o:p></span></p><p class="MsoNormal" style="line-height: 23.8px; font-family: "lucida Grande", Verdana, "Microsoft YaHei";"><span lang="EN-US">           EC_WRITE_U16(domain1_pd+offset.control_word_6040_0, 0x000f);<o:p></o:p></span></p><p class="MsoNormal" style="line-height: 23.8px; font-family: "lucida Grande", Verdana, "Microsoft YaHei";"><span lang="EN-US">       }<o:p></o:p></span></p><p class="MsoNormal" style="line-height: 23.8px; font-family: "lucida Grande", Verdana, "Microsoft YaHei";"><span lang="EN-US">       else if( (temp[0]&0x06f) == 0x027){//temp[0]=0x237<o:p></o:p></span></p><p class="MsoNormal" style="line-height: 23.8px; font-family: "lucida Grande", Verdana, "Microsoft YaHei";"><span lang="EN-US">           EC_WRITE_S32(domain1_pd+offset.target_position_607a_0,target_position);<o:p></o:p></span></p><p class="MsoNormal" style="line-height: 23.8px; font-family: "lucida Grande", Verdana, "Microsoft YaHei";"><span lang="EN-US">                 EC_WRITE_U16(domain1_pd+offset.control_word_6040_0, 0x001f);<o:p></o:p></span></p><p class="MsoNormal" style="line-height: 23.8px; font-family: "lucida Grande", Verdana, "Microsoft YaHei";"><span lang="EN-US">       }<o:p></o:p></span></p><p class="MsoNormal" style="line-height: 23.8px; font-family: "lucida Grande", Verdana, "Microsoft YaHei";"><span lang="EN-US">                   target_position+=0;<o:p></o:p></span></p><p class="MsoNormal" style="line-height: 23.8px; font-family: "lucida Grande", Verdana, "Microsoft YaHei";"><span lang="EN-US">       if (sync_ref_counter) {<o:p></o:p></span></p><p class="MsoNormal" style="line-height: 23.8px; font-family: "lucida Grande", Verdana, "Microsoft YaHei";"><span lang="EN-US">           sync_ref_counter--;<o:p></o:p></span></p><p class="MsoNormal" style="line-height: 23.8px; font-family: "lucida Grande", Verdana, "Microsoft YaHei";"><span lang="EN-US">       } else {<o:p></o:p></span></p><p class="MsoNormal" style="line-height: 23.8px; font-family: "lucida Grande", Verdana, "Microsoft YaHei";"><span lang="EN-US">           sync_ref_counter = 1; // sync every cycle<o:p></o:p></span></p><p class="MsoNormal" style="line-height: 23.8px; font-family: "lucida Grande", Verdana, "Microsoft YaHei";"><span lang="EN-US">                            clock_gettime(CLOCK_TO_USE,&time);    //added by me          <o:p></o:p></span></p><p class="MsoNormal" style="line-height: 23.8px; font-family: "lucida Grande", Verdana, "Microsoft YaHei";"><span lang="EN-US">                            ecrt_master_sync_reference_clock_to(master, TIMESPEC2NS(time));<o:p></o:p></span></p><p class="MsoNormal" style="line-height: 23.8px; font-family: "lucida Grande", Verdana, "Microsoft YaHei";"><span lang="EN-US">       }<o:p></o:p></span></p><p class="MsoNormal" style="line-height: 23.8px; font-family: "lucida Grande", Verdana, "Microsoft YaHei";"><span lang="EN-US">       ecrt_master_sync_slave_clocks(master);<o:p></o:p></span></p><p class="MsoNormal" style="line-height: 23.8px; font-family: "lucida Grande", Verdana, "Microsoft YaHei";"><span lang="EN-US"> </span></p><p class="MsoNormal" style="line-height: 23.8px; font-family: "lucida Grande", Verdana, "Microsoft YaHei";"><span lang="EN-US">       begin_s=rt_timer_read();<o:p></o:p></span></p><p class="MsoNormal" style="line-height: 23.8px; font-family: "lucida Grande", Verdana, "Microsoft YaHei";"><span lang="EN-US">       //send process data<o:p></o:p></span></p><p class="MsoNormal" style="line-height: 23.8px; font-family: "lucida Grande", Verdana, "Microsoft YaHei";"><span lang="EN-US">       ecrt_domain_queue(domain1);<o:p></o:p></span></p><p class="MsoNormal" style="line-height: 23.8px; font-family: "lucida Grande", Verdana, "Microsoft YaHei";"><span lang="EN-US">       //ecrt_domain_queue(domain2);<o:p></o:p></span></p><p class="MsoNormal" style="line-height: 23.8px; font-family: "lucida Grande", Verdana, "Microsoft YaHei";"><span lang="EN-US">       ecrt_master_send(master);<o:p></o:p></span></p><p class="MsoNormal" style="line-height: 23.8px; font-family: "lucida Grande", Verdana, "Microsoft YaHei";"><span lang="EN-US">       end_s=rt_timer_read();<o:p></o:p></span></p><p class="MsoNormal" style="line-height: 23.8px; font-family: "lucida Grande", Verdana, "Microsoft YaHei";"><span lang="EN-US">       send_time=end_s-begin_s;<o:p></o:p></span></p><p class="MsoNormal" style="line-height: 23.8px; font-family: "lucida Grande", Verdana, "Microsoft YaHei";"><span lang="EN-US">                  <o:p></o:p></span></p><p class="MsoNormal" style="line-height: 23.8px; font-family: "lucida Grande", Verdana, "Microsoft YaHei";"><span lang="EN-US">       if(send_time>max_send_time)<o:p></o:p></span></p><p class="MsoNormal" style="line-height: 23.8px; font-family: "lucida Grande", Verdana, "Microsoft YaHei";"><span lang="EN-US">           max_send_time=send_time;<o:p></o:p></span></p><p class="MsoNormal" style="line-height: 23.8px; font-family: "lucida Grande", Verdana, "Microsoft YaHei";"><span lang="EN-US">    }<o:p></o:p></span></p><p class="MsoNormal" style="line-height: 23.8px; font-family: "lucida Grande", Verdana, "Microsoft YaHei";"><span lang="EN-US"> </span></p><p class="MsoNormal" style="line-height: 23.8px; font-family: "lucida Grande", Verdana, "Microsoft YaHei";"><span lang="EN-US">I check all the possible problem I think:<o:p></o:p></span></p><p class="MsoNormal" style="line-height: 23.8px; font-family: "lucida Grande", Verdana, "Microsoft YaHei";"><span lang="EN-US">1. Using libethercat_rtdm.so and ec_igb.<o:p></o:p></span></p><p class="MsoNormal" style="line-height: 23.8px; font-family: "lucida Grande", Verdana, "Microsoft YaHei";"><span lang="EN-US">2. Make sure calling ecrt_master_receive after a period of time after calling ecrt_master_send. Sometimes,I find I use an elapsed time to call clock_nanosleep, that is because the latency of ecrt_master_receive.<o:p></o:p></span></p><p class="MsoNormal" style="line-height: 23.8px; font-family: "lucida Grande", Verdana, "Microsoft YaHei";"><span lang="EN-US">3. Calling mlockall(MCL_CURRENT | MCL_FUTURE)<o:p></o:p></span></p><p class="MsoNormal" style="line-height: 23.8px; font-family: "lucida Grande", Verdana, "Microsoft YaHei";"><span lang="EN-US"> </span></p><p class="MsoNormal" style="line-height: 23.8px; font-family: "lucida Grande", Verdana, "Microsoft YaHei";"><span lang="EN-US">Does anyone know how to solve this problem?<o:p></o:p></span></p><p class="MsoNormal" style="line-height: 23.8px; font-family: "lucida Grande", Verdana, "Microsoft YaHei";"><span lang="EN-US"> </span></p><p class="MsoNormal" style="line-height: 23.8px; font-family: "lucida Grande", Verdana, "Microsoft YaHei";"><span lang="EN-US">Best regards<o:p></o:p></span></p><p class="MsoNormal" style="line-height: 23.8px; font-family: "lucida Grande", Verdana, "Microsoft YaHei";"><span lang="EN-US">Zhou Yang<o:p></o:p></span></p></div><div><span lang="EN-US"><br></span></div>