1. 05 1月, 2009 1 次提交
  2. 09 9月, 2008 1 次提交
  3. 04 9月, 2008 9 次提交
    • G
      dccp ccid-3: Update the RX history records in one place · 88e97a93
      Gerrit Renker 提交于
      This patch is a requirement for enabling ECN support later on. With that change
      in mind, the following preparations are done:
       * renamed handle_loss() into congestion_event() since it returns true when a
         congestion event happens (it will eventually also take care of ECN packets);
       * lets tfrc_rx_congestion_event() always update the RX history records, since
         this routine needs to be called for each non-duplicate packet anyway;
       * made all involved boolean-type functions to have return type `bool';
      
      Updating the RX history records is now only necessary for the packets received
      up to sending the first feedback. The receiver code becomes again simpler.
      Signed-off-by: NGerrit Renker <gerrit@erg.abdn.ac.uk>
      88e97a93
    • G
      dccp ccid-3: Update the computation of X_recv · 68c89ee5
      Gerrit Renker 提交于
      This updates the computation of X_recv with regard to Errata 610/611 for
      RFC 4342 and draft rfc3448bis-06, ensuring that at least an interval of 1
      RTT is used to compute X_recv.  The change is wrapped into a new function
      ccid3_hc_rx_x_recv().
      
      Further changes:
      ----------------
       * feedback is not sent when no data packets arrived (bytes_recv == 0), as per
         rfc3448bis-06, 6.2;
       * take the timestamp for the feedback /after/ dccp_send_ack() returns, to avoid
         taking the transmission time into account (in case layer-2 is busy);
       * clearer handling of failure in ccid3_first_li().
      Signed-off-by: NGerrit Renker <gerrit@erg.abdn.ac.uk>
      68c89ee5
    • G
      dccp tfrc: Increase number of RTT samples · 22338f09
      Gerrit Renker 提交于
      This improves the receiver RTT sampling algorithm so that it tries harder to get
      as many RTT samples as possible. 
      
      The algorithm is based the concepts presented in RFC 4340, 8.1, using timestamps
      and the CCVal window counter. There exist 4 cases for the CCVal difference:
       * == 0: less than RTT/4 passed since last packet -- unusable;
       *  > 4: (much) more than 1 RTT has passed since last packet -- also unusable;
       * == 4: perfect sample (exactly one RTT has passed since last packet);
       * 1..3: sub-optimal sample (between RTT/4 and 3*RTT/4 has passed).
      
      In the last case the algorithm tried to optimise by storing away the candidate
      and then re-trying next time. The problem is that
       * a large number of samples is needed to smooth out the inaccuracies of the
         algorithm;
       * the sender may not be sending enough packets to warrant a "next time";
       * hence it is better to use suboptimal samples whenever possible.
      The algorithm now stores away the current sample only if the difference is 0.
      
      Applicability and background
      ----------------------------
      A realistic example is MP3 streaming where packets are sent at a rate of less
      than one packet per RTT, which means that suitable samples are absent for a
      very long time.
      
      The effectiveness of using suboptimal samples (with a delta between 1 and 4) was
      confirmed by instrumenting the algorithm with counters. The results of two 20
      second test runs were:
       * With the old algorithm and a total of 38442 function calls, only 394 of these
         calls resulted in usable RTT samples (about 1%), and 378 out of these were
         "perfect" samples and 28013 (unused) samples had a delta of 1..3.
       * With the new algorithm and a total of 37057 function calls, 1702 usable RTT
         samples were retrieved (about 4.6%), 5 out of these were "perfect" samples.
      Signed-off-by: NGerrit Renker <gerrit@erg.abdn.ac.uk>
      22338f09
    • G
      dccp ccid-3: Always perform receiver RTT sampling · 2b81143a
      Gerrit Renker 提交于
      This updates the CCID-3 receiver in part with regard to errata 610 and 611
      (http://www.rfc-editor.org/errata_list.php), which change RFC 4342 to use the
      Receive Rate as specified in rfc3448bis, requiring to constantly sample the
      RTT (or use a sender RTT).
      
      Doing this requires reusing the RX history structure after dealing with a loss.
      
      The patch does not resolve how to compute X_recv if the interval is less
      than 1 RTT. A FIXME has been added (and is resolved in subsequent patch).
      
      Furthermore, since this is all TFRC-based functionality, the RTT estimation
      is now also performed by the dccp_tfrc_lib module. This further simplifies
      the CCID-3 code.
      Signed-off-by: NGerrit Renker <gerrit@erg.abdn.ac.uk>
      2b81143a
    • G
      dccp tfrc: Let dccp_tfrc_lib do the sampling work · 34a081be
      Gerrit Renker 提交于
      This migrates more TFRC-related code into the dccp_tfrc_lib:
       * sampling of the packet size `s' (which is only needed until the first
         loss interval is computed (ccid3_first_li));
       * updating the byte-counter `bytes_recvd' in between sending feedbacks.
      The result is a better separation of CCID-3 specific and TFRC specific
      code, which aids future integration with ECN and e.g. CCID-4.
      
      Further changes:
      ----------------
       * replaced magic number of 536 with equivalent constant TCP_MIN_RCVMSS;
         (this constant is also used when no estimate for `s' is available).
      Signed-off-by: NGerrit Renker <gerrit@erg.abdn.ac.uk>
      34a081be
    • G
      dccp tfrc: Return type of update_i_mean is void · 3ca7aea0
      Gerrit Renker 提交于
      This changes the return type of tfrc_lh_update_i_mean() to void, since that 
      function returns always `false'. This is due to 
      
       	len = dccp_delta_seqno(cur->li_seqno, DCCP_SKB_CB(skb)->dccpd_seq) + 1;
       
       	if (len - (s64)cur->li_length <= 0)	/* duplicate or reordered */
      		return 0;
      
      which means that update_i_mean can only increase the length of the open loss
      interval I_0, and hence the value of I_tot0 (RFC 3448, 5.4). Consequently the
      test `i_mean < old_i_mean' at the end of the function always evaluates to false.
      
      There is no known way by which a loss interval can suddenly become shorter,
      therefore the return type of the function is changed to void. (That is, under
      the given circumstances step (3) in RFC 3448, 6.1 will not occur.)
      
      Further changes:
      ----------------
       * the function is now called from tfrc_rx_handle_loss, which is equivalent
         to the previous way of calling from rx_packet_recv (it was called whenever
         there was no new or pending loss, now  it is also updated when there is
         a pending loss - this increases the accuracy a bit);
       * added a FIXME to possibly consider NDP counting as per RFC 4342 (this is
         not implemented yet).
      Signed-off-by: NGerrit Renker <gerrit@erg.abdn.ac.uk>
      3ca7aea0
    • G
      dccp tfrc: Perform early loss detection · d20ed95f
      Gerrit Renker 提交于
      This enables the TFRC code to begin loss detection (as soon as the module
      is loaded), using the latest updates from rfc3448bis-06, 6.3.1:
      
       * when the first data packet(s) are lost or marked, set
       * X_target = s/(2*R) => f(p) = s/(R * X_target) = 2,
       * corresponding to a loss rate of ~ 20.64%.
      
      The handle_loss() function is now called right at the begin of rx_packet_recv()
      and thus no longer protected against duplicates: hence a call to rx_duplicate()
      has been added.  Such a call makes sense now, as the previous patch initialises
      the first entry with a sequence number of GSR.
      Signed-off-by: NGerrit Renker <gerrit@erg.abdn.ac.uk>
      d20ed95f
    • G
      dccp tfrc: Receiver history initialisation routine · 24b8d343
      Gerrit Renker 提交于
      This patch 
       1) separates history allocation and initialisation, to facilitate early
          loss detection (implemented by a subsequent patch);
      
       2) removes duplication by using the existing tfrc_rx_hist_purge() if the
          allocation fails. This is now possible, since the initialisation routine
       3) zeroes out the entire history before using it. 
      Signed-off-by: NGerrit Renker <gerrit@erg.abdn.ac.uk>
      24b8d343
    • G
      dccp ccid-3: Remove ugly RTT-sampling history lookup · 63b3a73b
      Gerrit Renker 提交于
      This removes the RTT-sampling function tfrc_tx_hist_rtt(), since
      
       1. it suffered from complex passing of return values (the return value both
          indicated successful lookup while the value doubled as RTT sample);
      
       2. when for some odd reason the sample value equalled 0, this triggered a bug
          warning about "bogus Ack", due to the ambiguity of the return value;
      
       3. on a passive host which has not sent anything the TX history is empty and
          thus will lead to unwanted "bogus Ack" warnings such as
          ccid3_hc_tx_packet_recv: server(e7b7d518): DATAACK with bogus ACK-28197148
          ccid3_hc_tx_packet_recv: server(e7b7d518): DATAACK with bogus ACK-26641606.
      
      The fix is to replace the implicit encoding by performing the steps manually.					       
      
      Furthermore, the "bogus Ack" warning has been removed, since it can actually be
      triggered due to several reasons (network reordering, old packet, (3) above),
      hence it is not very useful.
      Signed-off-by: NGerrit Renker <gerrit@erg.abdn.ac.uk>
      63b3a73b
  4. 13 7月, 2008 3 次提交
    • G
      dccp ccid-3: Fix a loss detection bug · b552c623
      Gerrit Renker 提交于
      This fixes a bug in the logic of the TFRC loss detection:
       * new_loss_indicated() should not be called while a loss is pending;
       * but the code allows this;
       * thus, for two subsequent gaps in the sequence space, when loss_count
         has not yet reached NDUPACK=3, the loss_count is falsely reduced to 1.
      
      To avoid further and similar problems, all loss handling and loss detection is
      now done inside tfrc_rx_hist_handle_loss(), using an appropriate routine to
      track new losses.
      
      Further changes:
      ----------------
       * added a reminder that no RX history operations should be performed when
         rx_handle_loss() has identified a (new) loss, since the function takes
         care of packet reordering during loss detection;
       * made tfrc_rx_hist_loss_pending() bool (thanks to an earlier suggestion
         by Arnaldo);		 
       * removed unused functions.
      Signed-off-by: NGerrit Renker <gerrit@erg.abdn.ac.uk>
      b552c623
    • G
      dccp: Upgrade NDP count from 3 to 6 bytes · 5b5d0e70
      Gerrit Renker 提交于
      RFC 4340, 7.7 specifies up to 6 bytes for the NDP Count option, whereas the code
      is currently limited to up to 3 bytes. This seems to be a relict of an earlier 
      draft version and is brought up to date by the patch.
      Signed-off-by: NGerrit Renker <gerrit@erg.abdn.ac.uk>
      5b5d0e70
    • G
      dccp ccid-3: Fix error in loss detection · 2013c7e3
      Gerrit Renker 提交于
      The TFRC loss detection code used the wrong loss condition (RFC 4340, 7.7.1):
       * the difference between sequence numbers s1 and s2 instead of 
       * the number of packets missing between s1 and s2 (one less than the distance).
      
      Since this condition appears in many places of the code, it has been put into a
      separate function, dccp_loss_free().
      
      Further changes:
      ----------------
       * tidied up incorrect typing (it was using `int' for u64/s64 types);
       * optimised conditional statements for common case of non-reordered packets;
       * rewrote comments/documentation to match the changes.
      Signed-off-by: NGerrit Renker <gerrit@erg.abdn.ac.uk>
      2013c7e3
  5. 29 1月, 2008 13 次提交
  6. 20 7月, 2007 1 次提交
    • P
      mm: Remove slab destructors from kmem_cache_create(). · 20c2df83
      Paul Mundt 提交于
      Slab destructors were no longer supported after Christoph's
      c59def9f change. They've been
      BUGs for both slab and slub, and slob never supported them
      either.
      
      This rips out support for the dtor pointer from kmem_cache_create()
      completely and fixes up every single callsite in the kernel (there were
      about 224, not including the slab allocator definitions themselves,
      or the documentation references).
      Signed-off-by: NPaul Mundt <lethal@linux-sh.org>
      20c2df83
  7. 12 12月, 2006 1 次提交
  8. 27 8月, 2006 4 次提交
  9. 01 7月, 2006 1 次提交
  10. 30 8月, 2005 6 次提交