<html><head></head><body><div style="color:#000; background-color:#fff; font-family:HelveticaNeue, Helvetica Neue, Helvetica, Arial, Lucida Grande, sans-serif;font-size:16px"><div id="yui_3_16_0_ym19_1_1481226938043_9555"><span id="yui_3_16_0_ym19_1_1481226938043_9580">And yes, the rcu_quiescent_state() is being regularly called in the updater thread, just as an fyi.</span></div><div class="qtdSeparateBR" id="yui_3_16_0_ym19_1_1481226938043_9554"><br><br></div><div class="yahoo_quoted" id="yui_3_16_0_ym19_1_1481226938043_9544" style="display: block;">  <div style="font-family: HelveticaNeue, Helvetica Neue, Helvetica, Arial, Lucida Grande, sans-serif; font-size: 16px;" id="yui_3_16_0_ym19_1_1481226938043_9543"> <div style="font-family: HelveticaNeue, Helvetica Neue, Helvetica, Arial, Lucida Grande, sans-serif; font-size: 16px;" id="yui_3_16_0_ym19_1_1481226938043_9542"> <div dir="ltr" id="yui_3_16_0_ym19_1_1481226938043_9551"> <font size="2" face="Arial" id="yui_3_16_0_ym19_1_1481226938043_9553"> <hr size="1" id="yui_3_16_0_ym19_1_1481226938043_9552"> <b><span style="font-weight:bold;">From:</span></b> "Mark E. Dawson, Jr. via lttng-dev" <lttng-dev@lists.lttng.org><br> <b><span style="font-weight: bold;">To:</span></b> Lttng-dev <lttng-dev@lists.lttng.org> <br> <b><span style="font-weight: bold;">Sent:</span></b> Thursday, December 8, 2016 1:53 PM<br> <b><span style="font-weight: bold;">Subject:</span></b> [lttng-dev] URCU_CALL_RCU_RT and its implications<br> </font> </div> <div class="y_msg_container" id="yui_3_16_0_ym19_1_1481226938043_9541"><br><div id="yiv2166555474"><div id="yui_3_16_0_ym19_1_1481226938043_9540"><div style="color:#000;background-color:#fff;font-family:HelveticaNeue, Helvetica Neue, Helvetica, Arial, Lucida Grande, sans-serif;font-size:16px;" id="yui_3_16_0_ym19_1_1481226938043_9539"><div id="yiv2166555474yui_3_16_0_ym19_1_1481226442633_2947">All,</div><div id="yiv2166555474yui_3_16_0_ym19_1_1481226442633_2947"><br></div><div id="yiv2166555474yui_3_16_0_ym19_1_1481226442633_2947">In the documentation for the create_call_rcu_data() call, we have the following description of the URCU_CALL_RCU_RT flag:</div><div id="yiv2166555474yui_3_16_0_ym19_1_1481226442633_2947"><br></div><blockquote style="margin:0 0 0 40px;border:none;padding:0px;" id="yiv2166555474yui_3_16_0_ym19_1_1481226442633_3052"><div id="yiv2166555474yui_3_16_0_ym19_1_1481226442633_2947" dir="ltr"><code id="yiv2166555474yui_3_16_0_ym19_1_1481226442633_2989">struct call_rcu_data *create_call_rcu_data(unsigned long flags, int cpu_affinity)</code><span style="font-family:Times;font-size:medium;" id="yiv2166555474yui_3_16_0_ym19_1_1481226442633_2990">: Returns a handle that can be passed to the other functions in this list. The </span><code id="yiv2166555474yui_3_16_0_ym19_1_1481226442633_2991">flags</code><span style="font-family:Times;font-size:medium;" id="yiv2166555474yui_3_16_0_ym19_1_1481226442633_2992"> argument can be zero, or can be </span><code id="yiv2166555474yui_3_16_0_ym19_1_1481226442633_2993">URCU_CALL_RCU_RT</code><span style="font-family:Times;font-size:medium;" id="yiv2166555474yui_3_16_0_ym19_1_1481226442633_2994"> if the application threads associated with the new callback-invocation thread are to get real-time response from </span><code id="yiv2166555474yui_3_16_0_ym19_1_1481226442633_2995">call_rcu()</code><span style="font-family:Times;font-size:medium;" id="yiv2166555474yui_3_16_0_ym19_1_1481226442633_2996"> by avoiding the need to call into the kernel to wake up the callback-invocation thread.</span></div><div id="yiv2166555474yui_3_16_0_ym19_1_1481226442633_2947" dir="ltr"><span style="font-family:Times;font-size:medium;"><br></span></div></blockquote><div id="yiv2166555474yui_3_16_0_ym19_1_1481226442633_3169">So setting "flags" to 0 will simply use the futex mechanism for wakeups. What exactly happens when set to the RT option? Is there something else that needs to be configured from the OS side to make the aforementioned option work correctly?</div><div><br></div><div id="yiv2166555474yui_3_16_0_ym19_1_1481226442633_3170">I'm asking because we're seeing intermittent issues whereby on application startup, the reclamation thread (call_rcu) does exactly one cleanup, but then never does it again.  We have the URCU_CALL_RCU_RT flag set.  Originally, we thought it was because the updater was not appropriately registered as a reader. But after ensuring that is the case, it still happens in 10% of startups. </div><div><br></div><div id="yiv2166555474yui_3_16_0_ym19_1_1481226442633_3171">Lastly, we wonder why it would even work correctly *at all* when we failed to register the updater as a reader thread.</div></div></div></div><br>_______________________________________________<br>lttng-dev mailing list<br><a ymailto="mailto:lttng-dev@lists.lttng.org" href="mailto:lttng-dev@lists.lttng.org">lttng-dev@lists.lttng.org</a><br><a href="https://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev" target="_blank">https://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev</a><br><br><br></div> </div> </div>  </div></div></body></html>