diff --git a/.~lock.project_presentation.odp# b/.~lock.project_presentation.odp# new file mode 100755 index 0000000000000000000000000000000000000000..2b694bb99045bcf7ac85d3ee6a574cbc0435d112 --- /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 1724c154794ab6f7002f03f7c8011f161bea938d..67e174e1d0aa1b78db80e18dcdb1a8f6bcc28af1 --- 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 0000000000000000000000000000000000000000..2893a6be622c931bf824cab2ac1c73c41afdad83 --- /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 0000000000000000000000000000000000000000..929a7fc1f4befdcacefbe30e271fdfa71dff04dc --- /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 5fb408b1b6fdb197a992fe84776bca3a527cc7ee..be1ca4d6c70b492203aa4db93840911d923cbdeb --- 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 063f3d46508bb843cfb5c72ccff76a3ddfe94978..4343b3d421c18e3291884955ac69f0d7d246563e --- 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 Binary files /dev/null and b/project_presentation.odp differ 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 0000000000000000000000000000000000000000..2deb1d9b12c29a4c76955c65223eccfef079b4c4 --- /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>