1. 14 Jun, 2003 6 commits
  2. 13 May, 2003 1 commit
  3. 02 May, 2003 1 commit
  4. 30 Apr, 2003 1 commit
  5. 18 Apr, 2003 2 commits
    • Mike Hibler's avatar
      Combine the chunk buffer inprogress and ready fields into a single state · aa078bd8
      Mike Hibler authored
      field.  This is NOT just an aesthetic change, it fixes a once-in-a-blue-
      moon race (that happened just yesterday) where the disk write thread
      cleared ready and then inprogress as two seperate assignments and got
      context switched after the first.  The result was that the net thread
      saw a chunk that was inprogress even though all blocks had been received
      and it issued a zero-block request.  This triggered an assert in the server.
      Note that if we were prissy we would protect chunk buffer accesses with
      a mutex, but that is overkill for this single piece of shared state that
      can be protected via the "reasonable" atomicity of a write instruction.
    • Mike Hibler's avatar
      make 0-length request just a warning and not fatal · 29ff81b5
      Mike Hibler authored
      get the client tracking code right this time!
  6. 11 Apr, 2003 1 commit
  7. 09 Apr, 2003 3 commits
    • Mike Hibler's avatar
      Minor cleanup · 00a3925f
      Mike Hibler authored
    • Mike Hibler's avatar
      Once again remove the hacky/hokey LOSSRATE code, · 8f349249
      Mike Hibler authored
      hopefully never to return again!
    • Mike Hibler's avatar
      Frisbee general: · 9e55b0b1
      Mike Hibler authored
      1. Implement PREQUEST message which passes a bit map of desired blocks.
         We still use the REQUEST message (start block + number of blocks) for
         full chunk requests as that is more efficient.  This message also
         includes a flag indicating whether it is a retry of a request we
         originally made or not.  This gives the server more accurate loss info.
      2. More stats and tracing goo.
      Frisbee client:
      1. Add 'C' and 'W' command line options to specify amount of memory
         for chunk buffers (network buffering) and for write buffers (disk
         buffering).  The Emulab frisbee startup script uses these to partition
         up all the available memory on a machine.  Previously we were just
         using a fixed ~128MB even though our machines have 256 or 512MB of
         memory.  Also add the 'M' option which specifies the overall memory,
         internally dividing it up between chunk buffers and write buffers.
      2. Add 'S' command line option to explicitly specify the server.  This
         allows us to make a feeb...um, "lightweight" authentication check
         on incoming messages.
      3. Use the common BlockMap data struct to track which pieces of a chunk
         we have received.  This is easily inverted to make PREQUESTS and it is
         also smaller than the older byte-per-block technique.
      4. Allow partial request-ahead.  Previously, we only issued request-ahead
         if there were enough empty chunk buffers for a maximum (2) request-ahead.
      Frisbee server:
      1. Use BlockMap for workQ elements.  An easy way to allow a complete merge
         of incoming requests with existing ones.
      2. Check for overlap of incoming requests with the request currently
         being serviced.  This happens surprisingly often.
      3. Dubious: burst gap becomes burst interval.  The latter takes into
         account the time required to read data, etc., in other words, we now
         have variable-sized gaps and put out bursts at specific times rather
         than having fixed gaps and putting out bursts at variable times.
         This gives us more accurate pacing over shorter time periods.  I
         thought this might be important for dynamic pacing.
      4. Add 'W' command line option to specify a target bandwidth.  Frisbeed
         will use this to calculate a burst size/interval.
      5. Rewrote the dynamic pacing code.  It is now easily as bad as before
         if not worse.  But it does have fewer magic constants!  Needs to be
         redone by someone who understands the TCP-friendly rate equation.
      1. add 'R' option to specify one or more partitions for which to force
         raw (naive) compression even if the FS format is understood.  Useful
         for benchmarking.
      2. add 'D' option to allow "dangerous" writes.  In this mode, we don't
         do the fsync's or retries of failed writes.  Overrides the hack we put
         in for NFS.  Use this if writing to a local filesystem (or /dev/null).
      3. Eliminate an extra copy of every chunk header.
      1. Eliminate extra copy of decompressed data that we were doing between
         the single decompression buffer and the disk buffers.  Helps on slow
         machines (like gatech's 300Mhz machines with 66MHz memory bus).
      2. Allow dynamic number of variable-sized write buffers.  Total memory
         not to exceed the writebufmem limit.  Previously we had a small number
         of fixed-size (256K) buffers.
      3. Add debugging 'C' option to just compute a single CRC of the decompressed
         image.  Back-ported to older imageunzip and used to make sure my write
         buffer changes were correct.  Maybe handy for similar massive changes
         in the future.
  8. 16 Jan, 2003 1 commit
  9. 09 Jan, 2003 2 commits
  10. 06 Jan, 2003 1 commit
  11. 03 Jan, 2003 1 commit
  12. 18 Dec, 2002 1 commit
  13. 12 Dec, 2002 2 commits
  14. 11 Dec, 2002 1 commit
    • Mike Hibler's avatar
      Server: back to using a condvar since they seem to be fixed. · 2e77122f
      Mike Hibler authored
      Server: make file readsize independent of burstsize (previously
      readsize had to be a divisor of burstsize).  A subtle side-effect
      is that the dynamic burst rate is recalcluated at the conslusion
      of every burst instead of after every readsize count of blocks has
      been sent (less than a burst)  This just seems to be more logical.
      Client: add "-T DOS-type" option to tell frisbee, when in slice
      mode, to set the type of the slice in the DOS partition table.
      This is useful if you are dropping say a BSD filesystem into
      an unused slice, you don't have to go back later and set this
      with fdisk.  Considered making this info part of the image
      itself (recorded by imagezip when creating a slice image),
      but decided against it.
  15. 06 Dec, 2002 1 commit
  16. 02 Dec, 2002 1 commit
  17. 26 Nov, 2002 2 commits
    • Mike Hibler's avatar
      Remove hokey loss rate code · 1f897669
      Mike Hibler authored
    • Mike Hibler's avatar
      Commit of USENIX driven improvements: · 2ff95cee
      Mike Hibler authored
      1. Client: add "NAK avoidance."  We track our (and others, via snooping) block
         requests and avoid making re-requests unless it has been "long enough."
      2. Server: more aggressive merging of requests in the work queue.  For every
         new request, look for any overlap with an existing entry.
      3. Server: from Leigh: first cut at dynamic rate adjustment.  Can be enabled
         with -D option.
      4. Both: change a lot of the magic constants into runtime variables so that
         they can be adjusted on the command line or via the event interface (see
      5. Add code to do basic validatation of incoming packets.
      6. Client: randomization of block request order is now optional.
      7. Client: startup delay is optional and specified via a parameter N which
         says "randomly delay between 0 and N seconds before attempting to join."
      8. Both: add a new LEAVE message which reports back all the client stats to
         the server (which logs them).
      9. Both: attempt to comment some of the magic values in decls.h.
      10. Both: add cheezy hack to fake packet loss.  Disabled by default, see
         the GNUmakefile.  This code is coming out right after I archive it with
         this commit.
      11. Add tracing code.  Frisbee server/client will record a number of
         interesting events in a memory buffer and dump them at the end.  Not
         compiled in by default, see the GNUmakefile (NEVENTS) for turning this on.
      12. Not to be confused with the events above, also added testbed event system
         code so that frisbee clients can be remotely controlled.  This is a hack
         for measurement purposes (it requires a special rc.frisbee in the frisbee
         MFS).  Allows changing of all sorts of parameters as well as implementing
         a crude form of identification allowing you to start only a subset of
         clients.  Interface is via tevc with commands like:
      	tevc -e testbed,frisbee now frisbee start maxclients=5 readahead=5
      	tevc -e testbed,frisbee now frisbee stop exitstatus=42
         Again, this is not compiled in by default as it makes the client about
         4x bigger.  See the GNUmakefile for turning it on.
  18. 17 Nov, 2002 1 commit
  19. 31 Oct, 2002 2 commits
  20. 26 Sep, 2002 1 commit
  21. 07 Jul, 2002 1 commit
  22. 02 Jul, 2002 1 commit
    • Leigh B. Stoller's avatar
      Convert imagezip to optionally using stdout instead of a file by giving · ff17c390
      Leigh B. Stoller authored
      it "-" for the output filename. This means we cannot seek, and so the
      little bit of stuff we do for netdisk cannot be done, but so what.
      It also means that output errors are fatal, and so no reason to retry
      them (like we do for writes to an NFS file).
      Convert imageunzip to optionally using stdin instead of a file, by
      giving it "-" for the input name. I added an 1MB chunk buffer to,
      which reads are buffered into. I also changed unified the interface
      from the the Frisbee client, which got rid of some ifdefs.
  23. 25 Mar, 2002 2 commits
  24. 17 Jan, 2002 2 commits
  25. 14 Jan, 2002 1 commit
  26. 12 Jan, 2002 1 commit