

{"id":388,"date":"2012-12-20T17:50:58","date_gmt":"2012-12-20T16:50:58","guid":{"rendered":"https:\/\/project.inria.fr\/plasma-lab\/?page_id=388"},"modified":"2015-03-12T17:08:27","modified_gmt":"2015-03-12T16:08:27","slug":"distributed-workflow","status":"publish","type":"page","link":"https:\/\/project.inria.fr\/plasma-lab\/architecture\/distributed-workflow\/","title":{"rendered":"Distributed workflow"},"content":{"rendered":"<p>Here we will have a closer look at our distributed algorithm.<\/p>\n<p><strong>PLASMA Lab<\/strong> can be set to a distributed mode when running an experiment. This mode uses a second software called <strong>PLASMA Service<\/strong>. Local or Distributed mode use the same interface. For more details on PLASMA Lab architecture, refer to <a href=\"https:\/\/project.inria.fr\/plasma-lab\/plasma-structure\/\">PLASMA Structure page<\/a>.<\/p>\n<div id=\"attachment_361\" style=\"width: 908px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/project.inria.fr\/plasma-lab\/files\/2012\/12\/sequence.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-361\" class=\"size-full wp-image-361 \" style=\"border: 0px none;\" title=\"sequence\" alt=\"\" src=\"https:\/\/project.inria.fr\/plasma-lab\/files\/2012\/12\/sequence.png\" width=\"898\" height=\"607\" srcset=\"https:\/\/project.inria.fr\/plasma-lab\/files\/2012\/12\/sequence.png 898w, https:\/\/project.inria.fr\/plasma-lab\/files\/2012\/12\/sequence-300x202.png 300w\" sizes=\"auto, (max-width: 898px) 100vw, 898px\" \/><\/a><p id=\"caption-attachment-361\" class=\"wp-caption-text\">Sequence diagram of a session between PLASMA Lab and PLASMA Service<\/p><\/div>\n<h3>\u00a0Step 0: Publishing a Restlet service<\/h3>\n<blockquote><p>PLASMA Lab:<em> I need help to run this experiment.<\/em><\/p><\/blockquote>\n<p>When launching a distributed experimentation, PLASMA Lab publish an interface on a <strong>Restlet Server<\/strong> (this server being part of PLASMA Lab code). Publishing this interface will allow other program to retrieve the interface and use its functions.<\/p>\n<p>We call <strong>Client<\/strong> a PLASMA Service instance and the <strong>Server<\/strong> the PLASMA Lab instance who published the interface.<\/p>\n<h3>Step 1: Connecting to PLASMA Lab<\/h3>\n<blockquote><p>PLASMA Service: <em>I can help you.<\/em><\/p>\n<p>PLASMA Lab: <em>Ok, here are the experiment parameters.<\/em><\/p><\/blockquote>\n<p>When a client connect itself to the server, it retrieves the RMI Interface and call the <strong>connect function<\/strong>. This function return the experiment parameters containing the model and the list of properties to check. These parameters also contains an <strong>id<\/strong> to allow clients to identify themselves.<\/p>\n<h3>Step 2: Getting a share of the work<\/h3>\n<blockquote><p>PLASMA Service: <em>I am ready to work.<\/em><\/p>\n<p>PLASMA Lab: <em>Run K simulation and check the properties.<\/em><\/p><\/blockquote>\n<p>The client then call the <strong>service ready function<\/strong>. This function will inform the server that this client is ready and will return an integer K. This integer represents the number of traces that the client has to generate. K can take several values:<\/p>\n<ul>\n<li>K = -1 means that the work is done, the client can disconnect.<\/li>\n<li>K = 0 tells the client to wait. This is used to wait for more client to connect before launching the simulation.<\/li>\n<li>K &gt; 0 tells the client to generate K execution traces and check the properties on these traces.<\/li>\n<\/ul>\n<h3>Step 3: Returning the results<\/h3>\n<blockquote><p>PLASMA Service: <em>Here are my results.<\/em><\/p><\/blockquote>\n<p>The client call the <strong>work done function<\/strong>. This function send the results to the server. The client then return to <strong>step 2<\/strong>.<\/p>\n<hr \/>\n<h3>\u00a0Work scheduling and avoiding biais<\/h3>\n<p>PLASMA Lab implements a scheduler as described in [You05a]. To summarize, because <strong>a negative trace<\/strong> (on which a property doesn not hold) <strong>is faster to check than a positive trace<\/strong> (you have to read the whole trace to see that it is a positive trace) a biais can form on a distributed Statistical Model Checking.<\/p>\n<p>Our scheduler keep the order of each task assigned to a client and only take results into account on this order. This ensure that a task launched at time <em>t<\/em> will be taken into accound before a task launched at a time &gt; <em>t.<\/em><\/p>\n<p>Moreover, this scheduler ensure that a faster client will be given more work and contribute more to the overall effort. We also implemented some ideas coming from the <strong>Slow-Start algorithm<\/strong> used in TCP to reduce the client-server communications.<\/p>","protected":false},"excerpt":{"rendered":"<p>Here we will have a closer look at our distributed algorithm. PLASMA Lab can be set to a distributed mode when running an experiment. This mode uses a second software called PLASMA Service. Local or Distributed mode use the same interface. For more details on PLASMA Lab architecture, refer to\u2026<\/p>\n<p> <a class=\"continue-reading-link\" href=\"https:\/\/project.inria.fr\/plasma-lab\/architecture\/distributed-workflow\/\"><span>Continue reading<\/span><i class=\"crycon-right-dir\"><\/i><\/a> <\/p>\n","protected":false},"author":234,"featured_media":0,"parent":60,"menu_order":0,"comment_status":"closed","ping_status":"open","template":"","meta":{"footnotes":""},"class_list":["post-388","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/project.inria.fr\/plasma-lab\/wp-json\/wp\/v2\/pages\/388","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/project.inria.fr\/plasma-lab\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/project.inria.fr\/plasma-lab\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/project.inria.fr\/plasma-lab\/wp-json\/wp\/v2\/users\/234"}],"replies":[{"embeddable":true,"href":"https:\/\/project.inria.fr\/plasma-lab\/wp-json\/wp\/v2\/comments?post=388"}],"version-history":[{"count":10,"href":"https:\/\/project.inria.fr\/plasma-lab\/wp-json\/wp\/v2\/pages\/388\/revisions"}],"predecessor-version":[{"id":1799,"href":"https:\/\/project.inria.fr\/plasma-lab\/wp-json\/wp\/v2\/pages\/388\/revisions\/1799"}],"up":[{"embeddable":true,"href":"https:\/\/project.inria.fr\/plasma-lab\/wp-json\/wp\/v2\/pages\/60"}],"wp:attachment":[{"href":"https:\/\/project.inria.fr\/plasma-lab\/wp-json\/wp\/v2\/media?parent=388"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}