From: Martin Quinson Date: Thu, 11 Oct 2018 20:12:41 +0000 (+0200) Subject: Merge branch 'master' of github.com:simgrid/simgrid X-Git-Tag: v3_22~909 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/93c7b4bd9208b45b5a5899abd1da65262431c33f?hp=9f5f2842e696f478b54c4a121fbaa44ab7d30d37 Merge branch 'master' of github.com:simgrid/simgrid --- diff --git a/ChangeLog b/ChangeLog index 622c291e43..ee1a24f5eb 100644 --- a/ChangeLog +++ b/ChangeLog @@ -61,6 +61,7 @@ SMPI: Java: - Due to an internal bug, Msg.run() must now be your last line. We hope to fix it in a future release, and we are sorry for the inconvenience. + - Expose host load plugin (i.e. loadInit, getCurrentLoad, getComputedFlops,getAvgLoad) Fixed bugs: - #22: Process autorestart seem to only work with CAS01 cpus diff --git a/examples/java/CMakeLists.txt b/examples/java/CMakeLists.txt index 768f22cef3..3b0ba59786 100644 --- a/examples/java/CMakeLists.txt +++ b/examples/java/CMakeLists.txt @@ -23,6 +23,7 @@ set(process-migration_files Main Emigrant Policeman) set(process-startkilltime_files Main Sleeper) set(process-suspend_files Main DreamMaster LazyGuy) set(task-priority_files Main Test) +set(hostload_files Main LoadRunner) if(enable_java) add_custom_target(java-all @@ -31,7 +32,7 @@ if(enable_java) endif() foreach (example app-bittorrent app-centralizedmutex app-masterworker app-pingpong app-tokenring async-yield async-waitall async-dsend - cloud-migration cloud-masterworker dht-chord dht-kademlia energy-consumption energy-pstate energy-vm io-file io-storage + cloud-migration cloud-masterworker dht-chord dht-kademlia energy-consumption energy-pstate energy-vm hostload io-file io-storage process-kill process-migration process-startkilltime process-suspend task-priority trace-pingpong) string (REPLACE "-" "/" example_dir ${example}) set (srcdir ${CMAKE_CURRENT_SOURCE_DIR}/${example_dir}) @@ -71,7 +72,7 @@ set(xml_files ${xml_files} ${CMAKE_CURRENT_SOURCE_DIR}/app/bittorrent/bi if(enable_java) foreach (example app-bittorrent app-centralizedmutex app-masterworker app-pingpong app-tokenring async-yield async-waitall async-dsend - cloud-migration cloud-masterworker dht-chord dht-kademlia energy-consumption energy-pstate energy-vm io-file io-storage + cloud-migration cloud-masterworker dht-chord dht-kademlia energy-consumption energy-pstate energy-vm hostload io-file io-storage process-kill process-migration process-startkilltime process-suspend task-priority trace-pingpong) string (REPLACE "-" "/" example_dir ${example}) ADD_TESH(java-${example} --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/java --setenv LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/lib --setenv classpath=${TESH_CLASSPATH} --cd ${CMAKE_BINARY_DIR}/examples/java/${example_dir} ${CMAKE_HOME_DIRECTORY}/examples/java/${example_dir}/${example}.tesh) diff --git a/examples/java/cloud/migration/XVM.java b/examples/java/cloud/migration/XVM.java index 563475faf8..6c24b50d47 100644 --- a/examples/java/cloud/migration/XVM.java +++ b/examples/java/cloud/migration/XVM.java @@ -46,7 +46,7 @@ public class XVM extends VM { return this.daemon; } - public int getLoad(){ + public double getLoad(){ Msg.info("Remaining comp:" + this.daemon.getRemaining()); return this.currentLoad; } diff --git a/examples/java/hostload/LoadRunner.java b/examples/java/hostload/LoadRunner.java new file mode 100644 index 0000000000..b382353d06 --- /dev/null +++ b/examples/java/hostload/LoadRunner.java @@ -0,0 +1,48 @@ +/* Copyright (c) 2016-2018. The SimGrid Team. All rights reserved. */ + +/* This program is free software; you can redistribute it and/or modify it + * under the terms of the license (GNU LGPL) which comes with this package. */ + +package hostload; + +import org.simgrid.msg.*; +import org.simgrid.msg.Process; + + +public class LoadRunner extends Process { + + public LoadRunner(Host host, String s) { + super(host, s); + } + + public void display(){ + Msg.info("Speed="+getHost().getSpeed()+" flop/s"); + Msg.info("Computed Flops "+ getHost().getComputedFlops()); + Msg.info("AvgLoad "+ getHost().getAvgLoad()); + } + @Override + public void main(String[] strings) throws MsgException { + Host host = getHost(); + display(); + Msg.info("Sleep for 10 seconds"); + waitFor(10); + display(); + + // Run a task + Task task1 = new Task("t1", 200E6, 0); + task1.execute(); + display(); + double taskTime = Msg.getClock(); + Msg.info("Task1 simulation time: "+ taskTime); + + // Run a second task + new Task("t1", 200E6, 0).execute(); + + taskTime = Msg.getClock() - taskTime; + Msg.info("Task2 simulation time: "+ taskTime); + display(); + + } + + +} \ No newline at end of file diff --git a/examples/java/hostload/Main.java b/examples/java/hostload/Main.java new file mode 100644 index 0000000000..785cc39fd0 --- /dev/null +++ b/examples/java/hostload/Main.java @@ -0,0 +1,34 @@ +/* Copyright (c) 2012-2018. The SimGrid Team. + * All rights reserved. */ + +/* This program is free software; you can redistribute it and/or modify it + * under the terms of the license (GNU LGPL) which comes with this package. */ + +package hostload; + +import org.simgrid.msg.Host; +import org.simgrid.msg.Msg; +import org.simgrid.msg.MsgException; + +public class Main { + private Main() { + throw new IllegalAccessError("Utility class"); + } + + public static void main(String[] args) throws MsgException { + Msg.loadInit(); + Msg.init(args); + + if (args.length < 1) { + Msg.info("Usage : Load platform_file"); + Msg.info("Usage : Load ../platforms/small_platform.xml"); + System.exit(1); + } + /* Construct the platform */ + Msg.createEnvironment(args[0]); + new LoadRunner(Host.all()[0], "").start(); + + Msg.run(); + + } +} diff --git a/examples/java/hostload/hostload.tesh b/examples/java/hostload/hostload.tesh new file mode 100644 index 0000000000..19c0a22954 --- /dev/null +++ b/examples/java/hostload/hostload.tesh @@ -0,0 +1,20 @@ +#!/usr/bin/env tesh + +$ java -classpath ${classpath:=.} hostload/Main ${srcdir:=.}/../platforms/small_platform.xml +> [0.000000] [java/INFO] Using regular java threads. +> [Boivin::(1) 0.000000] [java/INFO] Speed=9.8095E7 flop/s +> [Boivin::(1) 0.000000] [java/INFO] Computed Flops 0.0 +> [Boivin::(1) 0.000000] [java/INFO] AvgLoad 0.0 +> [Boivin::(1) 0.000000] [java/INFO] Sleep for 10 seconds +> [Boivin::(1) 10.000000] [java/INFO] Speed=9.8095E7 flop/s +> [Boivin::(1) 10.000000] [java/INFO] Computed Flops 0.0 +> [Boivin::(1) 10.000000] [java/INFO] AvgLoad 0.0 +> [Boivin::(1) 12.038840] [java/INFO] Speed=9.8095E7 flop/s +> [Boivin::(1) 12.038840] [java/INFO] Computed Flops 2.0E8 +> [Boivin::(1) 12.038840] [java/INFO] AvgLoad 0.1693551801515729 +> [Boivin::(1) 12.038840] [java/INFO] Task1 simulation time: 12.038839900096844 +> [Boivin::(1) 14.077680] [java/INFO] Task2 simulation time: 2.0388399000968445 +> [Boivin::(1) 14.077680] [java/INFO] Speed=9.8095E7 flop/s +> [Boivin::(1) 14.077680] [java/INFO] Computed Flops 4.0E8 +> [Boivin::(1) 14.077680] [java/INFO] AvgLoad 0.2896556718201238 +> [14.077680] [java/INFO] MSG_main finished; Terminating the simulation... \ No newline at end of file diff --git a/include/simgrid/host.h b/include/simgrid/host.h index 9c81a53ed1..d65ace35fb 100644 --- a/include/simgrid/host.h +++ b/include/simgrid/host.h @@ -79,9 +79,12 @@ XBT_PUBLIC double sg_host_get_available_speed(sg_host_t host); XBT_PUBLIC int sg_host_core_count(sg_host_t host); -/** @brief Return the location on which a process is running. - * @return the sg_host_t corresponding to the location on which @a process is running. +/** @brief Returns the current computation load (in flops per second). + * @param host a host */ +XBT_PUBLIC double sg_host_load(sg_host_t host); + +/** @brief Return the location on which the current process is running. */ XBT_PUBLIC sg_host_t sg_host_self(); XBT_PUBLIC const char* sg_host_self_get_name(); diff --git a/include/simgrid/msg.h b/include/simgrid/msg.h index b0e67ba2b5..87b46fcff9 100644 --- a/include/simgrid/msg.h +++ b/include/simgrid/msg.h @@ -115,6 +115,7 @@ XBT_PUBLIC void MSG_host_get_process_list(sg_host_t host, xbt_dynar_t whereto); /** @brief Return the location on which the current process is executed */ XBT_PUBLIC sg_host_t MSG_host_self(); +XBT_PUBLIC double MSG_host_get_load(sg_host_t host); /* ******************************** VMs ************************************* */ typedef sg_vm_t msg_vm_t; diff --git a/include/simgrid/plugins/load.h b/include/simgrid/plugins/load.h index eedabd4150..a9fa55af5b 100644 --- a/include/simgrid/plugins/load.h +++ b/include/simgrid/plugins/load.h @@ -22,6 +22,7 @@ XBT_PUBLIC void sg_host_load_reset(sg_host_t host); #define MSG_host_load_plugin_init() sg_host_load_plugin_init() #define MSG_host_get_current_load(host) sg_host_get_current_load(host) #define MSG_host_get_computed_flops(host) sg_host_get_computed_flops(host) +#define MSG_host_get_avg_load(host) sg_host_get_avg_load(host) SG_END_DECL() diff --git a/src/bindings/java/jmsg.cpp b/src/bindings/java/jmsg.cpp index 143a28bfa0..5ff074acd6 100644 --- a/src/bindings/java/jmsg.cpp +++ b/src/bindings/java/jmsg.cpp @@ -14,6 +14,7 @@ #include "simgrid/plugins/energy.h" #include "simgrid/plugins/file_system.h" #include "simgrid/plugins/live_migration.h" +#include "simgrid/plugins/load.h" #include "simgrid/simix.h" #include "simgrid/s4u/Host.hpp" @@ -241,6 +242,9 @@ JNIEXPORT void JNICALL Java_org_simgrid_msg_Msg_fileSystemInit() sg_storage_file_system_init(); } +JNIEXPORT void JNICALL Java_org_simgrid_msg_Msg_loadInit() { + sg_host_load_plugin_init(); +} /** Run a Java org.simgrid.msg.Process * * If needed, this waits for the process starting time. diff --git a/src/bindings/java/jmsg.hpp b/src/bindings/java/jmsg.hpp index c76fb1106b..60280807f0 100644 --- a/src/bindings/java/jmsg.hpp +++ b/src/bindings/java/jmsg.hpp @@ -38,6 +38,7 @@ JNIEXPORT void JNICALL Java_org_simgrid_msg_Msg_init(JNIEnv* env, jclass cls, jo JNIEXPORT void JNICALL Java_org_simgrid_msg_Msg_energyInit(); JNIEXPORT void JNICALL Java_org_simgrid_msg_Msg_liveMigrationInit(); JNIEXPORT void JNICALL Java_org_simgrid_msg_Msg_fileSystemInit(); +JNIEXPORT void JNICALL Java_org_simgrid_msg_Msg_loadInit(); JNIEXPORT void JNICALL Java_org_simgrid_msg_Msg_debug(JNIEnv* env, jclass cls, jstring jargs); JNIEXPORT void JNICALL Java_org_simgrid_msg_Msg_verb(JNIEnv* env, jclass cls, jstring jargs); diff --git a/src/bindings/java/jmsg_host.cpp b/src/bindings/java/jmsg_host.cpp index 32c513fa12..d889f513b9 100644 --- a/src/bindings/java/jmsg_host.cpp +++ b/src/bindings/java/jmsg_host.cpp @@ -6,6 +6,7 @@ * under the terms of the license (GNU LGPL) which comes with this package. */ #include "simgrid/plugins/energy.h" +#include "simgrid/plugins/load.h" #include "simgrid/s4u/Host.hpp" #include "simgrid/s4u/Storage.hpp" @@ -372,3 +373,45 @@ JNIEXPORT jdouble JNICALL Java_org_simgrid_msg_Host_getPowerPeakAt(JNIEnv* env, msg_host_t host = jhost_get_native(env, jhost); return MSG_host_get_power_peak_at(host, pstate); } + +JNIEXPORT jdouble JNICALL Java_org_simgrid_msg_Host_getLoad(JNIEnv* env, jobject jhost) +{ + msg_host_t host = jhost_get_native(env, jhost); + return MSG_host_get_load(host); +} + +JNIEXPORT jdouble JNICALL Java_org_simgrid_msg_Host_getCurrentLoad (JNIEnv *env, jobject jhost) +{ + msg_host_t host = jhost_get_native(env, jhost); + + if (not host) { + jxbt_throw_notbound(env, "host", jhost); + return 0; + } + + return MSG_host_get_current_load(host); +} + +JNIEXPORT jdouble JNICALL Java_org_simgrid_msg_Host_getComputedFlops (JNIEnv *env, jobject jhost) +{ + msg_host_t host = jhost_get_native(env, jhost); + + if (not host) { + jxbt_throw_notbound(env, "host", jhost); + return 0; + } + + return MSG_host_get_computed_flops(host); +} + +JNIEXPORT jdouble JNICALL Java_org_simgrid_msg_Host_getAvgLoad (JNIEnv *env, jobject jhost) +{ + msg_host_t host = jhost_get_native(env, jhost); + + if (not host) { + jxbt_throw_notbound(env, "host", jhost); + return 0; + } + + return MSG_host_get_avg_load(host); +} \ No newline at end of file diff --git a/src/bindings/java/jmsg_host.h b/src/bindings/java/jmsg_host.h index cc9ee4ad20..9f6ac0d533 100644 --- a/src/bindings/java/jmsg_host.h +++ b/src/bindings/java/jmsg_host.h @@ -68,6 +68,10 @@ JNIEXPORT jint JNICALL Java_org_simgrid_msg_Host_getPstate(JNIEnv* env, jobject JNIEXPORT jint JNICALL Java_org_simgrid_msg_Host_getPstatesCount(JNIEnv* env, jobject jhost); JNIEXPORT jdouble JNICALL Java_org_simgrid_msg_Host_getCurrentPowerPeak(JNIEnv* env, jobject jhost); JNIEXPORT jdouble JNICALL Java_org_simgrid_msg_Host_getPowerPeakAt(JNIEnv* env, jobject jhost, jint pstate); +JNIEXPORT jdouble JNICALL Java_org_simgrid_msg_Host_getLoad(JNIEnv* env, jobject jhost); +JNIEXPORT jdouble JNICALL Java_org_simgrid_msg_Host_getCurrentLoad(JNIEnv *env, jobject jhost); +JNIEXPORT jdouble JNICALL Java_org_simgrid_msg_Host_getAvgLoad(JNIEnv *env, jobject jhost); +JNIEXPORT jdouble JNICALL Java_org_simgrid_msg_Host_getComputedFlops (JNIEnv *env, jobject jhost); SG_END_DECL() #endif diff --git a/src/bindings/java/org/simgrid/msg/Host.java b/src/bindings/java/org/simgrid/msg/Host.java index 0476da4d8e..b40704c5c6 100644 --- a/src/bindings/java/org/simgrid/msg/Host.java +++ b/src/bindings/java/org/simgrid/msg/Host.java @@ -143,7 +143,13 @@ public class Host { * the value will be updated in kernel mode before returning the control to the requesting actor. */ public native double getConsumedEnergy(); - + + /** Returns the current load of the host */ + public native double getCurrentLoad(); + /** Returns the number of flops computed of the host */ + public native double getComputedFlops(); + /** Returns the average load of the host */ + public native double getAvgLoad(); /** Returns the current pstate */ public native int getPstate(); /** Changes the current pstate */ @@ -153,7 +159,9 @@ public class Host { public native double getCurrentPowerPeak(); /** Returns the speed of the processor (in flop/s) at a given pstate. See also @ref plugin_energy. */ public native double getPowerPeakAt(int pstate); - + + /** Returns the current computation load (in flops per second) */ + public native double getLoad(); /** Class initializer, to initialize various JNI stuff */ private static native void nativeInit(); diff --git a/src/bindings/java/org/simgrid/msg/Msg.java b/src/bindings/java/org/simgrid/msg/Msg.java index b103d2f259..b4becc9a7f 100644 --- a/src/bindings/java/org/simgrid/msg/Msg.java +++ b/src/bindings/java/org/simgrid/msg/Msg.java @@ -40,8 +40,16 @@ public final class Msg { /** Tell the kernel that you want to use the energy plugin */ public static final native void energyInit(); + + /** Tell the kernel that you want to use the filesystem plugin. */ public static final native void fileSystemInit(); + /** Initializes the HostLoad plugin. + * + * The HostLoad plugin provides an API to get the current load of each host. + */ + public static final native void loadInit(); + /** Run the MSG simulation. * * After the simulation, you can freely retrieve the information that you want.. diff --git a/src/msg/msg_legacy.cpp b/src/msg/msg_legacy.cpp index 297c8f4308..733a70aff4 100644 --- a/src/msg/msg_legacy.cpp +++ b/src/msg/msg_legacy.cpp @@ -297,6 +297,11 @@ sg_host_t MSG_host_self() { return sg_host_self(); } + +double MSG_host_get_load(sg_host_t host) +{ + return sg_host_load(host); +} /* ************************** Virtual Machines *************************** */ sg_vm_t MSG_vm_create_core(sg_host_t pm, const char* name) { diff --git a/src/s4u/s4u_Host.cpp b/src/s4u/s4u_Host.cpp index 27d5e96402..adde454108 100644 --- a/src/s4u/s4u_Host.cpp +++ b/src/s4u/s4u_Host.cpp @@ -626,3 +626,8 @@ sg_host_t sg_host_self() smx_actor_t process = SIMIX_process_self(); return (process == nullptr) ? nullptr : process->host_; } + +double sg_host_load(sg_host_t host) +{ + return host->get_load(); +} \ No newline at end of file