<br><br>
<div class="gmail_quote">On Tue, Aug 4, 2009 at 4:15 PM, Sasha Khapyorsky <span dir="ltr"><<a href="mailto:sashak@voltaire.com">sashak@voltaire.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="PADDING-LEFT: 1ex; MARGIN: 0px 0px 0px 0.8ex; BORDER-LEFT: #ccc 1px solid">
<div class="im">On 12:45 Tue 04 Aug     , Hal Rosenstock wrote:<br>> ><br>> > > This patch also introduces a new config option (max_smps_per_node)<br>> > > which indicates how deep the per node pipeline is (current default is 4).<br>
> > > This also has the effect of limiting the number of times that the switch<br>> > > list is traversed. Maybe this embellishment is unnecessary.<br>> ><br>> > Then why is it needed?<br>><br>
><br>> Also, as was discussed in the thread on this, it gives a way to control<br>> possible VL15 overflow.<br><br></div>VL15 overflow is controlled by max_wire_smps not by max_smps_per_node.</blockquote>
<div> </div>
<div>It's a different control on VL15 overflow. It can easily be eliminated if that's what you want. There's actually some minor simplification with doing this.</div>
<div> </div>
<blockquote class="gmail_quote" style="PADDING-LEFT: 1ex; MARGIN: 0px 0px 0px 0.8ex; BORDER-LEFT: #ccc 1px solid"><span id=""></span><br>
<div class="im"><br>> > I don't really like such separation (osm_ucast_mgr_set_fwd_tbl_top and<br>> > osm_ucast_pipeline_tbl).<br>><br>><br>> Why not ? What's the matter with doing this ?<br>
<br></div>To not expose this (LFTs setup) algorithm to routing engines. And to<br>eliminate duplicated function calls.<br>
<div class="im"><br>> > Why to not use a single function and update all<br>> > routing engines appropriately (you need to do it anyway), so that this<br>> > will only fill up new_lfts table?<br>><br>
><br>> I'm not following what you're describing. set_fwd_tbl_top sets LinearFDBTop<br>> whereas pipeline_tbl starts the cascade of LFT sets based on<br>> max_smps_per_node.<br><br></div>You can setup new_lfts arrays in routing engines and at the end of cycle<br>
call single osm_*setup*_lfts() which will do everything - setup TOPs and<br>start to run LFT blocks update.<br>
<div class="im"><br>> > > +<br>> > > +             p_path =<br>> > osm_physp_get_dr_path_ptr(osm_node_get_physp_ptr(p_sw->p_node, 0));<br>> > > +<br>> > > +             mad_context.lft_context.node_guid = node_guid;<br>
> > > +             mad_context.lft_context.set_method = TRUE;<br>> > > +<br>> > > +             osm_sm_set_next_lft_block(sm, p_sw, &block[0], p_path,<br>> > > +                                       &mad_context);<br>
> > > +<br>> > > +             p_sw->lft_block_id_ho++;<br>> ><br>> > Wouldn't it be simpler to encode block_id in a mad context?<br>><br>><br>> Why simpler ? I think it complicates the receiver code to do that (assuming<br>
> max_smps_per_node remains).<br><br></div>Ok.<br>
<div class="im"><br>> > I suppose that this breaks 'file' routing engine (did you test it?) -<br>> > instead of switch LFTs setup this will only update its TOPs.<br>><br>> At this point, I don't recall.<br>
<br></div>You removed osm_ucast_mgr_set_fwd_table() calls and placed<br>osm_ucast_mgr_set_fwd_tbl_top() instead - obviously nothing will run an<br>actual LFT blocks setup.</blockquote>
<blockquote class="gmail_quote" style="PADDING-LEFT: 1ex; MARGIN: 0px 0px 0px 0.8ex; BORDER-LEFT: #ccc 1px solid"><span id=""></span><br>
<div class="im"><br>> > Is it possible (for example in case of send errors) that "partial" LFT<br>> > blocks sending will trigger wait_for_pending_transaction() completion?<br>><br>><br>> I don't know. Is this different from the original algorithm in the case of<br>
> send errors ?<br><br></div>Yes, it is different - unlike the original code it leaves ucast mgr (and<br>go to wait in wait_for_pending()) before all required LFT blocks update<br>requests were sent.</blockquote>
<div> </div>
<div>This goes away if there is no max_smps_per_node support.</div>
<div> </div>
<div>So do you want to also preserve the original behavior/algorithm or you have no preference ?</div>
<div> </div>
<div>-- Hal</div>
<div> </div>
<blockquote class="gmail_quote" style="PADDING-LEFT: 1ex; MARGIN: 0px 0px 0px 0.8ex; BORDER-LEFT: #ccc 1px solid"><span id=""></span><br><font color="#888888"><br>Sasha<br></font></blockquote></div><br>