>  > Another follow-up.
>  > 
>  > I tried both approaches out (your suggestion and Meem's timer suggestion), 
>  > and fount that we get the best performance when combine these two 
> together, 
>  > and the timer has to be set to 1 second. For whoever is interested, here 
> is 
>  > the webrev:
>  > 
>  > http://jurassic.eng/net/aquila.prc/export/home/cathy/clearview/webrev_tcp/
> 
> I took a quick look and it seems like what I expected.  BTW, AFAIK,
> timeout(9F) won't actually return 0 on failure, so I don't think that code
> is reachable.  On a related note, I've always disliked `do_lock' arguments
> -- among other things, it tends to lead to multiple locking orders, and
> eventually deadlock.  It also doesn't appear to be necessary in your code
> (e.g., you can always have it grab the lock with some minor code changes).
> 
I am still in the process of code optimization so that I am not expecting a 
code review yet. But sure, I'll have a look of your suggestions and see 
which one applies.

Thanks
- Cathy

> Some other nits:
> 
>       * I'd prefer ds_tx_qdepth_tid to ds_qdepth_timer.  (In particular,
>         it should have the "tx_" prefix like the other related fields.)
> 
>       * 1353: Appears to be an unrelated strcmp() change.
> 
>       * dld_qdepth() loop seems a bit odd -- why does it calculate the
>         first iteration in the initialization to the `for' loop?  Would
>         seem more natural as:
> 
>           for (mp = dsp->ds_tx_list_head, mp != NULL; mp = mp->b_next) {
>                  size = get_mpsize(mp);
>                  cnt += size;
>                  msgcnt++;
>                  if (cnt >= dld_max_q_count || msgcnt > dld_max_q_count) {
>                          ASSERT(dsp->ds_tx_qbusy);
>                          dsp->ds_tx_list_tail = mp;
>                          freemsgchain(mp->b_next);
>                          mp->b_next = NULL;
>                          cnt -= size;
>                          msgcnt--;
>                          break;
>                  }
>           }
> 
>         ... or (perhaps slower, but simpler):
> 
>           for (mp = dsp->ds_tx_list_head, mp != NULL; mp = mp->b_next) {
>                  size = get_mpsize(mp);
>                  if (cnt + size > dld_max_q_count ||
>                    msgcnt == dld_max_q_count) {
>                          ASSERT(dsp->ds_tx_qbusy);
>                          dsp->ds_tx_list_tail = mp;
>                          freemsgchain(mp->b_next);
>                          mp->b_next = NULL;
>                          break;
>                  }
>                  cnt += size;
>                  msgcnt++;
>           }
> 
>         Either would also eliminate the need for the check at line 2215.
> 
>       * Lots of spelling errors need to be corrected (especially
>         s/caculate/calculate), and a bunch of wording needs to be
>         fixed.  Most of that can be worked as part of the bigger
>         Clearview code review, though.
> 
>       * s/inline static/static inline/ for consistency with other
>         uses of inline in our source.
> 
>       * get_mpsize() is a strange function name -- doesn't seem to
>         follow any of the existing conventions -- at least mp_getsize()
>         would match mmd_getsize().
> 
>       * 2176-2188: Kinda ugly code.  How about something like:
> 
>         switch (DB_TYPE(mp)) {
>         case M_DATA:
>                 return (mp->b_cont == NULL) ? MBLKL(mp) : msgdsize(mp));
>   #ifdef HWIPSEC
>         case M_CTL:
>               mp = mp->b_cont;
>                 ASSERT(mp != NULL && DB_TYPE(mp) == M_DATA);
>                 return (mp->b_cont == NULL) ? MBLKL(mp) : msgdsize(mp));
>   #endif
> 
>       * 2246: Needless cast.
> 


Reply via email to