1. 19 Dec, 2017 7 commits
  2. 18 Dec, 2017 6 commits
    • Swann Perarnau's avatar
      [feature] Implement skeleton downstream API · 19c9eb54
      Swann Perarnau authored
      This patch refactors the downstream API to use pub/sub socket pair, like
      the upstream API. This is part of the effort to improve the downstream
      API. See #2.
      
      This patch doesn't touch the client module, which will be adapted in
      future commits.
      19c9eb54
    • Swann Perarnau's avatar
      Merge branch 'upstream-network-fixes' into 'master' · be059812
      Swann Perarnau authored
      Fix upstream publishers messaging issues
      
      See merge request !8
      be059812
    • Swann Perarnau's avatar
      [refactor] daemon should always bind on sockets · 1391a197
      Swann Perarnau authored
      The way 0MQ works on PUB/SUB sockets, publishers might drop
      messages if subscribers are not detected faster enough. One way to fix
      it is to have the "server" always bind sockets, and the "client" use
      connect. This way, the handshake is initiated properly, and the client
      can publish as soon as the connection is done.
      
      This patch makes the daemon bind on the upstream API and the CLI connect,
      fixing in the process the message dropping we were experiencing before.
      
      Long term, we might have a think of using 2 types of sockets for the
      upstream API: pub/sub for actual events published from the daemon, and
      a REQ/REP or ROUTER/DEALER pair for "commands".
      1391a197
    • Swann Perarnau's avatar
      Merge branch 'coolr-improve-and-check' into 'master' · 6f53bbbd
      Swann Perarnau authored
      Fix recent coolr issues and start building tests for it
      
      See merge request !7
      6f53bbbd
    • Swann Perarnau's avatar
      [test] Add a clr_rapl test matching current code · 37097b20
      Swann Perarnau authored
      This patch adds a test for the nrm/coolr/clr_rapl.py code, based on
      the __main__ code added to it recently. This is an example of how the
      modules should be tested automatically, instead of relying on __main__
      snippets everywhere.
      
      We should replace those snippets bits by bits by tests similar to this
      one. The end goal is to able to active a gitlab pipeline that validate
      merge requests automatically.
      37097b20
    • Swann Perarnau's avatar
      Partial Revert of powercap API update · ec563afb
      Swann Perarnau authored
      Previous commit 0c93ce6a broke the
      sample code used by the daemon, by reverting the sample function to a
      json message generator. This is due to inconsistencies between the coolr
      code and the NRM import: we removed json generation from coolr, to push
      it on the messaging side, while upstream still does it on sensor
      reading.
      
      This commit fixes that, but doesn't touch the new test code embedded in
      clr_rapl.py
      We will move that the test infrastructure later.
      ec563afb
  3. 17 Dec, 2017 1 commit
  4. 15 Dec, 2017 3 commits
    • Swann Perarnau's avatar
      Merge branch 'switch-to-subprocess' into 'master' · 68784add
      Swann Perarnau authored
      Switch to subprocess
      
      See merge request !6
      68784add
    • Swann Perarnau's avatar
      [feature] Properly handle run events in order · 957deb8d
      Swann Perarnau authored
      This patch implements a small finite state machine on the cmd side to be
      able to run a command, wait for all of its output, and then exit.
      
      As the daemon can send those message in any order, we need to wait them
      properly, in particular the closing of stdout/stderr before exiting.
      
      This patch also fixes the read_until_close callback creation to ensure
      that the stream EOF is handled as a distinct message.
      957deb8d
    • Swann Perarnau's avatar
      [refactor] Only track container inside the CM · f2bc8b80
      Swann Perarnau authored
      The daemon code was maintaining its own container tracker using pids,
      instead of using the one in the container manager. This patch removes
      this additional tracking, and let the daemon side deal with an actual
      namedtuple.
      f2bc8b80
  5. 14 Dec, 2017 10 commits
  6. 13 Dec, 2017 4 commits
    • Swann Perarnau's avatar
      [feature] Add kill command · 63c2dea8
      Swann Perarnau authored
      This patch adds a command to kill the parent process of a container
      based on the container uuid, triggering the death of the container.
      
      The os.kill command interacts pretty badly with the custom built
      children handling, causing us to catch unwanted exceptions in an effort
      to keep the code running. The waitpid code was also missing a bit about
      catching children exiting because of signals, so we fixed that.
      
      At this point, two things should be paid attention to:
        - we don't distinguish properly between a container and a command.
        This will probably cause issues later, as it should be possible to
        launch multiple programs in the same container, and for partitions to
        survive the death of the parent process.
        - the message format is growing more complex, but without any
        component having strong ownership over it. This will probably cause
        stability issues in the long term, as the format complexifies and we
        lose track of the fields expected from everyone.
      63c2dea8
    • Swann Perarnau's avatar
      [feature] Add command to list containers · 2f470afb
      Swann Perarnau authored
      This patch adds a very simple command to list the containers currently
      known by the NRM. There's no history or state tracking on the NRM, so
      the code is pretty simple.
      
      We expect that some of the container tracking doesn't need to be sent
      for such a command, so the listing also filters some of the fields.
      
      This patch also adds an 'event' field to container messages, as it would
      probably be needed further for other kind of operations.
      2f470afb
    • Swann Perarnau's avatar
      Merge branch 'containers-launch' into 'master' · 848a9755
      Swann Perarnau authored
      Container launching implementation
      
      See merge request !3
      848a9755
    • Swann Perarnau's avatar
      [feature] Implement simple RM for containers · 1c4645cc
      Swann Perarnau authored
      This patch refactor the resource management and hwloc code into a
      working, albeit very simple scheduling policy. Indeed, the previous code
      contained strong assumptions about the output of hwloc matching an Argo
      NodeOS configuration used during the previous phase of the project, that
      always contained enough CPUs and Mems to perform exclusive scheduling.
      
      The current version is simpler, but should work on more regular systems.
      The patch also improves code organization so that introducing more
      complex scheduling algorithms will be simpler.
      
      The testing of this code resulted in the discovery of simple bugs in the
      daemon children handling code, which should work now.
      1c4645cc
  7. 11 Dec, 2017 5 commits
    • Swann Perarnau's avatar
      [feature] Pull the Argus code into the NRM · 92290b22
      Swann Perarnau authored
      The Argus (globalos) launcher had prototype code to read a container
      manifest, create a container using Judi's code, and map resources using
      hwloc.
      
      This patch brings that code, almost intact, into the NRM repo. This code
      is quite ugly, and the resource mapping crashes if the kernel
      configuration isn't right. But it's still a good starting point, and we
      should be able to improve things little by little.
      
      One part in particular needs attention: SIGCHLD handling. We should
      think of using ioloop-provided facilities to avoid this mess.
      
      The patch also contains the associated CLI changes.
      
      Note: the messaging format is starting to be difficult to keep in check,
      as there's conversions and field checks all over the code. See #3 for
      a possible solution.
      92290b22
    • Swann Perarnau's avatar
      [feature] Add container run skeleton · 5f6f9415
      Swann Perarnau authored
      This is the first step in a series of patches to integrate the container
      launching code from Argus (globalos) into the NRM infrastructure.
      
      This patch creates a valid command on the CLI, and sends the necessary
      info to the NRM. We still need to take care of the actual container
      creation.
      
      Note that the CLI waits for an event indicating that the container was
      launched, at that at this point the event is never generated by the NRM.
      5f6f9415
    • Swann Perarnau's avatar
      Merge branch 'power-cli' into 'master' · e9848601
      Swann Perarnau authored
      Basic implementation of the command line interface, power API improvements
      
      See merge request !2
      e9848601
    • Swann Perarnau's avatar
      [refactor] Improve power message format · 63db906e
      Swann Perarnau authored
      This commit changes the message format for the upstream API, to use a
      json-encoded dictionary. While the format is not set in stone at this
      point, the goal is to slowly move into a proper protocol, with
      well-defined fields to the messages, and proper mechanisms to send
      commands and receive notification of their completion.
      
      The only current user of this API is the power management piece, and
      this change breaks the GRM code maintained outside of this repo. We will
      need to reconcile the two implementation once the message protocol gets
      more stable.
      
      Related to #1 and #6.
      63db906e
    • Swann Perarnau's avatar
      [feature] Implement basic CLI · bc1b7fd2
      Swann Perarnau authored
      Only supports setpower for now, and while it should work in theory, the
      current code doesn't have a way to check if the command was received, as
      the daemon never advertise the current limit.
      
      We need to change the protocol at this point.
      
      This also fixes a bug in the daemon code, that was expecting a single
      string as a message, instead of a list of parts, as zmqstream always
      receives.
      bc1b7fd2
  8. 08 Dec, 2017 4 commits