diff --git a/g5k/07_fault_injection_on_processes.ipynb b/g5k/07_fault_injection_on_processes.ipynb index 334dea8c48d70c0c9e436858a946767034690fd8..bafd0a3596d3080cbe9ca51142b5f1b7c22bfe86 100644 --- a/g5k/07_fault_injection_on_processes.ipynb +++ b/g5k/07_fault_injection_on_processes.ipynb @@ -980,197 +980,6 @@ "results" ] }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Fifth example : Planning" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We can schedule every event of the experiment in one shot using a ```Planning```. Set all the cron may take time depending on the amount of events scheduled, because of that, the first event must happen at least 5 min after the ```PlanningService.deploy()```" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "reset(nconsumer = 0, nproducer = 0)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "def launch_n_actors_cmd(actor:str, n:int):\n", - " cmd = []\n", - " for _ in range(n):\n", - " cmd.append(f\"python3 /tmp/rabbitmq/{actor}.py {server_ip}\")\n", - "\n", - " string = \" & \".join(cmd)\n", - " return string" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "After 6 minutes, we will launch 20 producers (5 each 10 seconds).\n", - "\n", - "After 8 minutes, we will launch 100 consumers (20 each 10 seconds).\n", - "\n", - "After 10 minutes, we will kill all the consumers consumers (20 each 10 seconds)." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "now = datetime.now()\n", - "planning = en.Planning()\n", - "\n", - "\n", - "cmd = launch_n_actors_cmd(actor = \"producer\", n = 5)\n", - "for m in range(5):\n", - " planning.add_event(\n", - " en.StartEvent(\n", - " date=now+timedelta(minutes=6, seconds=10*m),\n", - " host=roles[\"producer\"][0],\n", - " cmd=cmd,\n", - " ns=f\"tuto_producer_{m}\", \n", - " )\n", - " )\n", - "\n", - "\n", - "cmd = launch_n_actors_cmd(actor = \"consumer\", n = 5)\n", - "for m in range(5):\n", - " (\n", - " planning.add_event(\n", - " en.StartEvent(\n", - " date=now+timedelta(minutes=8, seconds=10*m),\n", - " host=roles[\"consumer\"][0],\n", - " cmd=cmd,\n", - " ns=f\"tuto_consumer_1_{m}\", \n", - " )\n", - " ).add_event(\n", - " en.StartEvent(\n", - " date=now+timedelta(minutes=8, seconds=10*m),\n", - " host=roles[\"consumer\"][0],\n", - " cmd=cmd,\n", - " ns=f\"tuto_consumer_2_{m}\", \n", - " )\n", - " ).add_event(\n", - " en.StartEvent(\n", - " date=now+timedelta(minutes=8, seconds=10*m),\n", - " host=roles[\"consumer\"][0],\n", - " cmd=cmd,\n", - " ns=f\"tuto_consumer_3_{m}\", \n", - " )\n", - " ).add_event(\n", - " en.StartEvent(\n", - " date=now+timedelta(minutes=8, seconds=10*m),\n", - " host=roles[\"consumer\"][0],\n", - " cmd=cmd,\n", - " ns=f\"tuto_consumer_4_{m}\", \n", - " )\n", - " )\n", - " )" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "for m in range(5):\n", - " (\n", - " planning.add_event(\n", - " en.KillEvent(\n", - " date=now+timedelta(minutes=10, seconds=10*m),\n", - " host=roles[\"consumer\"][0],\n", - " ns=f\"tuto_consumer_1_{m}\", \n", - " )\n", - " ).add_event(\n", - " en.KillEvent(\n", - " date=now+timedelta(minutes=10, seconds=10*m),\n", - " host=roles[\"consumer\"][0],\n", - " ns=f\"tuto_consumer_2_{m}\", \n", - " )\n", - " ).add_event(\n", - " en.KillEvent(\n", - " date=now+timedelta(minutes=10, seconds=10*m),\n", - " host=roles[\"consumer\"][0],\n", - " ns=f\"tuto_consumer_3_{m}\", \n", - " )\n", - " ).add_event(\n", - " en.KillEvent(\n", - " date=now+timedelta(minutes=10, seconds=10*m),\n", - " host=roles[\"consumer\"][0],\n", - " ns=f\"tuto_consumer_4_{m}\", \n", - " )\n", - " )\n", - " )" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "planning_service = en.PlanningService(planning)\n", - "planning_service.deploy()" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We can have an up-to-date version of the planning, with both current alive and dead processes. The following can be used multiple times instead of ```get_queues_info()``` to see the evolution of the rabbitmq actors." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "planning_service.status()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "results = get_queues_info_for(300)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "results.plot(x=\"Time\", y=[\"nb_received_messages\", \"queue_depth\"], rot=45)\n", - "results.plot(x=\"Time\", y=[\"nb_consumers\", \"nb_producers\"], rot=45)" - ] - }, { "attachments": {}, "cell_type": "markdown",