1. 14 Nov, 2015 1 commit
    • Robert Ricci's avatar
      Turn LOAD_BALANCE and PACK_TIGHT into command line args · 15ef05a4
      Robert Ricci authored
      Looks like we are going to want the ability to tweak vnode placement per
      run rather than by building new assign binaries. So, add new '-S
      balance' and '-S pack' options. I suspect it would also be useful to add
      '-S spread' to try to spread vnodes out across as many hosts as
      possible, some people want this when using shared hosts.
  2. 12 Nov, 2015 2 commits
    • Robert Ricci's avatar
      Experimental PACK_TIGHT compile time option · c59e6d4a
      Robert Ricci authored
      When set, the goal is to pack vnodes as tightly as possible - that is,
      to penalize wasted slots in assignments.
      One downside is that this will tend to make really lopsided mappings:
      eg. if you have 50 slots per pnode, and 51 vodes, you will end up
      mapping 50 to one and 1 to the other.
      The other downside is that I have not yet thought about how to balance
      this with link weights.
    • Robert Ricci's avatar
      Rescue LOAD_BALANCE option from bitrot · 467f38f4
      Robert Ricci authored
  3. 10 Apr, 2014 1 commit
  4. 04 Apr, 2014 2 commits
  5. 24 Sep, 2012 1 commit
    • Eric Eide's avatar
      Replace license symbols with {{{ }}}-enclosed license blocks. · 6df609a9
      Eric Eide authored
      This commit is intended to makes the license status of Emulab and
      ProtoGENI source files more clear.  It replaces license symbols like
      "EMULAB-COPYRIGHT" and "GENIPUBLIC-COPYRIGHT" with {{{ }}}-delimited
      blocks that contain actual license statements.
      This change was driven by the fact that today, most people acquire and
      track Emulab and ProtoGENI sources via git.
      Before the Emulab source code was kept in git, the Flux Research Group
      at the University of Utah would roll distributions by making tar
      files.  As part of that process, the Flux Group would replace the
      license symbols in the source files with actual license statements.
      When the Flux Group moved to git, people outside of the group started
      to see the source files with the "unexpanded" symbols.  This meant
      that people acquired source files without actual license statements in
      them.  All the relevant files had Utah *copyright* statements in them,
      but without the expanded *license* state...
  6. 27 Jun, 2012 1 commit
    • Robert Ricci's avatar
      Add '-R' option to assign · 885f36c0
      Robert Ricci authored
      When set, randomizes the order of nodes before making pclasses. This
      has the effect of putting different nodes at the 'front' of the pclass,
      The idea is to avoid 'hot spots' of nodes that get over-used simply
      because they happen to appear earlier in the .ptop file.
      NB: because STL seems to use a different source of randomness, using
      this with '-s' to set a seed does *not* make assign deterministic.
  7. 19 Jul, 2011 4 commits
    • Robert Ricci's avatar
      Auto-detect NEWER_BOOST for assign · f81fe772
      Robert Ricci authored
      Detect location of boost headers, since they moved in some recent
      (cherry picked from commit b7f6ae13)
    • Robert Ricci's avatar
      Handle new property_list.hpp location in boost · 1c333acd
      Robert Ricci authored
      Have I mentioned that I hate it when library developers move their
      headers around? Change the location of the property_list.hpp header
      to a macro and add a new -DNEWER_BOOT define that swtiches this to
      the newer location.
      Not automatically detected yet; should be checked in configure.
      (cherry picked from commit 2403b264)
    • Robert Ricci's avatar
      Auto-detect NEWER_BOOST for assign · b7f6ae13
      Robert Ricci authored
      Detect location of boost headers, since they moved in some recent
    • Robert Ricci's avatar
      Handle new property_list.hpp location in boost · 2403b264
      Robert Ricci authored
      Have I mentioned that I hate it when library developers move their
      headers around? Change the location of the property_list.hpp header
      to a macro and add a new -DNEWER_BOOT define that swtiches this to
      the newer location.
      Not automatically detected yet; should be checked in configure.
  8. 06 May, 2011 2 commits
    • Robert Ricci's avatar
      Add -R (rename) option · 4e775b00
      Robert Ricci authored
      This renames, rather than removes, ptop/vtop files that fail to
      parse, so that they can be looked at later.
    • Robert Ricci's avatar
      Improve file handling · 196e5c69
      Robert Ricci authored
      Handle deeper directory structures for topfiles, and when
      using -n, restore the mtime of the original file (so that
      we can use it for determining trends over time)
  9. 05 May, 2011 1 commit
  10. 16 Dec, 2010 1 commit
  11. 23 Nov, 2010 1 commit
    • Robert Ricci's avatar
      Fix a bookkeeping bug in the ptop parsers - all of them · c0419958
      Robert Ricci authored
      Fix a bug where the total bandwidth for pnodes that are directly
      connected (without an intervening switch) is not kept track of
      Originally introduced into parse_ptop.cc, and spread to the other
      parsers via copy and paste.
  12. 10 Nov, 2010 9 commits
    • Robert Ricci's avatar
    • Robert Ricci's avatar
      Fix up copyright dates · bd6f3dbc
      Robert Ricci authored
    • Robert Ricci's avatar
      Fix another old, and significant, bug · 65506d22
      Robert Ricci authored
      Each pclass hold a mapping from type names to nodes of that type
      that are currently available for use. This structure was not being
      properly maintained; when a mapping was removed, only the entry
      for the pnodes *current* type was being put back. When the pnode
      goes empty, *all* of its possible types should be marked as available.
      The consequence was that for pnodes that could take on multiple types
      (which is the common case in Emulab), once a node had been considered
      for a certain type (say, 'pc', 'pcvm', or 'delay'), it would *never*
      be considered for another type again.
      Add a new function that gets called when a pnode goes empty, to reset
      *all* of its type mappings in its pclass.
      Fixing this bug could have some serious positive consequences.
    • Robert Ricci's avatar
      Minor improvements to debugging output · 4ddc7226
      Robert Ricci authored
    • Robert Ricci's avatar
      Fixing more pre-historic bugs · c7ba5997
      Robert Ricci authored
      Code didn't match comment; comment was right.
    • Robert Ricci's avatar
      Remove two more useless compile time options · 57805560
      Robert Ricci authored
      PNODE_ALWAYS_FRONT wasn't used for anything
      PNODE_SWITCH_LOAD was a bugfix, which we had turned on by default, and
      there was no point in being able to turn the bug back on.
    • Robert Ricci's avatar
      Remove vestiges of SMART_UNMAP compile-time option. · 2175000c
      Robert Ricci authored
      It was a good idea, but we've never used it in production, it hasn't
      compiled in years, and it was just cluttering up the code.
    • Robert Ricci's avatar
      Fix the names of some very badly-name variables · 12b109f8
      Robert Ricci authored
      The 'best' variable didn't really store the best score seen so far,
      so rename it to prev_score. Likewise for the bestviolated variable.
    • Robert Ricci's avatar
      Re-think no_connect violations · 26e0a6c6
      Robert Ricci authored
      Re-think a very old idea in assign - that no_connect violations for
      unmapped links should not be assessed against links whose endpoints are
      not mapped. The problem with this is that assign is too hesitant to map
      nodes - if there is more than one link that can't be mapped or whose
      other end isn't mapped yet, then assign thinks it's better to leave the
      node unmapped. This leads to confusing solutions (in which nodes remain
      unmapped when really it's the links that are the problem), and I beleive
      it keeps assign from exploring valuable parts of the solution space.
      This patch chanes the behavior, so that no_connect violations get scored
      even when the endpoints of the link are not mapped.
      Not well enough tested to run in production.
  13. 09 Nov, 2010 5 commits
    • Robert Ricci's avatar
      Fix a bug that's over 10 years old · d7fb737d
      Robert Ricci authored
      I think this must get the award for oldest (frequently excercised) bug
      in the Emulab source. Thanks to the magic of the git pickaxe, I
      discovered that code with this problem was first committed Monday, May
      22, 2000, when it used to be in assign_hw/assign.cc
      assign used to use a priority queue to 'randomly' select unassigned
      nodes to try assigning. Turns out this is not very random! A node can
      get unlucky, get a very low random priority assigned to it, and get
      stuck in the queue for a very, very, very long time. As a result, I've
      seen assign try to re-assign the same node several thousand times in a
      row, when there are others waiting to be re-assigned. Of course, this is
      going to result in very poor exploration of the state space.
      I changed the unassigned node selection process to use a regular list,
      and select an item from the list at random at the time of item removal.
      This gets a much more even distribution of nodes, at the small cost of
      linear iteration over the list of unassigned nodes.  This should be a
      pretty minor cost, though, as iteration over this list should be cheap
      and the list itself should generally be pretty small.
      Also added some debugging statements.
    • Robert Ricci's avatar
      Add some debugging statements · 4128f9b6
      Robert Ricci authored
    • Robert Ricci's avatar
      Add a bunch of debugging to anneal.cc · c646bd39
      Robert Ricci authored
      Add debugging statements useful in tracking down which vnodes assign attempts
      to assign to which pnodes.
    • Robert Ricci's avatar
      Fix potential wild pointer bug in reorderLinks() · f80907f1
      Robert Ricci authored
      Was returning a structure with a pointer to a stack-allocated string in
      it. Use knowledge about where that string came from to avoid having to
      make a copy of it, instead.
      There is still a minor memory leak, but left behind a note rather than
      fixing it (which would be quite involved).
    • Robert Ricci's avatar
      Fix a bug in the reorderLinks() function · 469be374
      Robert Ricci authored
      Because it's operating on char*s, the STL list remove() function
      doesn't work; it needs to do a strcmp, not a simple comparison. So, hand-write
      the loop to do this.
      Also add a santity check to produce a fatal error rather than allowing this
      function to go into an infinite loop.
  14. 13 Oct, 2010 1 commit
    • Robert Ricci's avatar
      Fifth attempt at fixing fixed interfaces in assign · a773d833
      Robert Ricci authored
      Think I got it this time (yeah, I've said that four times before).
      It requires some extra bookkeeping; we were recording source and
      dest interface names in tb_plink, but not source and dest node
      names. With this new information, find_best_link() now has sole
      responsibility for figuring out if the vlink and plink go in the
      same direction, and the callers of find_best_link() are now
      responsible for knowing which direction they are traversing the
      vlink in (and thus whether they should tell find_best_link() to
      check the source or dest of the vlink.)
  15. 30 Sep, 2010 1 commit
    • Robert Ricci's avatar
      Fix fixed interfaces for the fourth time · 51b20429
      Robert Ricci authored
      Okay, I know I said this the first three times, but I think I've got it
      this time - the problem had to do with how I was handling the flipped
      flag (of course). Many of the calls find_best_link() give the dest_pv
      of a link instead of the pv (source pnode). When we do this, we have to
      invert the flipped flag, 'cause we're effectively reversing the order
      of the link.
  16. 20 Aug, 2010 3 commits
  17. 19 Aug, 2010 2 commits
    • Robert Ricci's avatar
      Make assign build with GCC 4.4. · 05e25a14
      Robert Ricci authored
      The main change is to add a NEWER_GCC macro, separate from NEW_GCC, to
      detect GCC 4.3 and up.
      This is necessary because, in GCC 4.3, hash_fun.h moved from ext/ to
      backward/.  New comments in port.h give the details.
      common.h, fstring.h: use NEWER_GCC to locate hash_fun.h.  port.h:
      define NEWER_GCC if GCC >= 4.3.
    • Robert Ricci's avatar
      Better error message when requesting nodes of a nonexistent type · 1085e4a7
      Robert Ricci authored
      If a request was made for a node type that was not present in the physical
      topology, then the error message was, "Too much bandwidth on emulated links."
      This change adds a flag in mapping_precheck() that remembers whether the
      requested node type was found.  If not, then a new error message is printed
      instead of the bandwidth one.
  18. 10 Aug, 2010 2 commits