From bf126e5a2e472c6c8d2d98488c651730c3ad97f9 Mon Sep 17 00:00:00 2001
From: plwapet <lavoisierwapet@gmail.com>
Date: Mon, 2 May 2022 19:03:27 +0200
Subject: [PATCH] making presentation for the team meeting

---
 .~lock.project_presentation.odp#              |   1 +
 README.md                                     |   0
 Relation between energy efficiencies.odp      | Bin
 Relation between energy efficiencies.pdf      | Bin
 What_do_we_want_to_optimize.pdf               | Bin
 android_keystore.jks                          | Bin
 configurations_state_on_phone.config          |   0
 connect_to_Mr_Tu                              | 244 ++++++++++++++++++
 install_battery_drainer_app.sh                |  35 +++
 install_battery_drainer_app_for_non_rooted.sh |  35 +++
 install_battery_voltage_app.sh                |   0
 install_benchmarking_app.sh                   |  29 ++-
 ...l_benchmarking_app_and_add_it_to_cgroup.sh |   0
 ...l_benchmarking_app_on_samsung_galaxy_S8.sh |  20 +-
 install_benchmarking_app_on_sony_xperia.sh    |   0
 install_interactive_benchmarking_app.sh       |   0
 ...e_benchmarking_app_on_samsung_galaxy_S8.sh |   0
 mini_shell_to_restart_app_on_SamsungS8.sh     |   0
 project_presentation.odp                      | Bin 0 -> 35931 bytes
 remove_fl_task_from_fl_group.sh               |   0
 research_problem_overview.graphml             | 210 +++++++++++++++
 21 files changed, 559 insertions(+), 15 deletions(-)
 create mode 100755 .~lock.project_presentation.odp#
 mode change 100644 => 100755 README.md
 mode change 100644 => 100755 Relation between energy efficiencies.odp
 mode change 100644 => 100755 Relation between energy efficiencies.pdf
 mode change 100644 => 100755 What_do_we_want_to_optimize.pdf
 mode change 100644 => 100755 android_keystore.jks
 mode change 100644 => 100755 configurations_state_on_phone.config
 mode change 100644 => 100755 connect_to_Mr_Tu
 create mode 100755 install_battery_drainer_app.sh
 create mode 100755 install_battery_drainer_app_for_non_rooted.sh
 mode change 100644 => 100755 install_battery_voltage_app.sh
 mode change 100644 => 100755 install_benchmarking_app.sh
 mode change 100644 => 100755 install_benchmarking_app_and_add_it_to_cgroup.sh
 mode change 100644 => 100755 install_benchmarking_app_on_samsung_galaxy_S8.sh
 mode change 100644 => 100755 install_benchmarking_app_on_sony_xperia.sh
 mode change 100644 => 100755 install_interactive_benchmarking_app.sh
 mode change 100644 => 100755 install_interactive_benchmarking_app_on_samsung_galaxy_S8.sh
 mode change 100644 => 100755 mini_shell_to_restart_app_on_SamsungS8.sh
 create mode 100755 project_presentation.odp
 mode change 100644 => 100755 remove_fl_task_from_fl_group.sh
 create mode 100755 research_problem_overview.graphml

diff --git a/.~lock.project_presentation.odp# b/.~lock.project_presentation.odp#
new file mode 100755
index 0000000..2b694bb
--- /dev/null
+++ b/.~lock.project_presentation.odp#
@@ -0,0 +1 @@
+,DESKTOP-D49H2V3/lavoi,DESKTOP-D49H2V3,02.05.2022 19:02,file:///C:/Users/lavoi/AppData/Roaming/LibreOffice/4;
\ No newline at end of file
diff --git a/README.md b/README.md
old mode 100644
new mode 100755
diff --git a/Relation between energy efficiencies.odp b/Relation between energy efficiencies.odp
old mode 100644
new mode 100755
diff --git a/Relation between energy efficiencies.pdf b/Relation between energy efficiencies.pdf
old mode 100644
new mode 100755
diff --git a/What_do_we_want_to_optimize.pdf b/What_do_we_want_to_optimize.pdf
old mode 100644
new mode 100755
diff --git a/android_keystore.jks b/android_keystore.jks
old mode 100644
new mode 100755
diff --git a/configurations_state_on_phone.config b/configurations_state_on_phone.config
old mode 100644
new mode 100755
diff --git a/connect_to_Mr_Tu b/connect_to_Mr_Tu
old mode 100644
new mode 100755
index 1724c15..67e174e
--- a/connect_to_Mr_Tu
+++ b/connect_to_Mr_Tu
@@ -641,13 +641,257 @@ echo $(date +'%d%h%y_%H_%M') ; bash install_benchmarking_app.sh
 
 
 
+To find a system file
+adb shell "find /sys/ | grep charge_counter"
+adb shell "find /sys/ | grep charging_enabled" from francis 
+/sys/devices/battery.XX/power_supply/battery/hv_charger_set  from frank
+File name in phone
 
+adb shell dumpsys battery unplug  reset
 
+File containing the maximum amout of possible battery on google pixel
+ls  /sys/devices/platform/soc/soc\:google,battery/power_supply/battery/charge_limit
+ /sys/devices/platform/soc/soc:google,charger/charge_stop_level
 
+File to deactivate battery charging on Samsung S8 
+/sys/devices/platform/battery/power_supply/battery/hv_charger_set
+max value of cc_info : 3693000
 
 
 
+Bonjour Vlad, comme compte rendu pour aujourd'hui:
 
+1 - J'ai effectué les expés dont nous avons parlé hier à savoir 1-0, 2-0 et 0-1 et 0-2 sachant que les cores exécutant les threads ont respectivement les fréquences minimum, moyennes et maximum. 
+      Les résultats sont consignés dans le dossier suivant [1]. 
+	On peut tirer comme conclusions que 
+	 a - Plus la fréquence des cores est élévée plus la consommation énergétique l'est aussi, il en est de même de la puissance absorbée [2] [3]. 
+	 b - Plus la fréquence des cores est élévée plus la workload calculées l'est également [4]. 
+	 c - Sur les little core on est beaucoup plus efficace avec la fréquence maximale [5]. 
+	 d - Sur les big core on est beaucoup plus efficace avec les la fréquence moyenne [5]. 
+	
+2 - Tu avais remarqué en réunion que sur le graphe des configurations 0-1, 0-2 , 0-3, 0-4,0-5, et 0-6 ,
+   les résultats le ration energy/workload des configuration 0-5 et 0-6 ne paraissaient pas suivre la même tendance. 
+     a - J'ai refais les tests spécialement pour ces configurations 
+     b - je me suis rendu compte que j'avais fait une erreur dans la génération des graphes pour la configuration 0-6 (je n'avais pas calculée la bonne workload). Voici le nouveau graphe des résultats [6].
+     c - Je me suis aussi rendu compte que comparé aux tests effectués la semaine passée: 
+          - les tests d'aujourd'hui (dont voici le graphe [7]) semblent beaucoup plus suivre la tendance d'efficacité croissante du nombre de thread sur les little cores, 
+	    - peut-être parce que le téléphone a eu le temps de se reposer entre temps.  
+     
+3 - Hier il m'est venu à l'esprit, a propos du samsung ceci:
+       a - Il serait convenable d'achater un téléphone, car en plus de problème lié au samsung, le google pixel que nous avons n'a pas une achitecture big-Little parfaite avec deux socket
+       b - Le problème que tu as soulevé à propos du cc_info c'est l'unité de la valeur qu'elle contient
+	   Je prévoit effectuer des expés en me basant uniquement sur le cc_info pour obtenir l'énergie 
+	    je prévois comparer les valeurs initiale et finale du cc_info et voir si j'obtient les valeurs similaires à ceux présentées lundi en réunion. 
+	    Si oui je me dis qu'on peut se limiter au cc_info pour les expés
+      c - il y'a aussi l'option consistant à dépiecer le téléphone comme j'ai dit hier. 	    
+	 
+[1] Dossier des résultats obtenus en faisant varier la fréquence des cores sur le google pixel : https://gitlab.liris.cnrs.fr/plwapet/power_tool_results/-/tree/main/google_pixel_4a_5g_varying_frequency
+[2] Courbe de la consommation énergétique, obtenue dans le même contexte que le [1] https://gitlab.liris.cnrs.fr/plwapet/power_tool_results/-/blob/main/google_pixel_4a_5g_varying_frequency/Google_pixel_energy_consumed_according_to_cpu_charge_stop_level_50.png
+[3] Courbe de la puissance absorbée, obtenue dans le même contexte que le [1] https://gitlab.liris.cnrs.fr/plwapet/power_tool_results/-/blob/main/google_pixel_4a_5g_varying_frequency/Google_pixel_power_absorbed_according_to_cpu_charge_stop_level_50.png
+[4] Courbe de la workload calculée, obtenue dans le même contexte que le [1] https://gitlab.liris.cnrs.fr/plwapet/power_tool_results/-/blob/main/google_pixel_4a_5g_varying_frequency/Google_pixel_workload_according_to_cpu_charge_stop_level_50.png
+[5] Courbe de l'efficacité énergétique, obtenue dans le même contexte que le [1] https://gitlab.liris.cnrs.fr/plwapet/power_tool_results/-/blob/main/google_pixel_4a_5g_varying_frequency/Google_pixel_ratio_energy_by_workload_according_to_cpu_charge_stop_level_50.png
+[6] Graphe corrigé du ratio energy/workload effectée pour valider les précédents tests sur le google pixel.  https://gitlab.liris.cnrs.fr/plwapet/power_tool_results/-/blob/main/google_pixel_varying_the_number_of_thread/Google_pixel_ratio_energy_by_workload_according_to_cpu_charge_stop_level_50.png
+[7] Graphe avec les nouvelles valeurs du ratio energy/workload pour les configuration 0-5 et 0-6. https://gitlab.liris.cnrs.fr/plwapet/power_tool_results/-/blob/main/google_pixel_varying_the_number_of_thread/Google_pixel_ratio_energy_by_workload_according_to_cpu_charge_stop_level_50_validation_of_0_5_0_6.png
+
+
+Bonne soirée Vlad. 
+
+
+
+number_of_cpus = ["mouse",  "idle"       ,"1-0",  "2-0",  "3-0",       "4-0", "5-0" , "5-0.", "6-0", "6-0.",                          "6-1",    "6-2"             ,"0-1", "0-2",              "1-1",  "2-1", "3-1",      "1-2" ]                                                        
+phone_energy= [ 1308, 11047.73,       29285.405, 38598.14, 46077.78,    53629.51, 58756.40, 56820.57,   66053.62,  64353.13,                 106210.78 , 123823.21,       66877.5,115136.69,        73048.75, 79000.24 , 92143.93     , 96571.58 ]                                                                                                   
+phone_power = [ 40.16, 336.07,        879.245 , 1146.12,  1357.74  ,   1572.76, 1718.15,    1661.97,   1918.21,   1871.11,                2970.56 ,  3397.90,          1938.45,3179.93,        2106.08,    2267.14 , 2614.01   , 2717.37]                  
+workload  = [ 0.1,         0.9,        1.55,    3.368,  4.9563   ,     6.906,  7.3213,     9.223199,   7.321324,   11.1178,                       17.08829 ,  21.384681,       6.7442, 13.210451922,     8.47040,  10.3032,    12.38267        , 12.72335]          
+
+Pour la suite, la best effort task est efficace avec la freq max mais doit-elle empiéter sur les autre task. Evaluer l'efficacité avec l'interactive et des deux à la fois.
+
+ 
+Shalom Kevin, Avant de passer la nuit où j'habite. Dis moi, dans tes prières, est ce que tu invoques uniquement l'Eternel, ou pas ?
+
+Je suis désolé Kevin, je ne peux donc pas te permettre de passer la nuit où j'habite. Deutéronome 7:26 (Version Vulgate)
+
+
+
+Bonjour Vlad comme compte rendu d'aujourd'hui, 
+
+1 - J'ai pris en compte tes remarques et pour l'instant voici ce que je peux y répondre: 
+	a - En effet comme tu l'as remarqué, il semble beaucoup plus efficace sur les little cores de fixer la fréquence et d'augmenter le nombre de thread de la Best effort task. 
+	    J'ai pris note: je tâcherai si possible de tester la configuration 1-1  en fixant les deux cores à la fois et en les fixant tour à tour 
+	       puisqu'on peut fixer isolément les fréquences sur deux sockets différents. 
+      b -  Afin de voir si cette tendance  observée sur les configuration 1-0 et 2-0 se vérifie, 
+	       il m'est venue à l'esprit de tester la configuration 3-0 avec les fréquence fixées	
+	c - Je  refléchirai aussi au modèle de téléphone à acheter, et si possible je te dirai. 
+	d - Je crois avoir déjà mesuré à la fois la consommation du powermeter et la jauge du cc_info. les résultats sont consigné dans ce fichier [1]. Et en considérant les deux valeur, j'ai présenté récemment en réunion le graphe [1]  
+[1] fichier des résultats obtenus suite aux expés sur le samsung https://gitlab.liris.cnrs.fr/plwapet/power_tool_results/-/blob/main/samsung_galaxy_s8/raw_resut_and_powertool_stats_battery_fully_charged_cc_info.txt
+[2] Energy consommée par le samsung calculée en considérant le cc_info et le power_meter https://gitlab.liris.cnrs.fr/plwapet/power_tool_results/-/blob/main/samsung_galaxy_s8/Samsung_Gal_S8_energy_consumed_according_to_cpu.png 
+
+
+2- Hier je pensais avoir testé la configuration 0-2 avec les fréquences Mid et Min des big cores, 
+Or il se trouve que j'avais seulement fixé la fréquence d'un seul big core et non des deux. 
 
+Aujourd'hui j'ai donc refait les expés en fixant la fréquence de chacun des deux big cores; chacun à son min et à son mid respectivement.
+J'ai mis à jour le fichier des résultats [1] ainsi que le graphe de l'efficacité énergétique des configurations testées [2]
+Comme résultats, 
+  a- le constat est le même que précédemment: Les big cores sont beaucoup plus efficaces lorsque leur fréquence est moyenne. 
+  b- Il est beaucoup plus efficace de réduire la fréquence des deux big cores en même temps (configuration 0-2h et 0-2m)
+[1] Résultats obtenus avec les configuration 0-2 ajoutées et dans lesquelles les fréquences des deux big cores ont été touchées https://gitlab.liris.cnrs.fr/plwapet/power_tool_results/-/blob/main/google_pixel_4a_5g_varying_frequency/raw_resut_and_powertool_stats.txt
+[2] Nouveau graphe du ration energy/workload obtenu dans les mêmes conditions que le [1] https://gitlab.liris.cnrs.fr/plwapet/power_tool_results/-/blob/main/google_pixel_4a_5g_varying_frequency/Google_pixel_ratio_energy_by_workload_according_to_cpu_charge_stop_level_50.png
 
 
+3- J'ai aussi fait le test dont je parlais sur le samsung,  en mesurant seulement les valeurs initiales et finales du cc_info sans faire intervenir le powermeter.
+    D'après les résultats obtenus [1], 
+     - les valeurs du même ordre de grandeur. 
+     - Mais ces valeurs me semblent être beaucoup plus proches de la réalité.
+       car l'énergie du big core est presque 3 fois supérieure à celle du little
+  Les résultat sont consigné dans ce fichier [2]
+[1] Energy consommée par le samsung lorsqu'on considère uniquement le cc_info.  https://gitlab.liris.cnrs.fr/plwapet/power_tool_results/-/blob/main/samsung_galaxy_s8/Samsung_Gal_S8_energy_consumed_according_to_cpu_only_cc_info_variations.png
+[2] fichier des résultats obtenus suite aux expés sur le samsung https://gitlab.liris.cnrs.fr/plwapet/power_tool_results/-/blob/main/samsung_galaxy_s8/raw_resut_and_powertool_stats_battery_fully_charged_cc_info.txt
+
+
+
+
+
+
+
+
+   
+ 4 - Donc demain je prévois 
+   - effectuer les tests de variation de fréquence sur les configurations 2-1 et 1-2 si possible.
+   - rechercher le modèle du téléphone à acheter avec la bonne architecture et compatible lineage.
+   - rechercher le fichier relatif au chargeur dans le samsung.
+   - envisager de programmer les mesure pour le tests utilsant le cc_info
+
+   
+   
+      - grab la zone en surplus sur le graphe de l'éval 1-1. Et soustraire sur les données.
+      - effectuer les tests de variation de fréquence sur les configurations 1-1, 3-0, 6-0 si possible.
+      - comparer les résultats du cc_info avec l'API
+   - parler à Vlad de l'idée de repartition des tâches sur plusieurs thread 
+   - commender les banana cables
+   
+   
+   Salut Vlad, comme compte rendu d'aujourd'hui
+   1 - sur le samsung, j'ai effectué le test que tu as suggéré, à savoir
+       - brancher le powermeter sur le téléphone en mode idle pendant 10 minutes
+	 - et prendre des mesures à la fois sur le powermeter et sur le fichier cc_info. 
+   Comme résultat 
+       - Le powermeter alimente le téléphone de 90641.47
+       - Le cc_info augmente de  74000 (start = 3660000    end = 3734000   , delta = 74000)
+	 - ce qui suggère qu'en mode idle, le téléphone a tout de même consommé 16641.47. 
+	 - Ce qui avoisine les 15437.75 calculées en prenant en compte cc_info et le powermeter.  
+	    Les résultats sont consignés dans le fichier [1]
+   
+   Conclusion cc_info me semble fiable lorsqu'il est utilisé avec le powermeter, quelque soit les configurations car en mode idle cc_info seul ne suffit pas. 
+     [1] fichier contenant les derniers résultats du samsung en considérant le fichier cc_info https://gitlab.liris.cnrs.fr/plwapet/power_tool_results/-/blob/main/samsung_galaxy_s8/raw_resut_and_powertool_stats_battery_fully_charged_cc_info.txt
+
+
+  2 - Juste pour information, les résultats que nous avons avec le samsung en utilisant cc_info et le powermeter semblent cohérent avec l'estimation de leur API dumpsys battery stat.  
+	- 17.2 pour la configuration 1-0, 59 pour la configuration 0-1, 
+	- soit environs trois fois la configuration 1-0
+    Conclusion l'API "dumpsys batterystat" de Lineage OS, semble avoir des soucis dans leur estimationsde l'énergie consommée. 
+   3 - Je prévois effectué les test que tu as demandé sur le Samsung la semaine prochaine. 
+    Mais je me dis qu'il n'y aura pas de différence avec ceux déjà fait avec leur API. 
+   [1] fichier contenant les derniers résultats du samsung en considérant le fichier cc_info https://gitlab.liris.cnrs.fr/plwapet/power_tool_results/-/blob/main/samsung_galaxy_s8/raw_resut_and_powertool_stats_battery_fully_charged_cc_info.txt
+   [2] Lien vers les anciens résultats estimée avec l'API dumpsys battery stats de samsung. https://drive.google.com/drive/folders/1TKK24Jq3Eb-GCJtPweW9RoImJrp2xl1Y
+   
+   4 - J'ai aussi réalisé les expés que tu as suggéré hier, à savoir la configuration 1-1
+       - d'une part avec les deux cores à la fréquence min et à la fréquence "half", 1m-1m et 1h-1h
+       - d'autre part avec uniquement le big core aux fréquence min et aux fréquence "half" , et 1-1m et 1-1h
+	  Voici le graphe de résulats [3]
+      On peut remarquer que: 
+	 - de manière générale  est beaucoup plus efficace en fixant les fréquences de deux cores à la fois. 
+	 - Je m'attendais à ce que la bonne configuration soit lorsque le little core est au max et le big au half, mais ce n'est pas le cas, c'est plutôt half-half. 
+	       Apparemment le fait que les deux sockets soit occupés influence l'efficacité du little qui devient efficace au half et non plus au max. 
+	
+	Je peux encore tester 2-1  et 1-2 avec les configurations Min et halh des cores.  pour valider cela 
+   
+   [3] Ratio Energy/workload obtenu, avec les configuration supplémentaires 1m-1m et 1h-1h, 1-1m et 1-1h  https://gitlab.liris.cnrs.fr/plwapet/power_tool_results/-/blob/main/google_pixel_4a_5g_varying_frequency/Google_pixel_ratio_energy_by_workload_according_to_cpu_charge_stop_level_50.png 
+
+   5- J'y ai aussi testé les configuration 3m-0, 3h-0 pour voir si la tendance que tu avais observé entre  1-0, 2-0 se vérifiait aussi sur 3-0
+	 En conclusion: 
+		 - la tendance s'observe aussi sur la configuration 3-O:  lorsqu'on augmente le nombre de thread sur les littles Core en fixant la fréquence, 
+		 l'énergie consommée, ne varie pas beaucoup mais la workload calculée augmente grandement.	
+             - Je me dis que ce serait une bonne idée de répartir le thread de la Best Effort sur le beaucoup de little core pour gagner en efficacité. 
+                   C'est une idée que j'émets au vu des résultats. 		 
+   [3] Ratio Energy/workload obtenu, avec les configuration supplémentaires 3m-0, 3h-0   https://gitlab.liris.cnrs.fr/plwapet/power_tool_results/-/blob/main/google_pixel_4a_5g_varying_frequency/Google_pixel_ratio_energy_by_workload_according_to_cpu_charge_stop_level_50.png
+	 
+	 
+	 
+   
+   
+   Bonjour Vlad, je viens déclarer la perte de quelques accessoire du powermonitor. 
+   Ce sont les accessoire que l'on utilise au cas où le téléphone a été dépiécé. 
+   Par conséquent, pour l'instant je ne les utilisais pas et je les avais mis 
+   dans le carton d'achat de l'appareil et déposé dans le magasin de notre colocation. 
+   Mais un des colocataire a dû jeter ce carton par inadvertance. 
+   
+   Après ces connecteurs me semblent remplacable, donc au cas où on en aurait besoin, nous pouvons les acheter à nouveau [1].
+   [1] nom de l'accessoire égaré : minigrabber to banana plug 
+   https://www.google.com/search?q=minigrabber+to+banana+plug&client=firefox-b-d&sxsrf=ALiCzsZg4F5QtXtyw2beWn1IZJRCiiD3Sw%3A1651181225762&ei=qQZrYpyQLtaX9u8PsNyx0A8&oq=minigrabber+ba&gs_lcp=Cgdnd3Mtd2l6EAMYADIGCAAQFhAeOgcIABBHELADOgQIIxAnOgsILhDHARCjAhCRAjoLCC4QxwEQ0QMQkQI6CwguEIAEEMcBEKMCOgUIABCABDoICC4QgAQQ1AI6BQguEIAEOg4ILhDHARCjAhDUAhCRAjoHCCMQ6gIQJzoFCAAQkQI6DgguEMcBENEDENQCEJECOg4ILhCABBDHARCjAhDUAjoOCC4QgAQQxwEQrwEQ1AI6DgguEIAEEMcBENEDENQCOgsILhCABBDHARDRAzoFCAAQywE6CwguEMcBEK8BEMsBOgcIABAKEMsBOg0ILhDHARCvARAKEMsBOgcILhAKEMsBOggIABDJAxDLAToECAAQCjoECAAQHjoICAAQFhAKEB46BQghEKABSgQIQRgASgQIRhgAUL0JWKs9YPtHaAdwAXgBgAHJCYgBohmSAQo2LjEwLjEuNy0xmAEAoAEBsAEKyAEIwAEB&sclient=gws-wiz   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   Shalom Kevin, 
+   En plus d'avoir la foi au sacrifice et à la résurrection du Seigneur Jésus Christ qui par sa grâce accorde le salut de l'âme,
+   j'essaie du mieux que je peux de repecter la Loi du Dieu d'Israël y compris Deutéronome 6:13, Deutéronome 13:4, Deutéronome 7:26 et leur contexte.
+   Par conséquent si tu invoques dans tes prières une entité autre que l'Eternel, 
+   je ne pourrais pas te laisser passer la nuit auprès de moi où j'habite pour l'instant. 
+      
+   Salut Izedine, j'ai oublié de te dire quelque chose tout à l'heure.
+    En fait, il peut arriver que tu sonnes à la porte et que sois présent mais que je n'ouvre pas. 
+    Il faudra alors comprendre que je suis vraiment très occupé, et je prie donc de m'excuser si cela arrive. 
+    Mais si j'ai la possibilité d'ouvrir, j'ouvrirai.
+   C'est ce qu'il fallait que j'ajoute. 
+   
+   Aussi tu t'es plein que je ne vous dis jamais "bon appetit" lorsque tu manges. 
+   Toutes mes excuses si cela vous dérange. Je peux par contre dire "que le Seigneur Yéshoua bénisse votre repas". Accepterai tu que je te dise cela lorsque tu manges?
+      
+    
+    
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   Shalom mama,  
+   Gloire soit rendue à Notre Père, Papa Yahweh pour cette demande de pardon que tu as effectuée. 
+   Je prie afin que le Seigneur Jésus Christ te pardonne ce péché de détournement de budget. 
+   Je partage aussi avec toi Deutéronomes 8:7-10 
+   Car Yahweh, ton Dieu, va te faire entrer dans un bon pays, pays de torrents, de sources et d’eaux profondes, qui jaillissent dans les vallées et les montagnes ; 
+   pays de froment, d’orge, de vignes, de figuiers et de grenadiers ; pays d’oliviers, d’huile et de miel ;
+   pays où tu mangeras du pain en abondance, où tu ne manqueras de rien ; pays dont les pierres sont du fer, et des montagnes duquel tu tireras l’airain.
+   Tu mangeras et te rassasieras, et tu béniras Yahweh, ton Dieu, pour le bon pays qu’il t’a donné. 
+   Bonne préparation de Shabbat. 
+         Car Yahweh ton Dieu, t'introduira dans une terre bonne, terre de ruisseaux, de fontaines dans les champs et les montagnes de laquelle jaillissent les sources de fleuves. 
+
+ Une terre de blé, d'orge et de vignes; dans laquelle naissent  les figuiers, les grenadiers  et les oliviers;  terre d'huile et de miel. 
+
+   Où tu mangeras ton pain sans en manquer jamais, où tu jouiras de toute chose.  dont les pierres sont du fer et de ses montagnes on exploite des mines d'airain. 
+
+   Afin que lorsque tu auras mangé et que tu te seras rassasiée tu bénisse Yahweh ton Dieu, pour cette terre excellente qu'il t'a donné.
+   
+   
+   Shalom Kevin, je t'en prie, remercions l'Eternel pour cette grâce qu'il m'accorde de pouvoir te répondre. 
+   Je te souhaite aussi un bon séjour sur Lyon si tu ne comptes plus passer à la colocation ne serait ce que mercredi. 
+   Je te souhaite aussi une bonne journée dans la Paix du Seigneur Jésus Christ. 
+   
+   Bonjour Vlad, désolé pour la latence, j'ai eu un imprévu. 
+   Je crois t'avoir compris concernant l'expé sur le samsung en mode idle. 
+   Je prévois l'effectuer tout à l'heure. 
+   
+   
+   
+   
\ No newline at end of file
diff --git a/install_battery_drainer_app.sh b/install_battery_drainer_app.sh
new file mode 100755
index 0000000..2893a6b
--- /dev/null
+++ b/install_battery_drainer_app.sh
@@ -0,0 +1,35 @@
+#!/bin/bash
+
+
+#APK_PATH__WINDOWS_SYNTAX="C:\Users\lavoi\opportunist_task_on_android\benchmarking_app_to_test_big_cores\app\debug\app-debug.apk"
+ APK_PATH__WINDOWS_SYNTAX="C:\Users\lavoi\opportunist_task_on_android\git_repositories\app_to_drain_battery.apk"
+adb='/mnt/c/Program Files/Android/platform-tools_r33.0.1-windows/platform-tools/adb.exe'
+
+ls "$adb"
+
+"${adb}" root
+
+"$adb" shell  "echo \"-----installing app"
+
+
+"$adb" uninstall com.opportunistask.scheduling.benchmarking_app_to_test_big_cores  
+
+
+echo "---- before installing!!"
+#"$adb" install /mnt/c/Users/lavoi/opportunist_task_on_android/benchmarking_app_to_test_big_cores/app/debug/app-debug.apk
+"$adb" install "$APK_PATH__WINDOWS_SYNTAX"
+echo "------ after installation"
+
+"$adb" shell pm grant com.opportunistask.scheduling.benchmarking_app_to_test_big_cores android.permission.DUMP   
+"$adb" shell pm grant com.opportunistask.scheduling.benchmarking_app_to_test_big_cores android.permission.PACKAGE_USAGE_STATS  
+  
+sleep 3
+
+"$adb" shell  "echo \"-----starting the app\"
+        sleep 1
+        am start -n com.opportunistask.scheduling.benchmarking_app_to_test_big_cores/com.opportunistask.scheduling.benchmarking_app_to_test_big_cores.MainActivity"
+        sleep 1
+APP_PID=$("$adb" shell "ps -A | grep com.opportunistask.scheduling.benchmarking_app_to_test_big_cores" | awk '{ print $2 }')
+echo "----- app_pid =  $APP_PID " 
+
+
diff --git a/install_battery_drainer_app_for_non_rooted.sh b/install_battery_drainer_app_for_non_rooted.sh
new file mode 100755
index 0000000..929a7fc
--- /dev/null
+++ b/install_battery_drainer_app_for_non_rooted.sh
@@ -0,0 +1,35 @@
+#!/bin/bash
+
+
+#APK_PATH__WINDOWS_SYNTAX="C:\Users\lavoi\opportunist_task_on_android\benchmarking_app_to_test_big_cores\app\debug\app-debug.apk"
+ APK_PATH__WINDOWS_SYNTAX="C:\Users\lavoi\opportunist_task_on_android\git_repositories\app_to_drain_battery_on_non_rooted_phone.apk"
+adb='/mnt/c/Program Files/Android/platform-tools_r33.0.1-windows/platform-tools/adb.exe'
+
+ls "$adb"
+
+"${adb}" root
+
+"$adb" shell  "echo \"-----installing app"
+
+
+"$adb" uninstall com.opportunistask.scheduling.benchmarking_app_to_test_big_cores  
+
+
+echo "---- before installing!!"
+#"$adb" install /mnt/c/Users/lavoi/opportunist_task_on_android/benchmarking_app_to_test_big_cores/app/debug/app-debug.apk
+"$adb" install "$APK_PATH__WINDOWS_SYNTAX"
+echo "------ after installation"
+
+"$adb" shell pm grant com.opportunistask.scheduling.benchmarking_app_to_test_big_cores android.permission.DUMP   
+"$adb" shell pm grant com.opportunistask.scheduling.benchmarking_app_to_test_big_cores android.permission.PACKAGE_USAGE_STATS  
+  
+sleep 3
+
+"$adb" shell  "echo \"-----starting the app\"
+        sleep 1
+        am start -n com.opportunistask.scheduling.benchmarking_app_to_test_big_cores/com.opportunistask.scheduling.benchmarking_app_to_test_big_cores.MainActivity"
+        sleep 1
+APP_PID=$("$adb" shell "ps -A | grep com.opportunistask.scheduling.benchmarking_app_to_test_big_cores" | awk '{ print $2 }')
+echo "----- app_pid =  $APP_PID " 
+
+
diff --git a/install_battery_voltage_app.sh b/install_battery_voltage_app.sh
old mode 100644
new mode 100755
diff --git a/install_benchmarking_app.sh b/install_benchmarking_app.sh
old mode 100644
new mode 100755
index 5fb408b..be1ca4d
--- a/install_benchmarking_app.sh
+++ b/install_benchmarking_app.sh
@@ -1,22 +1,35 @@
 #!/bin/bash
-adb root
 
-adb shell  "echo \"-----installing app"
 
-adb uninstall com.opportunistask.scheduling.benchmarking_app_to_test_big_cores  
+#APK_PATH__WINDOWS_SYNTAX="C:\Users\lavoi\opportunist_task_on_android\benchmarking_app_to_test_big_cores\app\debug\app-debug.apk"
+ APK_PATH__WINDOWS_SYNTAX="C:\Users\lavoi\opportunist_task_on_android\git_repositories\benchmarking_app_to_test_big_cores\app\debug\app-debug.apk"
+adb='/mnt/c/Program Files/Android/platform-tools_r33.0.1-windows/platform-tools/adb.exe'
 
-adb install /home/patrick/opportunistic_tasks_android/Experiments_of_task_on_CPUs/benchmarking_app_to_test_big_cores/app/debug/app-debug.apk
+ls "$adb"
 
-adb shell pm grant com.opportunistask.scheduling.benchmarking_app_to_test_big_cores android.permission.DUMP   
-adb shell pm grant com.opportunistask.scheduling.benchmarking_app_to_test_big_cores android.permission.PACKAGE_USAGE_STATS  
+"${adb}" root
+
+"$adb" shell  "echo \"-----installing app"
+
+
+"$adb" uninstall com.opportunistask.scheduling.benchmarking_app_to_test_big_cores  
+
+
+echo "---- before installing!!"
+#"$adb" install /mnt/c/Users/lavoi/opportunist_task_on_android/benchmarking_app_to_test_big_cores/app/debug/app-debug.apk
+"$adb" install "$APK_PATH__WINDOWS_SYNTAX"
+echo "------ after installation"
+
+"$adb" shell pm grant com.opportunistask.scheduling.benchmarking_app_to_test_big_cores android.permission.DUMP   
+"$adb" shell pm grant com.opportunistask.scheduling.benchmarking_app_to_test_big_cores android.permission.PACKAGE_USAGE_STATS  
   
 sleep 3
 
-adb shell  "echo \"-----starting the app\"
+"$adb" shell  "echo \"-----starting the app\"
         sleep 1
         am start -n com.opportunistask.scheduling.benchmarking_app_to_test_big_cores/com.opportunistask.scheduling.benchmarking_app_to_test_big_cores.MainActivity"
         sleep 1
-APP_PID=$(adb shell "ps -A | grep com.opportunistask.scheduling.benchmarking_app_to_test_big_cores" | awk '{ print $2 }')
+APP_PID=$("$adb" shell "ps -A | grep com.opportunistask.scheduling.benchmarking_app_to_test_big_cores" | awk '{ print $2 }')
 echo "----- app_pid =  $APP_PID " 
 
 
diff --git a/install_benchmarking_app_and_add_it_to_cgroup.sh b/install_benchmarking_app_and_add_it_to_cgroup.sh
old mode 100644
new mode 100755
diff --git a/install_benchmarking_app_on_samsung_galaxy_S8.sh b/install_benchmarking_app_on_samsung_galaxy_S8.sh
old mode 100644
new mode 100755
index 063f3d4..4343b3d
--- a/install_benchmarking_app_on_samsung_galaxy_S8.sh
+++ b/install_benchmarking_app_on_samsung_galaxy_S8.sh
@@ -1,22 +1,28 @@
 #!/bin/bash
 
-adb shell  "echo \"-----installing app"
 
-adb uninstall com.opportunistask.scheduling.benchmarking_app_to_test_big_cores  
+ APK_PATH__WINDOWS_SYNTAX="C:\Users\lavoi\opportunist_task_on_android\git_repositories\benchmarking_app_to_test_big_cores\app\debug\app-debug.apk"
+adb='/mnt/c/Program Files/Android/platform-tools_r33.0.1-windows/platform-tools/adb.exe'
 
-adb install /home/patrick/opportunistic_tasks_android/Experiments_of_task_on_CPUs/benchmarking_app_to_test_big_cores/app/debug/app-debug.apk
+ls "$adb"
 
+"$adb" shell  "echo \"-----installing app"
 
-adb shell "su -c pm grant com.opportunistask.scheduling.benchmarking_app_to_test_big_cores android.permission.DUMP"   
-adb shell "su -c pm grant com.opportunistask.scheduling.benchmarking_app_to_test_big_cores android.permission.PACKAGE_USAGE_STATS"  
+"$adb" uninstall com.opportunistask.scheduling.benchmarking_app_to_test_big_cores  
+
+"$adb" install $APK_PATH__WINDOWS_SYNTAX
+
+
+"$adb" shell "su -c pm grant com.opportunistask.scheduling.benchmarking_app_to_test_big_cores android.permission.DUMP"   
+"$adb" shell "su -c pm grant com.opportunistask.scheduling.benchmarking_app_to_test_big_cores android.permission.PACKAGE_USAGE_STATS"  
   
 sleep 3
 
-adb shell  " echo \"-----starting the app\";
+"$adb" shell  " echo \"-----starting the app\";
         sleep 5;
         am start -n com.opportunistask.scheduling.benchmarking_app_to_test_big_cores/com.opportunistask.scheduling.benchmarking_app_to_test_big_cores.MainActivity"
         sleep 1
-APP_PID=$(adb shell "ps | grep com.opportunistask.scheduling.benchmarking_app_to_test_big_cores" | awk '{ print $2 }')
+APP_PID=$("$adb" shell "ps | grep com.opportunistask.scheduling.benchmarking_app_to_test_big_cores" | awk '{ print $2 }')
 echo "----- app_pid =  $APP_PID " 
 
 #adb shell "am start -n com.opportunistask.scheduling.benchmarking_app_to_test_big_cores/com.opportunistask.scheduling.benchmarking_app_to_test_big_cores.MainActivity"
diff --git a/install_benchmarking_app_on_sony_xperia.sh b/install_benchmarking_app_on_sony_xperia.sh
old mode 100644
new mode 100755
diff --git a/install_interactive_benchmarking_app.sh b/install_interactive_benchmarking_app.sh
old mode 100644
new mode 100755
diff --git a/install_interactive_benchmarking_app_on_samsung_galaxy_S8.sh b/install_interactive_benchmarking_app_on_samsung_galaxy_S8.sh
old mode 100644
new mode 100755
diff --git a/mini_shell_to_restart_app_on_SamsungS8.sh b/mini_shell_to_restart_app_on_SamsungS8.sh
old mode 100644
new mode 100755
diff --git a/project_presentation.odp b/project_presentation.odp
new file mode 100755
index 0000000000000000000000000000000000000000..19d5cf2664e99f34cd626badeeb7b9fb8ccc347f
GIT binary patch
literal 35931
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

literal 0
HcmV?d00001

diff --git a/remove_fl_task_from_fl_group.sh b/remove_fl_task_from_fl_group.sh
old mode 100644
new mode 100755
diff --git a/research_problem_overview.graphml b/research_problem_overview.graphml
new file mode 100755
index 0000000..2deb1d9
--- /dev/null
+++ b/research_problem_overview.graphml
@@ -0,0 +1,210 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<graphml xmlns="http://graphml.graphdrawing.org/xmlns" xmlns:java="http://www.yworks.com/xml/yfiles-common/1.0/java" xmlns:sys="http://www.yworks.com/xml/yfiles-common/markup/primitives/2.0" xmlns:x="http://www.yworks.com/xml/yfiles-common/markup/2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:y="http://www.yworks.com/xml/graphml" xmlns:yed="http://www.yworks.com/xml/yed/3" xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns http://www.yworks.com/xml/schema/graphml/1.1/ygraphml.xsd">
+  <!--Created by yEd 3.22-->
+  <key attr.name="Description" attr.type="string" for="graph" id="d0"/>
+  <key for="port" id="d1" yfiles.type="portgraphics"/>
+  <key for="port" id="d2" yfiles.type="portgeometry"/>
+  <key for="port" id="d3" yfiles.type="portuserdata"/>
+  <key attr.name="url" attr.type="string" for="node" id="d4"/>
+  <key attr.name="description" attr.type="string" for="node" id="d5"/>
+  <key for="node" id="d6" yfiles.type="nodegraphics"/>
+  <key for="graphml" id="d7" yfiles.type="resources"/>
+  <key attr.name="url" attr.type="string" for="edge" id="d8"/>
+  <key attr.name="description" attr.type="string" for="edge" id="d9"/>
+  <key for="edge" id="d10" yfiles.type="edgegraphics"/>
+  <graph edgedefault="directed" id="G">
+    <data key="d0"/>
+    <node id="n0">
+      <data key="d5"/>
+      <data key="d6">
+        <y:ShapeNode>
+          <y:Geometry height="37.0" width="178.0" x="323.0" y="161.0"/>
+          <y:Fill color="#E7DFBE" transparent="false"/>
+          <y:BorderStyle hasColor="false" raised="false" type="line" width="1.0"/>
+          <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="4.0" x="87.0" y="16.5">
+            <y:LabelModel>
+              <y:SmartNodeLabelModel distance="4.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+            </y:ModelParameter>
+          </y:NodeLabel>
+          <y:Shape type="rectangle"/>
+        </y:ShapeNode>
+      </data>
+    </node>
+    <node id="n1">
+      <data key="d5"/>
+      <data key="d6">
+        <y:ShapeNode>
+          <y:Geometry height="72.0" width="20.0" x="1135.0" y="181.0"/>
+          <y:Fill hasColor="false" transparent="false"/>
+          <y:BorderStyle hasColor="false" raised="false" type="line" width="1.0"/>
+          <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="133.427734375" x="-56.7138671875" xml:space="preserve" y="26.6494140625">Federated Learning App<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
+          <y:Shape type="rectangle"/>
+        </y:ShapeNode>
+      </data>
+    </node>
+    <node id="n2">
+      <data key="d5"/>
+      <data key="d6">
+        <y:ShapeNode>
+          <y:Geometry height="72.0" width="20.0" x="402.0" y="143.5"/>
+          <y:Fill hasColor="false" transparent="false"/>
+          <y:BorderStyle hasColor="false" raised="false" type="line" width="1.0"/>
+          <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="133.427734375" x="-56.7138671875" xml:space="preserve" y="26.6494140625">Federated Learning App<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
+          <y:Shape type="rectangle"/>
+        </y:ShapeNode>
+      </data>
+    </node>
+    <node id="n3">
+      <data key="d5"/>
+      <data key="d6">
+        <y:ShapeNode>
+          <y:Geometry height="37.0" width="221.0" x="328.0" y="315.0"/>
+          <y:Fill color="#DDD3A4" transparent="false"/>
+          <y:BorderStyle hasColor="false" raised="false" type="line" width="1.0"/>
+          <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="4.0" x="108.5" y="16.5">
+            <y:LabelModel>
+              <y:SmartNodeLabelModel distance="4.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+            </y:ModelParameter>
+          </y:NodeLabel>
+          <y:Shape type="rectangle"/>
+        </y:ShapeNode>
+      </data>
+    </node>
+    <node id="n4">
+      <data key="d5"/>
+      <data key="d6">
+        <y:ShapeNode>
+          <y:Geometry height="127.0" width="15.0" x="380.0" y="273.5"/>
+          <y:Fill hasColor="false" transparent="false"/>
+          <y:BorderStyle hasColor="false" raised="false" type="line" width="1.0"/>
+          <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="81.37890625" x="-33.189453125" xml:space="preserve" y="54.1494140625">Android kernel<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
+          <y:Shape type="rectangle"/>
+        </y:ShapeNode>
+      </data>
+    </node>
+    <node id="n5">
+      <data key="d5"/>
+      <data key="d6">
+        <y:ShapeNode>
+          <y:Geometry height="30.0" width="30.0" x="293.0" y="241.0"/>
+          <y:Fill hasColor="false" transparent="false"/>
+          <y:BorderStyle color="#000000" raised="false" type="line" width="1.0"/>
+          <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="4.0" x="13.0" y="13.0">
+            <y:LabelModel>
+              <y:SmartNodeLabelModel distance="4.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+            </y:ModelParameter>
+          </y:NodeLabel>
+          <y:Shape type="rectangle"/>
+        </y:ShapeNode>
+      </data>
+    </node>
+    <node id="n6">
+      <data key="d5"/>
+      <data key="d6">
+        <y:ShapeNode>
+          <y:Geometry height="30.0" width="30.0" x="747.0" y="245.0"/>
+          <y:Fill hasColor="false" transparent="false"/>
+          <y:BorderStyle color="#000000" raised="false" type="line" width="1.0"/>
+          <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="4.0" x="13.0" y="13.0">
+            <y:LabelModel>
+              <y:SmartNodeLabelModel distance="4.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+            </y:ModelParameter>
+          </y:NodeLabel>
+          <y:Shape type="rectangle"/>
+        </y:ShapeNode>
+      </data>
+    </node>
+    <node id="n7">
+      <data key="d5"/>
+      <data key="d6">
+        <y:ShapeNode>
+          <y:Geometry height="72.0" width="20.0" x="687.0" y="206.0"/>
+          <y:Fill hasColor="false" transparent="false"/>
+          <y:BorderStyle hasColor="false" raised="false" type="line" width="1.0"/>
+          <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="64.69140625" x="-22.345703125" xml:space="preserve" y="26.6494140625">User space<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
+          <y:Shape type="rectangle"/>
+        </y:ShapeNode>
+      </data>
+    </node>
+    <node id="n8">
+      <data key="d5"/>
+      <data key="d6">
+        <y:ShapeNode>
+          <y:Geometry height="42.0" width="299.0" x="328.0" y="434.0"/>
+          <y:Fill color="#CFBC66" transparent="false"/>
+          <y:BorderStyle hasColor="false" raised="false" type="line" width="1.0"/>
+          <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="4.0" x="147.5" y="19.0">
+            <y:LabelModel>
+              <y:SmartNodeLabelModel distance="4.0"/>
+            </y:LabelModel>
+            <y:ModelParameter>
+              <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+            </y:ModelParameter>
+          </y:NodeLabel>
+          <y:Shape type="rectangle"/>
+        </y:ShapeNode>
+      </data>
+    </node>
+    <node id="n9">
+      <data key="d5"/>
+      <data key="d6">
+        <y:ShapeNode>
+          <y:Geometry height="127.0" width="15.0" x="395.0" y="389.0"/>
+          <y:Fill hasColor="false" transparent="false"/>
+          <y:BorderStyle hasColor="false" raised="false" type="line" width="1.0"/>
+          <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="131.40625" x="-58.203125" xml:space="preserve" y="54.1494140625">Mobile phone Hardware<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
+          <y:Shape type="rectangle"/>
+        </y:ShapeNode>
+      </data>
+    </node>
+    <node id="n10">
+      <data key="d4" xml:space="preserve"/>
+      <data key="d5"/>
+      <data key="d6">
+        <y:UMLNoteNode>
+          <y:Geometry height="21.0" width="126.0" x="487.0" y="206.0"/>
+          <y:Fill color="#CCCCCC" transparent="false"/>
+          <y:BorderStyle color="#000000" type="line" width="1.0"/>
+          <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="103.380859375" x="11.3095703125" xml:space="preserve" y="1.1494140625">Number of threads<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
+        </y:UMLNoteNode>
+      </data>
+    </node>
+    <edge id="e0" source="n5" target="n6">
+      <data key="d9"/>
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+          <y:LineStyle color="#000000" type="dashed" width="1.0"/>
+          <y:Arrows source="none" target="none"/>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="e1" source="n0" target="n3">
+      <data key="d9"/>
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="69.0" sy="8.5" tx="42.5" ty="-1.5"/>
+          <y:LineStyle color="#000000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="standard"/>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+  </graph>
+  <data key="d7">
+    <y:Resources/>
+  </data>
+</graphml>
-- 
GitLab