<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Jan 24, 2017 at 10:39 AM, Vijay Bellur <span dir="ltr">&lt;<a href="mailto:vbellur@redhat.com" target="_blank">vbellur@redhat.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><span class=""><br><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Jan 19, 2017 at 8:06 AM, Jeff Darcy <span dir="ltr">&lt;<a href="mailto:jdarcy@redhat.com" target="_blank">jdarcy@redhat.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><span class="m_-1811053768855008667gmail-">&gt; The more relevant question would be with TCP_KEEPALIVE and TCP_USER_TIMEOUT<br>
&gt; on sockets, do we really need ping-pong framework in Clients? We might need<br>
&gt; that in transport/rdma setups, but my question is concentrating on<br>
&gt; transport/rdma. In other words would like to hear why do we need heart-beat<br>
&gt; mechanism in the first place. One scenario might be a healthy socket level<br>
&gt; connection but an unhealthy brick/client (like a deadlocked one).<br>
<br>
</span>This is an important case to consider.  On the one hand, I think it answers<br>
your question about TCP_KEEPALIVE.  What we really care about is whether a<br>
brick&#39;s request queue is moving.  In other words, what&#39;s the time since the<br>
last reply from that brick, and does that time exceed some threshold? </blockquote></div></div></span></div></blockquote><div><br></div><div>I agree with this.<br> <br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><span class=""><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"> On a<br>
busy system, we don&#39;t even need ping packets to know that.  We can just use<br>
responses on other requests to set/reset that timer.  We only need to send<br>
ping packets when our *outbound* queue has remained empty for some fraction<br>
of our timeout.<br></blockquote></div></div></span></div></blockquote><div><br></div><div>Do we need ping packets sent even when client is not waiting for any replies? I assume no. If there are no responses to be received and no requests being sent to a brick, why would be a client be interested in the health of server/brick?<br> <br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><span class=""><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<br>
However, it&#39;s important that our measurements be *end to end* and not just<br>
at the transport level.  This is particularly true with multiplexing,<br>
where multiple bricks will share and contend on various resources.  We<br>
should ping *through* client and server, with separate translators above<br>
and below each.  This would give us a true end-to-end ping *for that<br>
brick*, and also keep the code nicely modular.<br></blockquote></div></div></span></div></blockquote><div><br></div><div>Agree with this. My understanding of ping framework is a tool to identify unhealthy bricks (we are interested in bricks as they are the ones going to serve fops). With that understanding ping-pong should be end to end (to whatever logical entity that constitutes brick). However, where in the brick xlator stack ping packets should be responded? Should they go all the way down to storage/posix?<br> <br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><span class=""><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
</blockquote></div><br></div></span><div class="gmail_extra">+1 to this. Having ping, pong xlators immediately above and below protocol translators would also address the problem of epoll threads getting blocked in gluster&#39;s xlator stacks in busy systems.</div><div class="gmail_extra"><br></div><div class="gmail_extra">Having said that, I do see value in Rafi&#39;s patch that prompted this thread. Would it not help to prioritize ping - pong traffic in all parts of the gluster stack including the send queue on the client?</div></div></blockquote><div><br></div><div>I&#39;ve two concerns here:<br></div><div>1. Responsiveness of brick to client invariably involves latency of network and our own transport&#39;s io-queue. Wouldn&#39;t prioritizing ping packets over normal data give us a skewed view of brick&#39;s responsiveness? For eg., On a network with heavy traffic ping-pong might be happening, but fops might be moving very slowely. What is that we achieve with a successful ping-pong in this scenario? Also, Is our response to the opposite scenario of ping-timeout happening and disconnecting the transport achieves anything substantially good? May be it helps to bring the latency of syscalls down (as experienced by application), as our HA translators like afr, EC add the latency of identifying disconnect (or  a successful fop) to latency of syscalls. As developers many of us keep wondering what is that we are trying to achieve with an heart beat mechanism.<br><br></div><div>2. Assuming that we want to prioritize ping traffic over normal traffic (which we do logically now as ping packets doesn&#39;t traverse the entire brick xlator stack all the way down to posix, instead short circuit at protocol/server), the fix in discussion here is partial (as we can&#39;t prioritize ping traffic ON the WIRE and through tcp/ip stack). While I don&#39;t have strong objections to it, I feel that its partial solution and might be inconsequential (just an hunch, no data). However, I can accept the patch, if we feel it helps.<br><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><br></div><div class="gmail_extra">Regards,</div><div class="gmail_extra">Vijay</div></div>
<br>______________________________<wbr>_________________<br>
Gluster-devel mailing list<br>
<a href="mailto:Gluster-devel@gluster.org">Gluster-devel@gluster.org</a><br>
<a href="http://lists.gluster.org/mailman/listinfo/gluster-devel" rel="noreferrer" target="_blank">http://lists.gluster.org/<wbr>mailman/listinfo/gluster-devel</a><br></blockquote></div><br><br clear="all"><br>-- <br><div class="gmail_signature" data-smartmail="gmail_signature">Raghavendra G<br></div>
</div></div>