From: Martin Quinson Date: Sat, 2 Feb 2013 23:29:42 +0000 (+0100) Subject: Merge branch 'master' of github.com:mquinson/simgrid X-Git-Tag: v3_9_90~530 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/41ac7e58ef132dea8cea9addf213671ae38229ac?hp=ab37e64645b3855e7abd79151e2884196b639fc4 Merge branch 'master' of github.com:mquinson/simgrid --- diff --git a/.gitignore b/.gitignore index b60eef05d2..a028368e18 100644 --- a/.gitignore +++ b/.gitignore @@ -148,11 +148,11 @@ examples/msg/mc/bugged1_while_liveness examples/msg/mc/centralized_liveness_deadlock examples/msg/mc/test/test_heap_comparison examples/msg/mc/chord_liveness -examples/msg/mc/test/snapshot_comparison_liveness1 -examples/msg/mc/test/snapshot_comparison_liveness2 -examples/msg/mc/test/snapshot_comparison_liveness3 -examples/msg/mc/test/snapshot_comparison_liveness4 -examples/msg/mc/test/snapshot_comparison_liveness5 +examples/msg/mc/test/snapshot_comparison1 +examples/msg/mc/test/snapshot_comparison2 +examples/msg/mc/test/snapshot_comparison3 +examples/msg/mc/test/snapshot_comparison4 +examples/msg/mc/test/snapshot_comparison5 examples/msg/chainsend/chainsend examples/msg/chord/chord examples/msg/chord/chord_stateful diff --git a/ChangeLog b/ChangeLog index d7b768a791..1bd4768c67 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,6 +1,10 @@ SimGrid (3.10) NOT RELEASED; urgency=low - (to complete) + Java: + * Reintegrate Java to the main archive as desynchronizing these + package is not acceptable anymore (Java is now considered stable) + * Bugfix: Task.setDataSize() only changed the C world, not the value + cached in the Java world -- $date Da SimGrid team diff --git a/buildtools/Cmake/AddTests.cmake b/buildtools/Cmake/AddTests.cmake index 13121b9f56..728ea6a0f6 100644 --- a/buildtools/Cmake/AddTests.cmake +++ b/buildtools/Cmake/AddTests.cmake @@ -317,9 +317,27 @@ if(NOT enable_memcheck) ENDIF() # Java examples - set(TESH_CLASSPATH "${CMAKE_BINARY_DIR}/examples/java/:${CMAKE_BINARY_DIR}/simgrid.jar") + set(TESH_CLASSPATH "${CMAKE_BINARY_DIR}/examples/java/:${SIMGRID_JAR}") if(enable_java) - ADD_TEST(java-bittorrent ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION} --setenv classpath=${TESH_CLASSPATH} --cd ${CMAKE_HOME_DIRECTORY}/examples/java bittorrent/bittorrent.tesh) + ADD_TEST(java-async ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION} --setenv classpath=${TESH_CLASSPATH} --cd ${CMAKE_HOME_DIRECTORY}/examples/java async/async.tesh) + ADD_TEST(java-bittorrent ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION} --setenv classpath=${TESH_CLASSPATH} --cd ${CMAKE_HOME_DIRECTORY}/examples/java bittorrent/bittorrent.tesh) + ADD_TEST(java-bypass ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION} --setenv classpath=${TESH_CLASSPATH} --cd ${CMAKE_HOME_DIRECTORY}/examples/java master_slave_bypass/bypass.tesh) + ADD_TEST(java-chord ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION} --setenv classpath=${TESH_CLASSPATH} --cd ${CMAKE_HOME_DIRECTORY}/examples/java chord/chord.tesh) + ADD_TEST(java-cloud ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION} --setenv classpath=${TESH_CLASSPATH} --cd ${CMAKE_HOME_DIRECTORY}/examples/java cloud/cloud.tesh) + ADD_TEST(java-commTime ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION} --setenv classpath=${TESH_CLASSPATH} --cd ${CMAKE_HOME_DIRECTORY}/examples/java commTime/commtime.tesh) + ADD_TEST(java-io ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION} --setenv classpath=${TESH_CLASSPATH} --cd ${CMAKE_HOME_DIRECTORY}/examples/java io/io.tesh) + ADD_TEST(java-kademlia ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION} --setenv classpath=${TESH_CLASSPATH} --cd ${CMAKE_HOME_DIRECTORY}/examples/java kademlia/kademlia.tesh) + ADD_TEST(java-kill ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION} --setenv classpath=${TESH_CLASSPATH} --cd ${CMAKE_HOME_DIRECTORY}/examples/java master_slave_kill/kill.tesh) + ADD_TEST(java-masterslave ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION} --setenv classpath=${TESH_CLASSPATH} --cd ${CMAKE_HOME_DIRECTORY}/examples/java masterslave/masterslave.tesh) + ADD_TEST(java-migration ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION} --setenv classpath=${TESH_CLASSPATH} --cd ${CMAKE_HOME_DIRECTORY}/examples/java migration/migration.tesh) + ADD_TEST(java-mutualExclusion ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION} --setenv classpath=${TESH_CLASSPATH} --cd ${CMAKE_HOME_DIRECTORY}/examples/java mutualExclusion/mutualexclusion.tesh) + ADD_TEST(java-pingPong ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION} --setenv classpath=${TESH_CLASSPATH} --cd ${CMAKE_HOME_DIRECTORY}/examples/java pingPong/pingpong.tesh) + ADD_TEST(java-priority ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION} --setenv classpath=${TESH_CLASSPATH} --cd ${CMAKE_HOME_DIRECTORY}/examples/java priority/priority.tesh) + ADD_TEST(java-startKillTime ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION} --setenv classpath=${TESH_CLASSPATH} --cd ${CMAKE_HOME_DIRECTORY}/examples/java startKillTime/startKillTime.tesh) + ADD_TEST(java-suspend ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION} --setenv classpath=${TESH_CLASSPATH} --cd ${CMAKE_HOME_DIRECTORY}/examples/java suspend/suspend.tesh) + if(HAVE_TRACING) + ADD_TEST(java-tracing ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION} --setenv classpath=${TESH_CLASSPATH} --cd ${CMAKE_HOME_DIRECTORY}/examples/java tracing/tracingPingPong.tesh) + endif() endif() # Lua examples diff --git a/buildtools/Cmake/DefinePackages.cmake b/buildtools/Cmake/DefinePackages.cmake index d5e39396f4..1eebce72d7 100644 --- a/buildtools/Cmake/DefinePackages.cmake +++ b/buildtools/Cmake/DefinePackages.cmake @@ -372,8 +372,10 @@ set(JTRACE_JAVA_SRC if(HAVE_TRACING) list(APPEND JMSG_C_SRC ${JTRACE_C_SRC}) + list(APPEND JMSG_JAVA_SRC ${JTRACE_JAVA_SRC}) else() list(APPEND EXTRA_DIST ${JTRACE_C_SRC}) + list(APPEND EXTRA_DIST ${JTRACE_JAVA_SRC}) endif() set(LUA_SRC @@ -716,7 +718,9 @@ set(txt_files AUTHORS COPYING README + README.java ChangeLog + ChangeLog.SimGrid-java INSTALL LICENSE-LGPL-2.1 NEWS @@ -725,7 +729,24 @@ set(txt_files ) set(EXAMPLES_CMAKEFILES_TXT + examples/java/CMakeLists.txt + examples/java/async/CMakeLists.txt examples/java/bittorrent/CMakeLists.txt + examples/java/chord/CMakeLists.txt + examples/java/cloud/CMakeLists.txt + examples/java/commTime/CMakeLists.txt + examples/java/io/CMakeLists.txt + examples/java/kademlia/CMakeLists.txt + examples/java/master_slave_bypass/CMakeLists.txt + examples/java/master_slave_kill/CMakeLists.txt + examples/java/masterslave/CMakeLists.txt + examples/java/migration/CMakeLists.txt + examples/java/mutualExclusion/CMakeLists.txt + examples/java/pingPong/CMakeLists.txt + examples/java/priority/CMakeLists.txt + examples/java/startKillTime/CMakeLists.txt + examples/java/suspend/CMakeLists.txt + examples/java/tracing/CMakeLists.txt examples/lua/CMakeLists.txt examples/msg/CMakeLists.txt examples/msg/actions/CMakeLists.txt diff --git a/buildtools/Cmake/Distrib.cmake b/buildtools/Cmake/Distrib.cmake index 6e4ccb2035..4e314ba5cc 100644 --- a/buildtools/Cmake/Distrib.cmake +++ b/buildtools/Cmake/Distrib.cmake @@ -75,6 +75,13 @@ if(enable_lib_static AND NOT WIN32) endif() endif() +if(enable_java) + install(TARGETS SG_java + DESTINATION $ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/lib/) + install(FILES ${SIMGRID_JAR} + DESTINATION $ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/java/) +endif() + # include files set(HEADERS ${headers_to_install} diff --git a/buildtools/Cmake/MakeExe.cmake b/buildtools/Cmake/MakeExe.cmake index bd69c83fea..1ca6822fc6 100644 --- a/buildtools/Cmake/MakeExe.cmake +++ b/buildtools/Cmake/MakeExe.cmake @@ -32,7 +32,24 @@ add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich-test/pt2pt) add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/msg) add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/msg/trace) +add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/java) +add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/java/async) add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/java/bittorrent) +add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/java/chord) +add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/java/cloud) +add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/java/commTime) +add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/java/io) +add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/java/kademlia) +add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/java/master_slave_bypass) +add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/java/master_slave_kill) +add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/java/masterslave) +add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/java/migration) +add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/java/mutualExclusion) +add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/java/pingPong) +add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/java/priority) +add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/java/startKillTime) +add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/java/suspend) +add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/java/tracing) add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/msg/properties) add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/msg/actions) diff --git a/buildtools/Cmake/MakeLib.cmake b/buildtools/Cmake/MakeLib.cmake index b713183c1c..dc94f02a74 100644 --- a/buildtools/Cmake/MakeLib.cmake +++ b/buildtools/Cmake/MakeLib.cmake @@ -47,14 +47,10 @@ if(enable_java) endif() set(CMAKE_JAVA_TARGET_OUTPUT_NAME simgrid) - set(MANIFEST_FILE ${CMAKE_HOME_DIRECTORY}/src/bindings/java/MANIFEST.MF) add_jar(SG_java_jar ${JMSG_JAVA_SRC}) - add_custom_command(TARGET SG_java_jar POST_BUILD - COMMENT "Update file MANIFEST.MF in simgrid.jar..." - DEPENDS ${MANIFEST_FILE} - WORKING_DIRECTORY "${CMAKE_BINARY_DIR}" - COMMAND ${JAVA_ARCHIVE} -uvmf ${MANIFEST_FILE} simgrid.jar - ) + + set(SIMGRID_JAR "${CMAKE_BINARY_DIR}/simgrid.jar") + set(MANIFEST_FILE "${CMAKE_HOME_DIRECTORY}/src/bindings/java/MANIFEST.MF") if(CMAKE_SYSTEM_PROCESSOR MATCHES ".86") if(${ARCH_32_BITS}) @@ -63,25 +59,40 @@ if(enable_java) set(JSG_BUNDLE "NATIVE/${CMAKE_SYSTEM_NAME}/amd64/") endif() else() - error("Unknown system type. Processor: ${CMAKE_SYSTEM_PROCESSOR}; System: ${CMAKE_SYSTEM_NAME}") + message(WARNING "Unknown system type. Processor: ${CMAKE_SYSTEM_PROCESSOR}; System: ${CMAKE_SYSTEM_NAME}") + set(JSG_BUNDLE "NATIVE/${CMAKE_SYSTEM_NAME}/${CMAKE_SYSTEM_PROCESSOR/") endif() - message("Native libraries bundeled into: ${JSG_BUNDLE}") + message("Native libraries bundled into: ${JSG_BUNDLE}") + + set(LIBSIMGRID_SO + ${CMAKE_SHARED_LIBRARY_PREFIX}simgrid${CMAKE_SHARED_LIBRARY_SUFFIX}) + set(LIBSG_JAVA_SO + ${CMAKE_SHARED_LIBRARY_PREFIX}SG_java${CMAKE_SHARED_LIBRARY_SUFFIX}) - add_custom_command(TARGET SG_java_jar POST_BUILD - COMMENT "Combine native libraries in simgrid.jar..." - DEPENDS simgrid SG_java - WORKING_DIRECTORY "${CMAKE_BINARY_DIR}" + add_custom_command( + COMMENT "Finalize simgrid.jar..." + OUTPUT ${SIMGRID_JAR}_finalized + DEPENDS ${SIMGRID_JAR} ${MANIFEST_FILE} + ${CMAKE_BINARY_DIR}/lib/${LIBSIMGRID_SO} + ${CMAKE_BINARY_DIR}/lib/${LIBSG_JAVA_SO} + ${CMAKE_HOME_DIRECTORY}/COPYING + ${CMAKE_HOME_DIRECTORY}/ChangeLog + ${CMAKE_HOME_DIRECTORY}/ChangeLog.SimGrid-java COMMAND ${CMAKE_COMMAND} -E remove_directory "NATIVE" COMMAND ${CMAKE_COMMAND} -E make_directory "${JSG_BUNDLE}" - COMMAND ${CMAKE_COMMAND} -E copy ./lib/libsimgrid.so "${JSG_BUNDLE}" - COMMAND strip --strip-debug "${JSG_BUNDLE}/libsimgrid.so" - COMMAND ${CMAKE_COMMAND} -E copy ./lib/libSG_java.so "${JSG_BUNDLE}" - COMMAND strip --strip-debug "${JSG_BUNDLE}/libSG_java.so" + COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_BINARY_DIR}/lib/${LIBSIMGRID_SO}" "${JSG_BUNDLE}" + COMMAND ${CMAKE_STRIP} -S "${JSG_BUNDLE}/${LIBSIMGRID_SO}" + COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_BINARY_DIR}/lib/${LIBSG_JAVA_SO}" "${JSG_BUNDLE}" + COMMAND ${CMAKE_STRIP} -S "${JSG_BUNDLE}/${LIBSG_JAVA_SO}" + COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_HOME_DIRECTORY}/COPYING" "${JSG_BUNDLE}" COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_HOME_DIRECTORY}/ChangeLog" "${JSG_BUNDLE}" COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_HOME_DIRECTORY}/ChangeLog.SimGrid-java" "${JSG_BUNDLE}" - COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_HOME_DIRECTORY}/COPYING" "${JSG_BUNDLE}" - COMMAND ${JAVA_ARCHIVE} -uvf simgrid.jar "NATIVE" + COMMAND ${JAVA_ARCHIVE} -uvmf ${MANIFEST_FILE} ${SIMGRID_JAR} "NATIVE" + COMMAND ${CMAKE_COMMAND} -E remove ${SIMGRID_JAR}_finalized + COMMAND ${CMAKE_COMMAND} -E touch ${SIMGRID_JAR}_finalized ) + add_custom_target(SG_java_jar_finalize DEPENDS ${SIMGRID_JAR}_finalized) + add_dependencies(SG_java_jar SG_java_jar_finalize) endif() add_dependencies(simgrid maintainer_files) diff --git a/examples/java/async/CMakeLists.txt b/examples/java/async/CMakeLists.txt new file mode 100644 index 0000000000..18d4de12cc --- /dev/null +++ b/examples/java/async/CMakeLists.txt @@ -0,0 +1,48 @@ +cmake_minimum_required(VERSION 2.6) + +set(example java_async) +set(sources + ${CMAKE_CURRENT_SOURCE_DIR}/AsyncTest.java + ${CMAKE_CURRENT_SOURCE_DIR}/FinalizeTask.java + ${CMAKE_CURRENT_SOURCE_DIR}/Forwarder.java + ${CMAKE_CURRENT_SOURCE_DIR}/Master.java + ${CMAKE_CURRENT_SOURCE_DIR}/Slave.java + ) + +if(enable_java) + add_custom_command( + COMMENT "Building ${example}..." + OUTPUT ${example}_compiled + DEPENDS ${sources} SG_java_jar ${SIMGRID_JAR} + COMMAND ${JAVA_COMPILE} -cp ${SIMGRID_JAR} + -d ${CMAKE_CURRENT_BINARY_DIR}/.. ${sources} + COMMAND ${CMAKE_COMMAND} -E remove ${example}_compiled + COMMAND ${CMAKE_COMMAND} -E touch ${example}_compiled + ) + add_custom_target(${example} ALL DEPENDS ${example}_compiled) +endif() + +set(tesh_files + ${tesh_files} + ${CMAKE_CURRENT_SOURCE_DIR}/async.tesh + PARENT_SCOPE + ) +set(xml_files + ${xml_files} + ${CMAKE_CURRENT_SOURCE_DIR}/asyncDeployment.xml + PARENT_SCOPE + ) +set(examples_src + ${examples_src} + ${sources} + PARENT_SCOPE + ) +set(bin_files + ${bin_files} + PARENT_SCOPE + ) +set(txt_files + ${txt_files} + ${CMAKE_CURRENT_SOURCE_DIR}/README + PARENT_SCOPE + ) diff --git a/examples/java/async/async.tesh b/examples/java/async/async.tesh index 6063d5a765..71b6709635 100644 --- a/examples/java/async/async.tesh +++ b/examples/java/async/async.tesh @@ -2,7 +2,7 @@ ! output sort -$ java -cp .:${srcdir:=.}/examples:${srcdir:=.}/simgrid.jar async/AsyncTest ${srcdir:=.}/examples/platform.xml ${srcdir:=.}/examples/async/asyncDeployment.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n" +$ java -cp ${classpath:=.} async/AsyncTest ./platform.xml ./async/asyncDeployment.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n" > [ 0.000000] (10:async.Slave@Robert) Receiving on 'slave_8' > [ 0.000000] (11:async.Slave@Sirois) Receiving on 'slave_9' > [ 0.000000] (12:async.Slave@Monique) Receiving on 'slave_10' diff --git a/examples/java/bittorrent/CMakeLists.txt b/examples/java/bittorrent/CMakeLists.txt index d96d4cd2ce..a245baa0e8 100644 --- a/examples/java/bittorrent/CMakeLists.txt +++ b/examples/java/bittorrent/CMakeLists.txt @@ -1,5 +1,6 @@ cmake_minimum_required(VERSION 2.6) +set(example java_bittorrent) set(sources ${CMAKE_CURRENT_SOURCE_DIR}/Bittorrent.java ${CMAKE_CURRENT_SOURCE_DIR}/Common.java @@ -11,15 +12,21 @@ set(sources ) if(enable_java) - add_custom_target(java_bittorrent ALL - COMMAND ${JAVA_COMPILE} -cp ${CMAKE_BINARY_DIR}/simgrid.jar - -d ${CMAKE_CURRENT_BINARY_DIR}/.. ${sources}) - add_dependencies(java_bittorrent SG_java_jar) + add_custom_command( + COMMENT "Building ${example}..." + OUTPUT ${example}_compiled + DEPENDS ${sources} SG_java_jar ${SIMGRID_JAR} + COMMAND ${JAVA_COMPILE} -cp ${SIMGRID_JAR} + -d ${CMAKE_CURRENT_BINARY_DIR}/.. ${sources} + COMMAND ${CMAKE_COMMAND} -E remove ${example}_compiled + COMMAND ${CMAKE_COMMAND} -E touch ${example}_compiled + ) + add_custom_target(${example} ALL DEPENDS ${example}_compiled) endif() set(tesh_files ${tesh_files} - examples/bittorrent/bittorrent.tesh + ${CMAKE_CURRENT_SOURCE_DIR}/bittorrent.tesh PARENT_SCOPE ) set(xml_files @@ -41,4 +48,3 @@ set(txt_files ${CMAKE_CURRENT_SOURCE_DIR}/generate.py PARENT_SCOPE ) - diff --git a/examples/java/chord/CMakeLists.txt b/examples/java/chord/CMakeLists.txt new file mode 100644 index 0000000000..90167e8070 --- /dev/null +++ b/examples/java/chord/CMakeLists.txt @@ -0,0 +1,56 @@ +cmake_minimum_required(VERSION 2.6) + +set(example java_chord) +set(sources + ${CMAKE_CURRENT_SOURCE_DIR}/Chord.java + ${CMAKE_CURRENT_SOURCE_DIR}/ChordTask.java + ${CMAKE_CURRENT_SOURCE_DIR}/Common.java + ${CMAKE_CURRENT_SOURCE_DIR}/FindSuccessorAnswerTask.java + ${CMAKE_CURRENT_SOURCE_DIR}/FindSuccessorTask.java + ${CMAKE_CURRENT_SOURCE_DIR}/GetPredecessorAnswerTask.java + ${CMAKE_CURRENT_SOURCE_DIR}/GetPredecessorTask.java + ${CMAKE_CURRENT_SOURCE_DIR}/Node.java + ${CMAKE_CURRENT_SOURCE_DIR}/NotifyTask.java + ) + +if(enable_java) + add_custom_command( + COMMENT "Building ${example}..." + OUTPUT ${example}_compiled + DEPENDS ${sources} SG_java_jar ${SIMGRID_JAR} + COMMAND ${JAVA_COMPILE} -cp ${SIMGRID_JAR} + -d ${CMAKE_CURRENT_BINARY_DIR}/.. ${sources} + COMMAND ${CMAKE_COMMAND} -E remove ${example}_compiled + COMMAND ${CMAKE_COMMAND} -E touch ${example}_compiled + ) + add_custom_target(${example} ALL DEPENDS ${example}_compiled) +endif() + +set(tesh_files + ${tesh_files} + ${CMAKE_CURRENT_SOURCE_DIR}/chord.tesh + PARENT_SCOPE + ) +set(xml_files + ${xml_files} + ${CMAKE_CURRENT_SOURCE_DIR}/chord.xml + ${CMAKE_CURRENT_SOURCE_DIR}/chord10.xml + ${CMAKE_CURRENT_SOURCE_DIR}/chord100.xml + ${CMAKE_CURRENT_SOURCE_DIR}/chord1000.xml + ${CMAKE_CURRENT_SOURCE_DIR}/chord10000.xml + ${CMAKE_CURRENT_SOURCE_DIR}/chord90.xml + PARENT_SCOPE + ) +set(examples_src + ${examples_src} + ${sources} + PARENT_SCOPE + ) +set(bin_files + ${bin_files} + PARENT_SCOPE + ) +set(txt_files + ${txt_files} + PARENT_SCOPE + ) diff --git a/examples/java/chord/chord.tesh b/examples/java/chord/chord.tesh index 03894b454c..8360ad25e5 100644 --- a/examples/java/chord/chord.tesh +++ b/examples/java/chord/chord.tesh @@ -2,7 +2,7 @@ ! output sort -$ java -cp .:${srcdir:=.}/examples:${srcdir:=.}/simgrid.jar chord/Chord ${srcdir:=.}/examples/platform.xml ${srcdir:=.}/examples/chord/chord.xml +$ java -cp ${classpath:=.} chord/Chord ./platform.xml ./chord/chord.xml > [0.000000] [jmsg/INFO] Using regular java threads. Coroutines could speed your simulation up. > [652.540924] [jmsg/INFO] MSG_main finished; Cleaning up the simulation... > [Boivin:chord.Node:(7) 0.000000] [jmsg/INFO] Joining the ring with id 8 knowing node 1 diff --git a/examples/java/cloud/CMakeLists.txt b/examples/java/cloud/CMakeLists.txt new file mode 100644 index 0000000000..9dbb0d1cfc --- /dev/null +++ b/examples/java/cloud/CMakeLists.txt @@ -0,0 +1,45 @@ +cmake_minimum_required(VERSION 2.6) + +set(example java_cloud) +set(sources + ${CMAKE_CURRENT_SOURCE_DIR}/Cloud.java + ${CMAKE_CURRENT_SOURCE_DIR}/FinalizeTask.java + ${CMAKE_CURRENT_SOURCE_DIR}/Master.java + ${CMAKE_CURRENT_SOURCE_DIR}/Slave.java + ) + +if(enable_java) + add_custom_command( + COMMENT "Building ${example}..." + OUTPUT ${example}_compiled + DEPENDS ${sources} SG_java_jar ${SIMGRID_JAR} + COMMAND ${JAVA_COMPILE} -cp ${SIMGRID_JAR} + -d ${CMAKE_CURRENT_BINARY_DIR}/.. ${sources} + COMMAND ${CMAKE_COMMAND} -E remove ${example}_compiled + COMMAND ${CMAKE_COMMAND} -E touch ${example}_compiled + ) + add_custom_target(${example} ALL DEPENDS ${example}_compiled) +endif() + +set(tesh_files + ${tesh_files} + ${CMAKE_CURRENT_SOURCE_DIR}/cloud.tesh + PARENT_SCOPE + ) +set(xml_files + ${xml_files} + PARENT_SCOPE + ) +set(examples_src + ${examples_src} + ${sources} + PARENT_SCOPE + ) +set(bin_files + ${bin_files} + PARENT_SCOPE + ) +set(txt_files + ${txt_files} + PARENT_SCOPE + ) diff --git a/examples/java/cloud/cloud.tesh b/examples/java/cloud/cloud.tesh index 418553695d..c82c5d2280 100644 --- a/examples/java/cloud/cloud.tesh +++ b/examples/java/cloud/cloud.tesh @@ -2,7 +2,7 @@ ! output sort -$ java -cp .:${srcdir:=.}/examples:${srcdir:=.}/simgrid.jar cloud/Cloud ${srcdir:=.}/examples/platform.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n" +$ java -cp ${classpath:=.} cloud/Cloud ./platform.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n" > [ 0.000000] (10:Slave 8@Jean_Yves) Receiving on slave_8 > [ 0.000000] (11:Slave 9@Fafard) Receiving on slave_9 > [ 0.000000] (1:Master@Jacquelin) Launched 10 VMs diff --git a/examples/java/commTime/CMakeLists.txt b/examples/java/commTime/CMakeLists.txt new file mode 100644 index 0000000000..320b5c8b84 --- /dev/null +++ b/examples/java/commTime/CMakeLists.txt @@ -0,0 +1,47 @@ +cmake_minimum_required(VERSION 2.6) + +set(example java_commTime) +set(sources + ${CMAKE_CURRENT_SOURCE_DIR}/CommTimeTest.java + ${CMAKE_CURRENT_SOURCE_DIR}/FinalizeTask.java + ${CMAKE_CURRENT_SOURCE_DIR}/Master.java + ${CMAKE_CURRENT_SOURCE_DIR}/Slave.java + ) + +if(enable_java) + add_custom_command( + COMMENT "Building ${example}..." + OUTPUT ${example}_compiled + DEPENDS ${sources} SG_java_jar ${SIMGRID_JAR} + COMMAND ${JAVA_COMPILE} -cp ${SIMGRID_JAR} + -d ${CMAKE_CURRENT_BINARY_DIR}/.. ${sources} + COMMAND ${CMAKE_COMMAND} -E remove ${example}_compiled + COMMAND ${CMAKE_COMMAND} -E touch ${example}_compiled + ) + add_custom_target(${example} ALL DEPENDS ${example}_compiled) +endif() + +set(tesh_files + ${tesh_files} + ${CMAKE_CURRENT_SOURCE_DIR}/commtime.tesh + PARENT_SCOPE + ) +set(xml_files + ${xml_files} + ${CMAKE_CURRENT_SOURCE_DIR}/commTimeDeployment.xml + PARENT_SCOPE + ) +set(examples_src + ${examples_src} + ${sources} + PARENT_SCOPE + ) +set(bin_files + ${bin_files} + PARENT_SCOPE + ) +set(txt_files + ${txt_files} + ${CMAKE_CURRENT_SOURCE_DIR}/README + PARENT_SCOPE + ) diff --git a/examples/java/commTime/commtime.tesh b/examples/java/commTime/commtime.tesh index d21cc19247..91f9dbf85a 100644 --- a/examples/java/commTime/commtime.tesh +++ b/examples/java/commTime/commtime.tesh @@ -2,7 +2,7 @@ ! output sort -$ java -cp .:${srcdir:=.}/examples:${srcdir:=.}/simgrid.jar commTime/CommTimeTest ${srcdir:=.}/examples/platform.xml ${srcdir:=.}/examples/commTime/commTimeDeployment.xml +$ java -cp ${classpath:=.} commTime/CommTimeTest ./platform.xml ./commTime/commTimeDeployment.xml > [0.000000] [jmsg/INFO] Using regular java threads. Coroutines could speed your simulation up. > [7016.452828] [jmsg/INFO] MSG_main finished; Cleaning up the simulation... > [Bellemarre:commTime.Slave:(15) 0.000000] [jmsg/INFO] Receiving on 'slave_13' diff --git a/examples/java/io/CMakeLists.txt b/examples/java/io/CMakeLists.txt new file mode 100644 index 0000000000..767e4d6b90 --- /dev/null +++ b/examples/java/io/CMakeLists.txt @@ -0,0 +1,43 @@ +cmake_minimum_required(VERSION 2.6) + +set(example java_io) +set(sources + ${CMAKE_CURRENT_SOURCE_DIR}/IO.java + ${CMAKE_CURRENT_SOURCE_DIR}/Node.java + ) + +if(enable_java) + add_custom_command( + COMMENT "Building ${example}..." + OUTPUT ${example}_compiled + DEPENDS ${sources} SG_java_jar ${SIMGRID_JAR} + COMMAND ${JAVA_COMPILE} -cp ${SIMGRID_JAR} + -d ${CMAKE_CURRENT_BINARY_DIR}/.. ${sources} + COMMAND ${CMAKE_COMMAND} -E remove ${example}_compiled + COMMAND ${CMAKE_COMMAND} -E touch ${example}_compiled + ) + add_custom_target(${example} ALL DEPENDS ${example}_compiled) +endif() + +set(tesh_files + ${tesh_files} + PARENT_SCOPE + ) +set(xml_files + ${xml_files} + ${CMAKE_CURRENT_SOURCE_DIR}/storage.xml + PARENT_SCOPE + ) +set(examples_src + ${examples_src} + ${sources} + PARENT_SCOPE + ) +set(bin_files + ${bin_files} + PARENT_SCOPE + ) +set(txt_files + ${txt_files} + PARENT_SCOPE + ) diff --git a/examples/java/kademlia/CMakeLists.txt b/examples/java/kademlia/CMakeLists.txt new file mode 100644 index 0000000000..8b3833d73f --- /dev/null +++ b/examples/java/kademlia/CMakeLists.txt @@ -0,0 +1,54 @@ +cmake_minimum_required(VERSION 2.6) + +set(example java_kademlia) +set(sources + ${CMAKE_CURRENT_SOURCE_DIR}/Answer.java + ${CMAKE_CURRENT_SOURCE_DIR}/Bucket.java + ${CMAKE_CURRENT_SOURCE_DIR}/Common.java + ${CMAKE_CURRENT_SOURCE_DIR}/Contact.java + ${CMAKE_CURRENT_SOURCE_DIR}/FindNodeAnswerTask.java + ${CMAKE_CURRENT_SOURCE_DIR}/FindNodeTask.java + ${CMAKE_CURRENT_SOURCE_DIR}/Kademlia.java + ${CMAKE_CURRENT_SOURCE_DIR}/KademliaTask.java + ${CMAKE_CURRENT_SOURCE_DIR}/Node.java + ${CMAKE_CURRENT_SOURCE_DIR}/PingAnswerTask.java + ${CMAKE_CURRENT_SOURCE_DIR}/PingTask.java + ${CMAKE_CURRENT_SOURCE_DIR}/RoutingTable.java + ) + +if(enable_java) + add_custom_command( + COMMENT "Building ${example}..." + OUTPUT ${example}_compiled + DEPENDS ${sources} SG_java_jar ${SIMGRID_JAR} + COMMAND ${JAVA_COMPILE} -cp ${SIMGRID_JAR} + -d ${CMAKE_CURRENT_BINARY_DIR}/.. ${sources} + COMMAND ${CMAKE_COMMAND} -E remove ${example}_compiled + COMMAND ${CMAKE_COMMAND} -E touch ${example}_compiled + ) + add_custom_target(${example} ALL DEPENDS ${example}_compiled) +endif() + +set(tesh_files + ${tesh_files} + ${CMAKE_CURRENT_SOURCE_DIR}/kademlia.tesh + PARENT_SCOPE + ) +set(xml_files + ${xml_files} + ${CMAKE_CURRENT_SOURCE_DIR}/kademlia.xml + PARENT_SCOPE + ) +set(examples_src + ${examples_src} + ${sources} + PARENT_SCOPE + ) +set(bin_files + ${bin_files} + PARENT_SCOPE + ) +set(txt_files + ${txt_files} + PARENT_SCOPE + ) diff --git a/examples/java/kademlia/kademlia.tesh b/examples/java/kademlia/kademlia.tesh index 739695617d..3b177c5969 100644 --- a/examples/java/kademlia/kademlia.tesh +++ b/examples/java/kademlia/kademlia.tesh @@ -2,7 +2,7 @@ ! output sort -$ java -cp .:${srcdir:=.}/examples:${srcdir:=.}/simgrid.jar kademlia/Kademlia ${srcdir:=.}/examples/platform.xml ${srcdir:=.}/examples/kademlia/kademlia.xml +$ java -cp ${classpath:=.} kademlia/Kademlia ./platform.xml ./kademlia/kademlia.xml > [0.000000] [jmsg/INFO] Using regular java threads. Coroutines could speed your simulation up. > [900.000000] [jmsg/INFO] MSG_main finished; Cleaning up the simulation... > [Boivin:kademlia.Node:(2) 0.000000] [jmsg/INFO] Hi, I'm going to join the network with the id 1! diff --git a/examples/java/master_slave_bypass/CMakeLists.txt b/examples/java/master_slave_bypass/CMakeLists.txt new file mode 100644 index 0000000000..9b18ca45d2 --- /dev/null +++ b/examples/java/master_slave_bypass/CMakeLists.txt @@ -0,0 +1,46 @@ +cmake_minimum_required(VERSION 2.6) + +set(example java_master_slave_bypass) +set(sources + ${CMAKE_CURRENT_SOURCE_DIR}/FinalizeTask.java + ${CMAKE_CURRENT_SOURCE_DIR}/Master.java + ${CMAKE_CURRENT_SOURCE_DIR}/MsBypass.java + ${CMAKE_CURRENT_SOURCE_DIR}/Slave.java + ) + +if(enable_java) + add_custom_command( + COMMENT "Building ${example}..." + OUTPUT ${example}_compiled + DEPENDS ${sources} SG_java_jar ${SIMGRID_JAR} + COMMAND ${JAVA_COMPILE} -cp ${SIMGRID_JAR} + -d ${CMAKE_CURRENT_BINARY_DIR}/.. ${sources} + COMMAND ${CMAKE_COMMAND} -E remove ${example}_compiled + COMMAND ${CMAKE_COMMAND} -E touch ${example}_compiled + ) + add_custom_target(${example} ALL DEPENDS ${example}_compiled) +endif() + +set(tesh_files + ${tesh_files} + ${CMAKE_CURRENT_SOURCE_DIR}/bypass.tesh + PARENT_SCOPE + ) +set(xml_files + ${xml_files} + ${CMAKE_CURRENT_SOURCE_DIR}/platform.xml + PARENT_SCOPE + ) +set(examples_src + ${examples_src} + ${sources} + PARENT_SCOPE + ) +set(bin_files + ${bin_files} + PARENT_SCOPE + ) +set(txt_files + ${txt_files} + PARENT_SCOPE + ) diff --git a/examples/java/master_slave_bypass/bypass.tesh b/examples/java/master_slave_bypass/bypass.tesh index dfcc347225..49097815ef 100644 --- a/examples/java/master_slave_bypass/bypass.tesh +++ b/examples/java/master_slave_bypass/bypass.tesh @@ -2,7 +2,7 @@ ! output sort -$ java -cp .:${srcdir:=.}/examples:${srcdir:=.}/simgrid.jar master_slave_bypass/MsBypass ${srcdir:=.}/examples/master_slave_bypass/platform.xml +$ java -cp ${classpath:=.} master_slave_bypass/MsBypass ./master_slave_bypass/platform.xml > [0.000000] [jmsg/INFO] Using regular java threads. Coroutines could speed your simulation up. > [0.013010] [jmsg/INFO] MSG_main finished; Cleaning up the simulation... > [alice:process2:(2) 0.000000] [jmsg/INFO] Slave Hello! diff --git a/examples/java/master_slave_kill/CMakeLists.txt b/examples/java/master_slave_kill/CMakeLists.txt new file mode 100644 index 0000000000..34e5b26f9e --- /dev/null +++ b/examples/java/master_slave_kill/CMakeLists.txt @@ -0,0 +1,46 @@ +cmake_minimum_required(VERSION 2.6) + +set(example java_master_slave_kill) +set(sources + ${CMAKE_CURRENT_SOURCE_DIR}/FinalizeTask.java + ${CMAKE_CURRENT_SOURCE_DIR}/Master.java + ${CMAKE_CURRENT_SOURCE_DIR}/MsKill.java + ${CMAKE_CURRENT_SOURCE_DIR}/Slave.java + ) + +if(enable_java) + add_custom_command( + COMMENT "Building ${example}..." + OUTPUT ${example}_compiled + DEPENDS ${sources} SG_java_jar ${SIMGRID_JAR} + COMMAND ${JAVA_COMPILE} -cp ${SIMGRID_JAR} + -d ${CMAKE_CURRENT_BINARY_DIR}/.. ${sources} + COMMAND ${CMAKE_COMMAND} -E remove ${example}_compiled + COMMAND ${CMAKE_COMMAND} -E touch ${example}_compiled + ) + add_custom_target(${example} ALL DEPENDS ${example}_compiled) +endif() + +set(tesh_files + ${tesh_files} + ${CMAKE_CURRENT_SOURCE_DIR}/kill.tesh + PARENT_SCOPE + ) +set(xml_files + ${xml_files} + ${CMAKE_CURRENT_SOURCE_DIR}/platform.xml + PARENT_SCOPE + ) +set(examples_src + ${examples_src} + ${sources} + PARENT_SCOPE + ) +set(bin_files + ${bin_files} + PARENT_SCOPE + ) +set(txt_files + ${txt_files} + PARENT_SCOPE + ) diff --git a/examples/java/master_slave_kill/kill.tesh b/examples/java/master_slave_kill/kill.tesh index 2c7179a93c..1170918cf1 100644 --- a/examples/java/master_slave_kill/kill.tesh +++ b/examples/java/master_slave_kill/kill.tesh @@ -2,7 +2,7 @@ ! output sort -$ java -cp .:${srcdir:=.}/examples:${srcdir:=.}/simgrid.jar master_slave_kill/MsKill ${srcdir:=.}/examples/master_slave_kill/platform.xml +$ java -cp ${classpath:=.} master_slave_kill/MsKill ./master_slave_kill/platform.xml > [0.000000] [jmsg/INFO] Using regular java threads. Coroutines could speed your simulation up. > [0.013010] [jmsg/INFO] MSG_main finished; Cleaning up the simulation... > [alice:slave:(2) 0.000000] [jmsg/INFO] Slave Hello! diff --git a/examples/java/masterslave/CMakeLists.txt b/examples/java/masterslave/CMakeLists.txt new file mode 100644 index 0000000000..c3083f64b4 --- /dev/null +++ b/examples/java/masterslave/CMakeLists.txt @@ -0,0 +1,49 @@ +cmake_minimum_required(VERSION 2.6) + +set(example java_masterslave) +set(sources + ${CMAKE_CURRENT_SOURCE_DIR}/FinalizeTask.java + ${CMAKE_CURRENT_SOURCE_DIR}/Forwarder.java + ${CMAKE_CURRENT_SOURCE_DIR}/Master.java + ${CMAKE_CURRENT_SOURCE_DIR}/Masterslave.java + ${CMAKE_CURRENT_SOURCE_DIR}/Slave.java + ) + +if(enable_java) + add_custom_command( + COMMENT "Building ${example}..." + OUTPUT ${example}_compiled + DEPENDS ${sources} SG_java_jar ${SIMGRID_JAR} + COMMAND ${JAVA_COMPILE} -cp ${SIMGRID_JAR} + -d ${CMAKE_CURRENT_BINARY_DIR}/.. ${sources} + COMMAND ${CMAKE_COMMAND} -E remove ${example}_compiled + COMMAND ${CMAKE_COMMAND} -E touch ${example}_compiled + ) + add_custom_target(${example} ALL DEPENDS ${example}_compiled) +endif() + +set(tesh_files + ${tesh_files} + ${CMAKE_CURRENT_SOURCE_DIR}/masterslave.tesh + PARENT_SCOPE + ) +set(xml_files + ${xml_files} + ${CMAKE_CURRENT_SOURCE_DIR}/deploy.xml + ${CMAKE_CURRENT_SOURCE_DIR}/masterslaveDeployment.xml + PARENT_SCOPE + ) +set(examples_src + ${examples_src} + ${sources} + PARENT_SCOPE + ) +set(bin_files + ${bin_files} + PARENT_SCOPE + ) +set(txt_files + ${txt_files} + ${CMAKE_CURRENT_SOURCE_DIR}/README + PARENT_SCOPE + ) diff --git a/examples/java/masterslave/masterslave.tesh b/examples/java/masterslave/masterslave.tesh index fe6de589c9..8664ff8400 100644 --- a/examples/java/masterslave/masterslave.tesh +++ b/examples/java/masterslave/masterslave.tesh @@ -2,7 +2,7 @@ ! output sort -$ java -cp .:${srcdir:=.}/examples:${srcdir:=.}/simgrid.jar masterslave/Masterslave ${srcdir:=.}/examples/platform.xml ${srcdir:=.}/examples/masterslave/masterslaveDeployment.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n" +$ java -cp ${classpath:=.} masterslave/Masterslave ./platform.xml ./masterslave/masterslaveDeployment.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n" > [ 0.000000] (1:masterslave.Master@Jacquelin) Hello! Got 7 slaves and 5 tasks to process > [ 0.000000] (2:masterslave.Forwarder@Jackson) Receiving on 'slave_0' > [ 0.000000] (3:masterslave.Forwarder@Casavant) Receiving on 'slave_1' diff --git a/examples/java/migration/CMakeLists.txt b/examples/java/migration/CMakeLists.txt new file mode 100644 index 0000000000..72108f0fe9 --- /dev/null +++ b/examples/java/migration/CMakeLists.txt @@ -0,0 +1,45 @@ +cmake_minimum_required(VERSION 2.6) + +set(example java_migration) +set(sources + ${CMAKE_CURRENT_SOURCE_DIR}/Emigrant.java + ${CMAKE_CURRENT_SOURCE_DIR}/Migration.java + ${CMAKE_CURRENT_SOURCE_DIR}/Policeman.java + ) + +if(enable_java) + add_custom_command( + COMMENT "Building ${example}..." + OUTPUT ${example}_compiled + DEPENDS ${sources} SG_java_jar ${SIMGRID_JAR} + COMMAND ${JAVA_COMPILE} -cp ${SIMGRID_JAR} + -d ${CMAKE_CURRENT_BINARY_DIR}/.. ${sources} + COMMAND ${CMAKE_COMMAND} -E remove ${example}_compiled + COMMAND ${CMAKE_COMMAND} -E touch ${example}_compiled + ) + add_custom_target(${example} ALL DEPENDS ${example}_compiled) +endif() + +set(tesh_files + ${tesh_files} + ${CMAKE_CURRENT_SOURCE_DIR}/migration.tesh + PARENT_SCOPE + ) +set(xml_files + ${xml_files} + ${CMAKE_CURRENT_SOURCE_DIR}/migrationDeployment.xml + PARENT_SCOPE + ) +set(examples_src + ${examples_src} + ${sources} + PARENT_SCOPE + ) +set(bin_files + ${bin_files} + PARENT_SCOPE + ) +set(txt_files + ${txt_files} + PARENT_SCOPE + ) diff --git a/examples/java/migration/migration.tesh b/examples/java/migration/migration.tesh index e40cb5041e..e43ca34f06 100644 --- a/examples/java/migration/migration.tesh +++ b/examples/java/migration/migration.tesh @@ -2,7 +2,7 @@ ! output sort -$ java -cp .:${srcdir:=.}/examples:${srcdir:=.}/simgrid.jar migration/Migration ${srcdir:=.}/examples/platform.xml ${srcdir:=.}/examples/migration/migrationDeployment.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n" +$ java -cp ${classpath:=.} migration/Migration ./platform.xml ./migration/migrationDeployment.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n" > [ 0.000000] (1:migration.Emigrant@Jacquelin) I'll look for a new job on another machine where the grass is greener. > [ 0.000000] (1:migration.Emigrant@Boivin) Yeah, found something to do > [ 1.000000] (2:migration.Policeman@Boivin) Wait a bit before migrating the emigrant. diff --git a/examples/java/mutualExclusion/CMakeLists.txt b/examples/java/mutualExclusion/CMakeLists.txt new file mode 100644 index 0000000000..4593c8c40c --- /dev/null +++ b/examples/java/mutualExclusion/CMakeLists.txt @@ -0,0 +1,49 @@ +cmake_minimum_required(VERSION 2.6) + +set(example java_mutualExclusion) +set(sources + ${CMAKE_CURRENT_SOURCE_DIR}/Coordinator.java + ${CMAKE_CURRENT_SOURCE_DIR}/GrantTask.java + ${CMAKE_CURRENT_SOURCE_DIR}/MutexCentral.java + ${CMAKE_CURRENT_SOURCE_DIR}/Node.java + ${CMAKE_CURRENT_SOURCE_DIR}/ReleaseTask.java + ${CMAKE_CURRENT_SOURCE_DIR}/RequestTask.java + ) + +if(enable_java) + add_custom_command( + COMMENT "Building ${example}..." + OUTPUT ${example}_compiled + DEPENDS ${sources} SG_java_jar ${SIMGRID_JAR} + COMMAND ${JAVA_COMPILE} -cp ${SIMGRID_JAR} + -d ${CMAKE_CURRENT_BINARY_DIR}/.. ${sources} + COMMAND ${CMAKE_COMMAND} -E remove ${example}_compiled + COMMAND ${CMAKE_COMMAND} -E touch ${example}_compiled + ) + add_custom_target(${example} ALL DEPENDS ${example}_compiled) +endif() + +set(tesh_files + ${tesh_files} + ${CMAKE_CURRENT_SOURCE_DIR}/mutualexclusion.tesh + PARENT_SCOPE + ) +set(xml_files + ${xml_files} + ${CMAKE_CURRENT_SOURCE_DIR}/mutex_centralized_deployment.xml + ${CMAKE_CURRENT_SOURCE_DIR}/ring3.xml + PARENT_SCOPE + ) +set(examples_src + ${examples_src} + ${sources} + PARENT_SCOPE + ) +set(bin_files + ${bin_files} + PARENT_SCOPE + ) +set(txt_files + ${txt_files} + PARENT_SCOPE + ) diff --git a/examples/java/mutualExclusion/centralized/Coordinator.java b/examples/java/mutualExclusion/Coordinator.java similarity index 100% rename from examples/java/mutualExclusion/centralized/Coordinator.java rename to examples/java/mutualExclusion/Coordinator.java diff --git a/examples/java/mutualExclusion/centralized/GrantTask.java b/examples/java/mutualExclusion/GrantTask.java similarity index 100% rename from examples/java/mutualExclusion/centralized/GrantTask.java rename to examples/java/mutualExclusion/GrantTask.java diff --git a/examples/java/mutualExclusion/centralized/MutexCentral.java b/examples/java/mutualExclusion/MutexCentral.java similarity index 100% rename from examples/java/mutualExclusion/centralized/MutexCentral.java rename to examples/java/mutualExclusion/MutexCentral.java diff --git a/examples/java/mutualExclusion/centralized/Node.java b/examples/java/mutualExclusion/Node.java similarity index 100% rename from examples/java/mutualExclusion/centralized/Node.java rename to examples/java/mutualExclusion/Node.java diff --git a/examples/java/mutualExclusion/centralized/ReleaseTask.java b/examples/java/mutualExclusion/ReleaseTask.java similarity index 100% rename from examples/java/mutualExclusion/centralized/ReleaseTask.java rename to examples/java/mutualExclusion/ReleaseTask.java diff --git a/examples/java/mutualExclusion/centralized/RequestTask.java b/examples/java/mutualExclusion/RequestTask.java similarity index 100% rename from examples/java/mutualExclusion/centralized/RequestTask.java rename to examples/java/mutualExclusion/RequestTask.java diff --git a/examples/java/mutualExclusion/centralized/mutex_centralized_deployment.xml b/examples/java/mutualExclusion/mutex_centralized_deployment.xml similarity index 100% rename from examples/java/mutualExclusion/centralized/mutex_centralized_deployment.xml rename to examples/java/mutualExclusion/mutex_centralized_deployment.xml diff --git a/examples/java/mutualExclusion/mutualexclusion.tesh b/examples/java/mutualExclusion/mutualexclusion.tesh index a8ca174e0c..d60949adc1 100644 --- a/examples/java/mutualExclusion/mutualexclusion.tesh +++ b/examples/java/mutualExclusion/mutualexclusion.tesh @@ -2,7 +2,7 @@ ! output sort -$ java -cp .:${srcdir:=.}/examples:${srcdir:=.}/simgrid.jar mutualExclusion/centralized/MutexCentral ${srcdir:=.}/examples/mutualExclusion/ring3.xml ${srcdir:=.}/examples/mutualExclusion/centralized/mutex_centralized_deployment.xml +$ java -cp ${classpath:=.} mutualExclusion/centralized/MutexCentral ./mutualExclusion/ring3.xml ./mutualExclusion/mutex_centralized_deployment.xml > [0.000000] [jmsg/INFO] Using regular java threads. Coroutines could speed your simulation up. > [0.007806] [jmsg/INFO] MSG_main finished; Cleaning up the simulation... > [Host 0:mutualExclusion.centralized.Coordinator:(1) 0.001301] [jmsg/INFO] Got a request from mutualExclusion.centralized.Node. Queue empty: grant it @@ -11,4 +11,4 @@ $ java -cp .:${srcdir:=.}/examples:${srcdir:=.}/simgrid.jar mutualExclusion/cent > [Host 1:mutualExclusion.centralized.Node:(2) 0.000000] [jmsg/INFO] Send a request to the coordinator > [Host 1:mutualExclusion.centralized.Node:(2) 0.001301] [jmsg/INFO] Wait for a grant from the coordinator > [Host 2:mutualExclusion.centralized.Node:(3) 0.000000] [jmsg/INFO] Send a request to the coordinator -> [Host 2:mutualExclusion.centralized.Node:(3) 0.003903] [jmsg/INFO] Wait for a grant from the coordinator \ No newline at end of file +> [Host 2:mutualExclusion.centralized.Node:(3) 0.003903] [jmsg/INFO] Wait for a grant from the coordinator diff --git a/examples/java/pingPong/CMakeLists.txt b/examples/java/pingPong/CMakeLists.txt new file mode 100644 index 0000000000..8756c210dd --- /dev/null +++ b/examples/java/pingPong/CMakeLists.txt @@ -0,0 +1,47 @@ +cmake_minimum_required(VERSION 2.6) + +set(example java_pingPong) +set(sources + ${CMAKE_CURRENT_SOURCE_DIR}/PingPongTask.java + ${CMAKE_CURRENT_SOURCE_DIR}/PingPongTest.java + ${CMAKE_CURRENT_SOURCE_DIR}/Receiver.java + ${CMAKE_CURRENT_SOURCE_DIR}/Sender.java + ) + +if(enable_java) + add_custom_command( + COMMENT "Building ${example}..." + OUTPUT ${example}_compiled + DEPENDS ${sources} SG_java_jar ${SIMGRID_JAR} + COMMAND ${JAVA_COMPILE} -cp ${SIMGRID_JAR} + -d ${CMAKE_CURRENT_BINARY_DIR}/.. ${sources} + COMMAND ${CMAKE_COMMAND} -E remove ${example}_compiled + COMMAND ${CMAKE_COMMAND} -E touch ${example}_compiled + ) + add_custom_target(${example} ALL DEPENDS ${example}_compiled) +endif() + +set(tesh_files + ${tesh_files} + ${CMAKE_CURRENT_SOURCE_DIR}/pingpong.tesh + PARENT_SCOPE + ) +set(xml_files + ${xml_files} + ${CMAKE_CURRENT_SOURCE_DIR}/pingPongDeployment.xml + PARENT_SCOPE + ) +set(examples_src + ${examples_src} + ${sources} + PARENT_SCOPE + ) +set(bin_files + ${bin_files} + PARENT_SCOPE + ) +set(txt_files + ${txt_files} + ${CMAKE_CURRENT_SOURCE_DIR}/README + PARENT_SCOPE + ) diff --git a/examples/java/pingPong/pingpong.tesh b/examples/java/pingPong/pingpong.tesh index 0100a58d50..80a83daf33 100644 --- a/examples/java/pingPong/pingpong.tesh +++ b/examples/java/pingPong/pingpong.tesh @@ -2,7 +2,7 @@ ! output sort -$ java -cp .:${srcdir:=.}/examples:${srcdir:=.}/simgrid.jar pingPong/PingPongTest ${srcdir:=.}/examples/platform.xml ${srcdir:=.}/examples/pingPong/pingPongDeployment.xml +$ java -cp ${classpath:=.} pingPong/PingPongTest ./platform.xml ./pingPong/pingPongDeployment.xml > [0.000000] [jmsg/INFO] Using regular java threads. Coroutines could speed your simulation up. > [1.048882] [jmsg/INFO] MSG_main finished; Cleaning up the simulation... > [Boivin:pingPong.Receiver:(2) 0.000000] [jmsg/INFO] hello! diff --git a/examples/java/priority/CMakeLists.txt b/examples/java/priority/CMakeLists.txt new file mode 100644 index 0000000000..a93beec0bb --- /dev/null +++ b/examples/java/priority/CMakeLists.txt @@ -0,0 +1,44 @@ +cmake_minimum_required(VERSION 2.6) + +set(example java_priority) +set(sources + ${CMAKE_CURRENT_SOURCE_DIR}/Priority.java + ${CMAKE_CURRENT_SOURCE_DIR}/Test.java + ) + +if(enable_java) + add_custom_command( + COMMENT "Building ${example}..." + OUTPUT ${example}_compiled + DEPENDS ${sources} SG_java_jar ${SIMGRID_JAR} + COMMAND ${JAVA_COMPILE} -cp ${SIMGRID_JAR} + -d ${CMAKE_CURRENT_BINARY_DIR}/.. ${sources} + COMMAND ${CMAKE_COMMAND} -E remove ${example}_compiled + COMMAND ${CMAKE_COMMAND} -E touch ${example}_compiled + ) + add_custom_target(${example} ALL DEPENDS ${example}_compiled) +endif() + +set(tesh_files + ${tesh_files} + ${CMAKE_CURRENT_SOURCE_DIR}/priority.tesh + PARENT_SCOPE + ) +set(xml_files + ${xml_files} + ${CMAKE_CURRENT_SOURCE_DIR}/priorityDeployment.xml + PARENT_SCOPE + ) +set(examples_src + ${examples_src} + ${sources} + PARENT_SCOPE + ) +set(bin_files + ${bin_files} + PARENT_SCOPE + ) +set(txt_files + ${txt_files} + PARENT_SCOPE + ) diff --git a/examples/java/priority/priority.tesh b/examples/java/priority/priority.tesh index f7ff99b039..28d96e9b02 100644 --- a/examples/java/priority/priority.tesh +++ b/examples/java/priority/priority.tesh @@ -2,7 +2,7 @@ ! output sort -$ java -cp .:${srcdir:=.}/examples:${srcdir:=.}/simgrid.jar priority/Priority ${srcdir:=.}/examples/platform.xml ${srcdir:=.}/examples/priority/priorityDeployment.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n" +$ java -cp ${classpath:=.} priority/Priority ./platform.xml ./priority/priorityDeployment.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n" > [ 0.000000] (1:priority.Test@Fafard) Hello! Running a task of size 7.6296E7 with priority 1.0 > [ 0.000000] (2:priority.Test@Fafard) Hello! Running a task of size 7.6296E7 with priority 2.0 > [ 0.833332] (2:priority.Test@Fafard) Goodbye now! diff --git a/examples/java/startKillTime/CMakeLists.txt b/examples/java/startKillTime/CMakeLists.txt new file mode 100644 index 0000000000..0a9716ac34 --- /dev/null +++ b/examples/java/startKillTime/CMakeLists.txt @@ -0,0 +1,48 @@ +cmake_minimum_required(VERSION 2.6) + +set(example java_startKillTime) +set(sources + ${CMAKE_CURRENT_SOURCE_DIR}/Master.java + ${CMAKE_CURRENT_SOURCE_DIR}/Slave.java + ${CMAKE_CURRENT_SOURCE_DIR}/StartKillTime.java + ) + +if(enable_java) + add_custom_command( + COMMENT "Building ${example}..." + OUTPUT ${example}_compiled + DEPENDS ${sources} SG_java_jar ${SIMGRID_JAR} + COMMAND ${JAVA_COMPILE} -cp ${SIMGRID_JAR} + -d ${CMAKE_CURRENT_BINARY_DIR}/.. ${sources} + COMMAND ${CMAKE_COMMAND} -E remove ${example}_compiled + COMMAND ${CMAKE_COMMAND} -E touch ${example}_compiled + ) + add_custom_target(${example} ALL DEPENDS ${example}_compiled) +endif() + +set(tesh_files + ${tesh_files} + ${CMAKE_CURRENT_SOURCE_DIR}/startKillTime.tesh + PARENT_SCOPE + ) +set(xml_files + ${xml_files} + ${CMAKE_CURRENT_SOURCE_DIR}/deployment.xml + ${CMAKE_CURRENT_SOURCE_DIR}/deployment_kill.xml + ${CMAKE_CURRENT_SOURCE_DIR}/deployment_start.xml + ${CMAKE_CURRENT_SOURCE_DIR}/deployment_start_kill.xml + PARENT_SCOPE + ) +set(examples_src + ${examples_src} + ${sources} + PARENT_SCOPE + ) +set(bin_files + ${bin_files} + PARENT_SCOPE + ) +set(txt_files + ${txt_files} + PARENT_SCOPE + ) diff --git a/examples/java/startKillTime/startKillTime.tesh b/examples/java/startKillTime/startKillTime.tesh index edbe382bd8..ecee9fffca 100644 --- a/examples/java/startKillTime/startKillTime.tesh +++ b/examples/java/startKillTime/startKillTime.tesh @@ -1,5 +1,5 @@ #! ./tesh -$ java -cp .:${srcdir:=.}/examples:${srcdir:=.}/simgrid.jar startKillTime/StartKillTime ${srcdir:=.}/examples/platform.xml ${srcdir:=.}/examples/startKillTime/deployment_start_kill.xml +$ java -cp ${classpath:=.} startKillTime/StartKillTime ./platform.xml ./startKillTime/deployment_start_kill.xml > [0.000000] [jmsg/INFO] Using regular java threads. Coroutines could speed your simulation up. > [Jacquelin:startKillTime.Master:(1) 0.000000] [jmsg/INFO] Hello! > [Boivin:startKillTime.Slave:(2) 1.000000] [jmsg/INFO] Hello! diff --git a/examples/java/suspend/CMakeLists.txt b/examples/java/suspend/CMakeLists.txt new file mode 100644 index 0000000000..0ac2dfd6a7 --- /dev/null +++ b/examples/java/suspend/CMakeLists.txt @@ -0,0 +1,45 @@ +cmake_minimum_required(VERSION 2.6) + +set(example java_suspend) +set(sources + ${CMAKE_CURRENT_SOURCE_DIR}/DreamMaster.java + ${CMAKE_CURRENT_SOURCE_DIR}/LazyGuy.java + ${CMAKE_CURRENT_SOURCE_DIR}/Suspend.java + ) + +if(enable_java) + add_custom_command( + COMMENT "Building ${example}..." + OUTPUT ${example}_compiled + DEPENDS ${sources} SG_java_jar ${SIMGRID_JAR} + COMMAND ${JAVA_COMPILE} -cp ${SIMGRID_JAR} + -d ${CMAKE_CURRENT_BINARY_DIR}/.. ${sources} + COMMAND ${CMAKE_COMMAND} -E remove ${example}_compiled + COMMAND ${CMAKE_COMMAND} -E touch ${example}_compiled + ) + add_custom_target(${example} ALL DEPENDS ${example}_compiled) +endif() + +set(tesh_files + ${tesh_files} + ${CMAKE_CURRENT_SOURCE_DIR}/suspend.tesh + PARENT_SCOPE + ) +set(xml_files + ${xml_files} + ${CMAKE_CURRENT_SOURCE_DIR}/suspendDeployment.xml + PARENT_SCOPE + ) +set(examples_src + ${examples_src} + ${sources} + PARENT_SCOPE + ) +set(bin_files + ${bin_files} + PARENT_SCOPE + ) +set(txt_files + ${txt_files} + PARENT_SCOPE + ) diff --git a/examples/java/suspend/suspend.tesh b/examples/java/suspend/suspend.tesh index c6ec5f76a6..913f159f77 100644 --- a/examples/java/suspend/suspend.tesh +++ b/examples/java/suspend/suspend.tesh @@ -1,7 +1,7 @@ #! ./tesh ! output sort -$ java -cp .:${srcdir:=.}/examples:${srcdir:=.}/simgrid.jar suspend/Suspend ${srcdir:=.}/examples/platform.xml ${srcdir:=.}/examples/suspend/suspendDeployment.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n" +$ java -cp ${classpath:=.} suspend/Suspend ./platform.xml ./suspend/suspendDeployment.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n" > [ 0.000000] (1:suspend.DreamMaster@Jacquelin) Let's create a lazy guy. > [ 0.000000] (1:suspend.DreamMaster@Jacquelin) Let's wait a little bit... > [ 0.000000] (2:Lazy@Jacquelin) Nobody's watching me ? Let's go to sleep. diff --git a/examples/java/tracing/CMakeLists.txt b/examples/java/tracing/CMakeLists.txt new file mode 100644 index 0000000000..f035001a36 --- /dev/null +++ b/examples/java/tracing/CMakeLists.txt @@ -0,0 +1,47 @@ +cmake_minimum_required(VERSION 2.6) + +set(example java_tracing) +set(sources + ${CMAKE_CURRENT_SOURCE_DIR}/PingPongTask.java + ${CMAKE_CURRENT_SOURCE_DIR}/Receiver.java + ${CMAKE_CURRENT_SOURCE_DIR}/Sender.java + ${CMAKE_CURRENT_SOURCE_DIR}/TracingTest.java + ) + +if(enable_java) + add_custom_command( + COMMENT "Building ${example}..." + OUTPUT ${example}_compiled + DEPENDS ${sources} SG_java_jar ${SIMGRID_JAR} + COMMAND ${JAVA_COMPILE} -cp ${SIMGRID_JAR} + -d ${CMAKE_CURRENT_BINARY_DIR}/.. ${sources} + COMMAND ${CMAKE_COMMAND} -E remove ${example}_compiled + COMMAND ${CMAKE_COMMAND} -E touch ${example}_compiled + ) + add_custom_target(${example} ALL DEPENDS ${example}_compiled) +endif() + +set(tesh_files + ${tesh_files} + ${CMAKE_CURRENT_SOURCE_DIR}/tracingPingPong.tesh + PARENT_SCOPE + ) +set(xml_files + ${xml_files} + ${CMAKE_CURRENT_SOURCE_DIR}/tracingPingPongDeployment.xml + PARENT_SCOPE + ) +set(examples_src + ${examples_src} + ${sources} + PARENT_SCOPE + ) +set(bin_files + ${bin_files} + PARENT_SCOPE + ) +set(txt_files + ${txt_files} + ${CMAKE_CURRENT_SOURCE_DIR}/README + PARENT_SCOPE + ) diff --git a/examples/java/tracing/tracingPingPong.tesh b/examples/java/tracing/tracingPingPong.tesh index 3ecaee0cbe..661fd4ee0a 100644 --- a/examples/java/tracing/tracingPingPong.tesh +++ b/examples/java/tracing/tracingPingPong.tesh @@ -2,7 +2,7 @@ ! output sort -$ java -cp .:${srcdir:=.}/examples:${srcdir:=.}/simgrid.jar tracing/TracingTest ${srcdir:=.}/examples/platform.xml ${srcdir:=.}/examples/tracing/tracingPingPongDeployment.xml --cfg=tracing:1 --cfg=tracing/filename:simulation.trace --cfg=tracing/platform:1 +$ java -cp ${classpath:=.} tracing/TracingTest ./platform.xml ./tracing/tracingPingPongDeployment.xml --cfg=tracing:1 --cfg=tracing/filename:simulation.trace --cfg=tracing/platform:1 > [0.000000] [jmsg/INFO] Using regular java threads. Coroutines could speed your simulation up. > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'tracing' to '1' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'tracing/filename' to 'simulation.trace' diff --git a/examples/msg/chainsend/broadcaster.c b/examples/msg/chainsend/broadcaster.c index 8ab4f44644..fc68dab4d2 100644 --- a/examples/msg/chainsend/broadcaster.c +++ b/examples/msg/chainsend/broadcaster.c @@ -48,8 +48,7 @@ int broadcaster_build_chain(broadcaster_t bc) XBT_DEBUG("Building chain -- broadcaster:\"%s\" dest:\"%s\" prev:\"%s\" next:\"%s\"", me, current_host, prev, next); /* Send message to current peer */ - task = task_message_chain_new(me, current_host, prev, next); - //MSG_task_set_category(task, current_host); + task = task_message_chain_new(me, current_host, prev, next, bc->piece_count); MSG_task_send(task, current_host); last = current_host; @@ -77,27 +76,6 @@ int broadcaster_send_file(broadcaster_t bc) return MSG_OK; } -int broadcaster_finish(broadcaster_t bc) -{ - msg_task_t task = NULL; - const char *me = "host0"; /* FIXME: hardcoded*/ /*MSG_host_get_name(MSG_host_self());*/ - const char *current_host = NULL; - char **cur = NULL; - - xbt_dynar_iterator_seek(bc->it, 0); - - /* Send goodbye message to every peer in the order generated by iterator it */ - for (cur = (char**)xbt_dynar_iterator_next(bc->it); cur != NULL; cur = (char**)xbt_dynar_iterator_next(bc->it)) { - /* Send message to current peer */ - current_host = *cur; - task = task_message_end_data_new(me, current_host); - //MSG_task_set_category(task, current_host); - MSG_task_send(task, current_host); - } - - return MSG_OK; -} - broadcaster_t broadcaster_init(xbt_dynar_t host_list, unsigned int piece_count) { int status; @@ -148,7 +126,6 @@ int broadcaster(int argc, char *argv[]) /* TODO: Error checking */ status = broadcaster_send_file(bc); - status = broadcaster_finish(bc); broadcaster_destroy(bc); diff --git a/examples/msg/chainsend/chainsend.tesh b/examples/msg/chainsend/chainsend.tesh index 098df7bbb2..665323578b 100644 --- a/examples/msg/chainsend/chainsend.tesh +++ b/examples/msg/chainsend/chainsend.tesh @@ -5,12 +5,12 @@ p Testing the chainsend MSG implementation ! timeout 60 ! output sort $ $SG_TEST_EXENV ${bindir:=.}/chainsend ${srcdir:=.}/platform_chainsend.xml ${srcdir:=.}/deployment_tesh.xml "--log=root.fmt:[%12.6r]%e(%i:%P@%h)%e%m%n" -> [ 5.683972] (2:peer@host1) ### 5.683972 536870912 bytes (Avg 90.077856 MB/s); copy finished (simulated). -> [ 6.936704] (3:peer@host2) ### 6.936704 536870912 bytes (Avg 73.810274 MB/s); copy finished (simulated). -> [ 6.951030] (4:peer@host3) ### 6.951030 536870912 bytes (Avg 73.658146 MB/s); copy finished (simulated). -> [ 6.951486] (5:peer@host4) ### 6.951486 536870912 bytes (Avg 73.653321 MB/s); copy finished (simulated). -> [ 7.170536] (9:peer@host8) ### 7.170536 536870912 bytes (Avg 71.403309 MB/s); copy finished (simulated). -> [ 7.952668] (6:peer@host5) ### 7.952668 536870912 bytes (Avg 64.380908 MB/s); copy finished (simulated). -> [ 7.972487] (7:peer@host6) ### 7.972486 536870912 bytes (Avg 64.220868 MB/s); copy finished (simulated). -> [ 8.972948] (0:@) Total simulation time: 8.972948e+00 -> [ 8.972948] (8:peer@host7) ### 8.972948 536870912 bytes (Avg 57.060399 MB/s); copy finished (simulated). +> [ 0.125671] (2:peer@host1) ### 0.125671 16777216 bytes (Avg 127.316430 MB/s); copy finished (simulated). +> [ 0.157894] (3:peer@host2) ### 0.157894 16777216 bytes (Avg 101.333796 MB/s); copy finished (simulated). +> [ 0.158420] (4:peer@host3) ### 0.158420 16777216 bytes (Avg 100.997152 MB/s); copy finished (simulated). +> [ 0.159139] (5:peer@host4) ### 0.159139 16777216 bytes (Avg 100.541154 MB/s); copy finished (simulated). +> [ 0.191593] (6:peer@host5) ### 0.191593 16777216 bytes (Avg 83.510414 MB/s); copy finished (simulated). +> [ 0.191989] (7:peer@host6) ### 0.191989 16777216 bytes (Avg 83.338080 MB/s); copy finished (simulated). +> [ 0.229841] (0:@) Total simulation time: 2.298413e-01 +> [ 0.229841] (8:peer@host7) ### 0.229841 16777216 bytes (Avg 69.613244 MB/s); copy finished (simulated). +> [ 0.229841] (9:peer@host8) ### 0.229841 16777216 bytes (Avg 69.613244 MB/s); copy finished (simulated). diff --git a/examples/msg/chainsend/deployment_tesh.xml b/examples/msg/chainsend/deployment_tesh.xml index 72825f542c..7f4b1f077d 100644 --- a/examples/msg/chainsend/deployment_tesh.xml +++ b/examples/msg/chainsend/deployment_tesh.xml @@ -5,7 +5,7 @@ - + diff --git a/examples/msg/chainsend/messages.c b/examples/msg/chainsend/messages.c index 0bc23cd6c0..c91243c9a4 100644 --- a/examples/msg/chainsend/messages.c +++ b/examples/msg/chainsend/messages.c @@ -11,12 +11,13 @@ msg_task_t task_message_new(e_message_type type, unsigned int len, const char *i return task; } -msg_task_t task_message_chain_new(const char *issuer_hostname, const char *mailbox, const char* prev, const char *next) +msg_task_t task_message_chain_new(const char *issuer_hostname, const char *mailbox, const char* prev, const char *next, const unsigned int num_pieces) { msg_task_t task = task_message_new(MESSAGE_BUILD_CHAIN, MESSAGE_BUILD_CHAIN_SIZE, issuer_hostname, mailbox); message_t msg = MSG_task_get_data(task); msg->prev_hostname = prev; msg->next_hostname = next; + msg->num_pieces = num_pieces; return task; } @@ -24,8 +25,6 @@ msg_task_t task_message_chain_new(const char *issuer_hostname, const char *mailb msg_task_t task_message_data_new(const char *issuer_hostname, const char *mailbox, const char *block, unsigned int len) { msg_task_t task = task_message_new(MESSAGE_SEND_DATA, MESSAGE_SEND_DATA_HEADER_SIZE + len, issuer_hostname, mailbox); - //if (strcmp(mailbox, "host4") == 0) - //MSG_task_set_category(task, mailbox); message_t msg = MSG_task_get_data(task); msg->data_block = block; msg->data_length = len; @@ -33,11 +32,6 @@ msg_task_t task_message_data_new(const char *issuer_hostname, const char *mailbo return task; } -msg_task_t task_message_end_data_new(const char *issuer_hostname, const char *mailbox) -{ - return task_message_new(MESSAGE_END_DATA, MESSAGE_END_DATA_SIZE, issuer_hostname, mailbox); -} - void task_message_delete(void *task) { message_t msg = MSG_task_get_data(task); diff --git a/examples/msg/chainsend/messages.h b/examples/msg/chainsend/messages.h index 52ba874d33..7118d29f93 100644 --- a/examples/msg/chainsend/messages.h +++ b/examples/msg/chainsend/messages.h @@ -11,8 +11,7 @@ /* Messages enum */ typedef enum { MESSAGE_BUILD_CHAIN = 0, - MESSAGE_SEND_DATA, - MESSAGE_END_DATA + MESSAGE_SEND_DATA } e_message_type; /* Message struct */ @@ -24,13 +23,13 @@ typedef struct s_message { const char *next_hostname; const char *data_block; unsigned int data_length; + unsigned int num_pieces; } s_message_t, *message_t; /* Message methods */ msg_task_t task_message_new(e_message_type type, unsigned int len, const char *issuer_hostname, const char *mailbox); -msg_task_t task_message_chain_new(const char *issuer_hostname, const char *mailbox, const char* prev, const char *next); +msg_task_t task_message_chain_new(const char *issuer_hostname, const char *mailbox, const char* prev, const char *next, const unsigned int num_pieces); msg_task_t task_message_data_new(const char *issuer_hostname, const char *mailbox, const char *block, unsigned int len); -msg_task_t task_message_end_data_new(const char *issuer_hostname, const char *mailbox); void task_message_delete(void *); #endif /* KADEPLOY_MESSAGES_H */ diff --git a/examples/msg/chainsend/peer.c b/examples/msg/chainsend/peer.c index 43c055de5e..4d0f9a07df 100644 --- a/examples/msg/chainsend/peer.c +++ b/examples/msg/chainsend/peer.c @@ -11,6 +11,7 @@ void peer_init_chain(peer_t peer, message_t msg) { peer->prev = msg->prev_hostname; peer->next = msg->next_hostname; + peer->total_pieces = msg->num_pieces; peer->init = 1; } @@ -39,11 +40,10 @@ int peer_execute_task(peer_t peer, msg_task_t task) peer_forward_msg(peer, msg); peer->pieces++; peer->bytes += msg->data_length; - break; - case MESSAGE_END_DATA: - xbt_assert(peer->init, "peer_execute_task() failed: got msg_type %d before initialization", msg->type); - done = 1; - XBT_DEBUG("%d pieces receieved", peer->pieces); + if (peer->pieces >= peer->total_pieces) { + XBT_DEBUG("%d pieces receieved", peer->pieces); + done = 1; + } break; } @@ -91,7 +91,6 @@ void peer_init(peer_t p, int argc, char *argv[]) p->next = NULL; p->pieces = 0; p->bytes = 0; - p->close_asap = 0; p->pending_recvs = xbt_dynar_new(sizeof(msg_comm_t), NULL); p->pending_sends = xbt_dynar_new(sizeof(msg_comm_t), NULL); p->me = xbt_new(char, HOSTNAME_LENGTH); @@ -105,17 +104,18 @@ void peer_init(peer_t p, int argc, char *argv[]) void peer_shutdown(peer_t p) { - float start_time = MSG_get_clock(); - float end_time = start_time + PEER_SHUTDOWN_DEADLINE; + unsigned int size = xbt_dynar_length(p->pending_sends); + unsigned int idx; + msg_comm_t *comms = xbt_new(msg_comm_t, size); - XBT_DEBUG("Waiting for sends to finish before shutdown..."); - /* MSG_comm_waitall(p->pending_sends, PEER_SHUTDOWN_DEADLINE); FIXME: this doesn't work */ - while (xbt_dynar_length(p->pending_sends) && MSG_get_clock() < end_time) { - process_pending_connections(p->pending_sends); - MSG_process_sleep(1); + for (idx = 0; idx < size; idx++) { + comms[idx] = xbt_dynar_get_as(p->pending_sends, idx, msg_comm_t); } - xbt_assert(xbt_dynar_length(p->pending_sends) == 0, "Shutdown failed, sends still pending after deadline"); + XBT_DEBUG("Waiting for sends to finish before shutdown..."); + MSG_comm_waitall(comms, size, PEER_SHUTDOWN_DEADLINE); + + xbt_free(comms); } void peer_delete(peer_t p) diff --git a/examples/msg/chainsend/peer.h b/examples/msg/chainsend/peer.h index 8727e15f36..fd20ecac1a 100644 --- a/examples/msg/chainsend/peer.h +++ b/examples/msg/chainsend/peer.h @@ -19,7 +19,7 @@ typedef struct s_peer { unsigned long long bytes; xbt_dynar_t pending_recvs; xbt_dynar_t pending_sends; - int close_asap; /* TODO: unused */ + unsigned int total_pieces; } s_peer_t, *peer_t; /* Peer: helper functions */ diff --git a/examples/msg/mc/bugged1_liveness.c b/examples/msg/mc/bugged1_liveness.c index b646d82179..458f5093d2 100644 --- a/examples/msg/mc/bugged1_liveness.c +++ b/examples/msg/mc/bugged1_liveness.c @@ -39,7 +39,6 @@ int coordinator(int argc, char *argv[]) } else { if(strcmp(req, "2") == 0){ XBT_INFO("CS idle. Grant immediatly"); - MC_compare(); answer = MSG_task_create("grant", 0, 1000, NULL); MSG_task_send(answer, req); CS_used = 1; diff --git a/examples/msg/mc/bugged1_liveness.tesh b/examples/msg/mc/bugged1_liveness.tesh index ac0a2cbcd2..01dc2d6565 100644 --- a/examples/msg/mc/bugged1_liveness.tesh +++ b/examples/msg/mc/bugged1_liveness.tesh @@ -13,11 +13,7 @@ $ ${bindir:=.}/bugged1_liveness --cfg=model-check:1 --cfg=contexts/factory:ucont > [ 0.000000] (1:coordinator@Tremblay) CS release. resource now idle > [ 0.000000] (3:client@Boivin) Ask the request > [ 0.000000] (1:coordinator@Tremblay) CS idle. Grant immediatly -> [ 0.000000] (3:client@Boivin) 2 got the answer. Sleep a bit and release it -> [ 0.000000] (1:coordinator@Tremblay) CS release. resource now idle -> [ 0.000000] (3:client@Boivin) Ask the request -> [ 0.000000] (1:coordinator@Tremblay) CS idle. Grant immediatly -> [ 0.000000] (0:@) Next pair (depth = 33, 2 interleave) already reached ! +> [ 0.000000] (0:@) Next pair (depth = 25, 2 interleave) already reached ! > [ 0.000000] (0:@) *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* > [ 0.000000] (0:@) | ACCEPTANCE CYCLE | > [ 0.000000] (0:@) *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* @@ -46,14 +42,6 @@ $ ${bindir:=.}/bugged1_liveness --cfg=model-check:1 --cfg=contexts/factory:ucont > [ 0.000000] (0:@) [(3)client] Wait (comm=(verbose only) [(3)client -> (1)coordinator]) > [ 0.000000] (0:@) [(3)client] iRecv (dst=client, buff=(verbose only), size=(verbose only)) > [ 0.000000] (0:@) [(1)coordinator] Wait (comm=(verbose only) [(1)coordinator -> (3)client]) -> [ 0.000000] (0:@) [(1)coordinator] iRecv (dst=coordinator, buff=(verbose only), size=(verbose only)) -> [ 0.000000] (0:@) [(3)client] Wait (comm=(verbose only) [(1)coordinator -> (3)client]) -> [ 0.000000] (0:@) [(3)client] iSend (src=client, buff=(verbose only), size=(verbose only)) -> [ 0.000000] (0:@) [(1)coordinator] Wait (comm=(verbose only) [(3)client -> (1)coordinator]) -> [ 0.000000] (0:@) [(1)coordinator] iRecv (dst=coordinator, buff=(verbose only), size=(verbose only)) -> [ 0.000000] (0:@) [(3)client] Wait (comm=(verbose only) [(3)client -> (1)coordinator]) -> [ 0.000000] (0:@) [(3)client] iSend (src=client, buff=(verbose only), size=(verbose only)) -> [ 0.000000] (0:@) [(1)coordinator] Wait (comm=(verbose only) [(3)client -> (1)coordinator]) -> [ 0.000000] (0:@) Expanded pairs = 34 -> [ 0.000000] (0:@) Visited pairs = 32 -> [ 0.000000] (0:@) Expanded / Visited = 0.941176 +> [ 0.000000] (0:@) Expanded pairs = 26 +> [ 0.000000] (0:@) Visited pairs = 24 +> [ 0.000000] (0:@) Expanded / Visited = 0.923077 \ No newline at end of file diff --git a/examples/msg/mc/chord/chord_neverjoin.tesh b/examples/msg/mc/chord/chord_neverjoin.tesh index 32c6d21706..24427a49dd 100644 --- a/examples/msg/mc/chord/chord_neverjoin.tesh +++ b/examples/msg/mc/chord/chord_neverjoin.tesh @@ -10,7 +10,7 @@ $ ${bindir:=.}/chord_liveness --cfg=model-check:1 --cfg=contexts/factory:ucontex > [ 0.000000] (3:node@Jacquelin) A transfer has occured > [ 0.000000] (3:node@Jacquelin) The task was successfully received by node 1 > [ 0.000000] (1:node@Jean_Yves) Node 14 joined the ring -> [ 0.000000] (0:@) Next pair (depth = 12, 2 interleave) already reached ! +> [ 0.000000] (0:@) Next pair (depth = 11, 2 interleave) already reached ! > [ 0.000000] (0:@) *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* > [ 0.000000] (0:@) | ACCEPTANCE CYCLE | > [ 0.000000] (0:@) *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* @@ -25,7 +25,6 @@ $ ${bindir:=.}/chord_liveness --cfg=model-check:1 --cfg=contexts/factory:ucontex > [ 0.000000] (0:@) [(1)node] Wait (comm=(verbose only) [(3)node -> (1)node]) > [ 0.000000] (0:@) [(1)node] iRecv (dst=node, buff=(verbose only), size=(verbose only)) > [ 0.000000] (0:@) [(1)node] Test FALSE (comm=(verbose only)) -> [ 0.000000] (0:@) [(1)node] Test FALSE (comm=(verbose only)) -> [ 0.000000] (0:@) Expanded pairs = 16 -> [ 0.000000] (0:@) Visited pairs = 11 -> [ 0.000000] (0:@) Expanded / Visited = 0.687500 \ No newline at end of file +> [ 0.000000] (0:@) Expanded pairs = 14 +> [ 0.000000] (0:@) Visited pairs = 10 +> [ 0.000000] (0:@) Expanded / Visited = 0.714286 diff --git a/examples/simdag/CMakeLists.txt b/examples/simdag/CMakeLists.txt index afb0ab6884..91c8327225 100644 --- a/examples/simdag/CMakeLists.txt +++ b/examples/simdag/CMakeLists.txt @@ -9,7 +9,10 @@ add_executable(sd_avail sd_avail.c) add_executable(sd_typed_tasks_test sd_typed_tasks_test.c) add_executable(sd_comm_throttling sd_comm_throttling.c) add_executable(sd_seq_access sd_seq_access.c) -add_executable(simdag_tracing simdag_trace.c) + +if (HAVE_TRACING) + add_executable(simdag_tracing simdag_trace.c) +endif() ### Add definitions for compile if(NOT WIN32) @@ -20,7 +23,10 @@ if(NOT WIN32) target_link_libraries(sd_typed_tasks_test simgrid pthread m ) target_link_libraries(sd_comm_throttling simgrid pthread m ) target_link_libraries(sd_seq_access simgrid pthread m ) - target_link_libraries(simdag_tracing simgrid pthread m ) + + if (HAVE_TRACING) + target_link_libraries(simdag_tracing simgrid pthread m ) + endif() add_custom_command(TARGET ex_sd_test POST_BUILD @@ -40,8 +46,10 @@ else() target_link_libraries(sd_typed_tasks_test simgrid) target_link_libraries(sd_comm_throttling simgrid) target_link_libraries(sd_seq_access simgrid) - target_link_libraries(simdag_tracing simgrid) - + if (HAVE_TRACING) + target_link_libraries(simdag_tracing simgrid) + endif() + add_custom_command(TARGET ex_sd_test POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/ex_sd_test.exe ${CMAKE_CURRENT_BINARY_DIR}/sd_test.exe diff --git a/include/surf/simgrid_dtd.h b/include/surf/simgrid_dtd.h index 47e90bbc75..c9c5b906e9 100644 --- a/include/surf/simgrid_dtd.h +++ b/include/surf/simgrid_dtd.h @@ -2,8 +2,8 @@ * * This program was generated with the FleXML XML processor generator. * FleXML is Copyright (C) 1999-2005 Kristoffer Rose. All rights reserved. - * FleXML is Copyright (C) 2003-2011 Martin Quinson. All rights reserved. - * (Id: flexml.pl,v 1.69 2012/12/20 00:13:40 mquinson Exp). + * FleXML is Copyright (C) 2003-2013 Martin Quinson. All rights reserved. + * (1.9.6). * * There are two, intertwined parts to this program, part A and part B. * @@ -12,7 +12,7 @@ * * Some parts, here collectively called "Part A", are found in the * FleXML package. They are Copyright (C) 1999-2005 Kristoffer Rose - * and Copyright (C) 2003-2011 Martin Quinson. All rights reserved. + * and Copyright (C) 2003-2013 Martin Quinson. All rights reserved. * * You can redistribute, use, perform, display and/or modify "Part A" * provided the following two conditions hold: diff --git a/include/xbt/graphxml.h b/include/xbt/graphxml.h index 824144c7c0..272239c1e8 100644 --- a/include/xbt/graphxml.h +++ b/include/xbt/graphxml.h @@ -2,8 +2,8 @@ * * This program was generated with the FleXML XML processor generator. * FleXML is Copyright (C) 1999-2005 Kristoffer Rose. All rights reserved. - * FleXML is Copyright (C) 2003-2011 Martin Quinson. All rights reserved. - * (Id: flexml.pl,v 1.69 2012/12/20 00:13:40 mquinson Exp). + * FleXML is Copyright (C) 2003-2013 Martin Quinson. All rights reserved. + * (1.9.6). * * There are two, intertwined parts to this program, part A and part B. * @@ -12,7 +12,7 @@ * * Some parts, here collectively called "Part A", are found in the * FleXML package. They are Copyright (C) 1999-2005 Kristoffer Rose - * and Copyright (C) 2003-2011 Martin Quinson. All rights reserved. + * and Copyright (C) 2003-2013 Martin Quinson. All rights reserved. * * You can redistribute, use, perform, display and/or modify "Part A" * provided the following two conditions hold: diff --git a/include/xbt/mmalloc.h b/include/xbt/mmalloc.h index c259bf6d2e..6c520bfe1e 100644 --- a/include/xbt/mmalloc.h +++ b/include/xbt/mmalloc.h @@ -61,11 +61,12 @@ XBT_PUBLIC( xbt_mheap_t ) mmalloc_get_default_md(void); void mmalloc_set_current_heap(xbt_mheap_t new_heap); xbt_mheap_t mmalloc_get_current_heap(void); -int mmalloc_compare_heap(xbt_mheap_t heap1, xbt_mheap_t heap2, xbt_dynar_t *stacks1, xbt_dynar_t *stacks2, xbt_dynar_t equals); +int mmalloc_compare_heap(xbt_mheap_t heap1, xbt_mheap_t heap2); int mmalloc_linear_compare_heap(xbt_mheap_t heap1, xbt_mheap_t heap2); -void init_heap_information(xbt_mheap_t heap1, xbt_mheap_t heap2); -void match_equals(xbt_dynar_t list, xbt_dynar_t equals); -int compare_area(void *area1, void* area2, xbt_dynar_t previous, xbt_dynar_t equals); +void init_heap_information(xbt_mheap_t heap1, xbt_mheap_t heap2, xbt_dynar_t to_ignore1, xbt_dynar_t to_ignore2); +void match_equals(xbt_dynar_t list); +int compare_area(void *area1, void* area2, xbt_dynar_t previous); +void reset_heap_information(void); void mmalloc_backtrace_block_display(void* heapinfo, int block); void mmalloc_backtrace_fragment_display(void* heapinfo, int block, int frag); @@ -73,6 +74,6 @@ void mmalloc_backtrace_display(void *addr); int is_free_area(void *area, xbt_mheap_t heap); -size_t mmalloc_get_chunks_used(xbt_mheap_t); +size_t mmalloc_get_bytes_used(xbt_mheap_t); #endif /* MMALLOC_H */ diff --git a/simgrid-java/.gitignore b/simgrid-java/.gitignore deleted file mode 100644 index 7cae982e58..0000000000 --- a/simgrid-java/.gitignore +++ /dev/null @@ -1,13 +0,0 @@ -*.tag -Doxyfile -footer.html -doc/html -*.class -simgrid.jar -libSG_java.so* -build/ -*.dylib -.project -.cproject -.classpath -*~ \ No newline at end of file diff --git a/simgrid-java/CMakeLists.txt b/simgrid-java/CMakeLists.txt deleted file mode 100644 index 230d6714df..0000000000 --- a/simgrid-java/CMakeLists.txt +++ /dev/null @@ -1,614 +0,0 @@ -cmake_minimum_required(VERSION 2.8) -project(SimGrid-Java C) -set(UPDATE_TYPE svn) -set(CMAKE_C_FLAGS "" CACHE TYPE INTERNAL FORCE) -set(CMAKE_EXE_LINKER_FLAGS "" CACHE TYPE INTERNAL FORCE) -set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_HOME_DIRECTORY}/lib") -set(soversion 1) - -set(SIMGRID_JAVA_VERSION_MAJOR "3") -set(SIMGRID_JAVA_VERSION_MINOR "10") -set(SIMGRID_JAVA_VERSION_PATCH "0") -set(DIST_NAME ${PROJECT_NAME}-${SIMGRID_JAVA_VERSION_MAJOR}.${SIMGRID_JAVA_VERSION_MINOR}.${SIMGRID_JAVA_VERSION_PATCH}) - -######## -## GCC # -######## -exec_program("${CMAKE_C_COMPILER} --version" OUTPUT_VARIABLE "COMPILER_C_VERSION") -string(REGEX MATCH "[0-9].[0-9].[0-9]" COMPILER_C_VERSION "${COMPILER_C_VERSION}") -string(REGEX MATCH "^[0-9].[0-9]" COMPILER_C_VERSION_MAJOR_MINOR "${COMPILER_C_VERSION}") -string(REPLACE "${COMPILER_C_VERSION_MAJOR_MINOR}." "" COMPILER_C_VERSION_PATCH "${COMPILER_C_VERSION}") - -######## -## GIT # -######## -if(EXISTS ${CMAKE_HOME_DIRECTORY}/.git/ AND NOT WIN32) - exec_program("git remote | head -n 1" OUTPUT_VARIABLE remote RETURN_VALUE ret) - exec_program("git config --get remote.${remote}.url" OUTPUT_VARIABLE url RETURN_VALUE ret) - - if(url) - exec_program("git --git-dir=${CMAKE_HOME_DIRECTORY}/.git log --oneline -1" OUTPUT_VARIABLE "GIT_VERSION") - message(STATUS "Git version: ${GIT_VERSION}") - exec_program("git --git-dir=${CMAKE_HOME_DIRECTORY}/.git log -n 1 --format=%ai ." OUTPUT_VARIABLE "GIT_DATE") - message(STATUS "Git date: ${GIT_DATE}") - string(REGEX REPLACE " .*" "" GIT_VERSION "${GIT_VERSION}") - STRING(REPLACE " +0000" "" GIT_DATE ${GIT_DATE}) - STRING(REPLACE " " "~" GIT_DATE ${GIT_DATE}) - STRING(REPLACE ":" "-" GIT_DATE ${GIT_DATE}) - endif(url) -endif(EXISTS ${CMAKE_HOME_DIRECTORY}/.git/ AND NOT WIN32) - -######### -# CDASH # -######### -SET(DROP_METHOD "http") -SET(DROP_SITE "cdash.inria.fr/CDash") -SET(DROP_LOCATION "/submit.php?project=simgrid") -SET(DROP_SITE_CDASH TRUE) -SET(TRIGGER_SITE "http://cdash.inria.fr/CDash/cgi-bin/Submit-Random-TestingResults.cgi") -SET(BUILDNAME "SimGrid-Java" CACHE TYPE INTERNAL FORCE) -set(osname ${CMAKE_SYSTEM_NAME}) -set(cpu ${CMAKE_SYSTEM_PROCESSOR}) -set(DISTRIB2 ${CMAKE_SYSTEM_VERSION}) -SET(SITE "${osname}_${DISTRIB2}_${cpu}") -SET(CTEST_SITE "${osname}_${DISTRIB2}_${cpu}") -SET(CTEST_PROJECT_NAME "${PROJECT_NAME}") -SET(CTEST_CUSTOM_MAXIMUM_FAILED_TEST_OUTPUT_SIZE "3000000") -SET(CTEST_CUSTOM_MAXIMUM_PASSED_TEST_OUTPUT_SIZE "3000000") -set(PIPOL_IMAGE $ENV{PIPOL_IMAGE}) -if(NOT ${PIPOL_IMAGE} MATCHES "\n") -set(SITE ${PIPOL_IMAGE}) -endif(NOT ${PIPOL_IMAGE} MATCHES "\n") -message(STATUS "SITE : ${SITE}") -message(STATUS "BUILDNAME : ${BUILDNAME}") - -############################### -# Test the build dependencies # -############################### -include(FindSimGrid.cmake) -include(FindJavaSG.cmake) - -# Check for option tracing in SimGrid -include(CheckLibraryExists) -CHECK_LIBRARY_EXISTS(${SIMGRID_LIB} TRACE_start "" HAVE_TRACING) -if(NOT HAVE_TRACING) - message(STATUS "Warning: SimGrid-java must be linked with library Simgrid included trace option to enable tracing.") - message(STATUS "Warning: See http://simgrid.gforge.inria.fr/simgrid/3.8/doc/tracing.html to see how compile SimGrid library with this option.") -endif(NOT HAVE_TRACING) - -############################### -# Declare our package content # -############################### -set(JMSG_C_SRC - ${CMAKE_HOME_DIRECTORY}/src/smx_context_cojava.h - ${CMAKE_HOME_DIRECTORY}/src/smx_context_cojava.c - ${CMAKE_HOME_DIRECTORY}/src/jmsg_file.c - ${CMAKE_HOME_DIRECTORY}/src/jmsg_file.h - ${CMAKE_HOME_DIRECTORY}/src/smx_context_java.h - ${CMAKE_HOME_DIRECTORY}/src/smx_context_java.c - ${CMAKE_HOME_DIRECTORY}/src/jxbt_utilities.c - ${CMAKE_HOME_DIRECTORY}/src/jxbt_utilities.h - ${CMAKE_HOME_DIRECTORY}/src/jmsg.c - ${CMAKE_HOME_DIRECTORY}/src/jmsg.h - ${CMAKE_HOME_DIRECTORY}/src/jmsg_comm.c - ${CMAKE_HOME_DIRECTORY}/src/jmsg_comm.h - ${CMAKE_HOME_DIRECTORY}/src/jmsg_host.c - ${CMAKE_HOME_DIRECTORY}/src/jmsg_host.h - ${CMAKE_HOME_DIRECTORY}/src/jmsg_process.c - ${CMAKE_HOME_DIRECTORY}/src/jmsg_process.h - ${CMAKE_HOME_DIRECTORY}/src/jmsg_task.c - ${CMAKE_HOME_DIRECTORY}/src/jmsg_task.h - ${CMAKE_HOME_DIRECTORY}/src/jmsg_synchro.c - ${CMAKE_HOME_DIRECTORY}/src/jmsg_synchro.h - ${CMAKE_HOME_DIRECTORY}/src/jmsg_rngstream.c - ${CMAKE_HOME_DIRECTORY}/src/jmsg_rngstream.h - ${CMAKE_HOME_DIRECTORY}/src/jmsg_vm.c - ${CMAKE_HOME_DIRECTORY}/src/jmsg_vm.h -) - -set(JTRACE_C_SRC - ${CMAKE_HOME_DIRECTORY}/src/jtrace.c - ${CMAKE_HOME_DIRECTORY}/src/jtrace.h -) - -set(JMSG_JAVA_SRC - ${CMAKE_HOME_DIRECTORY}/org/simgrid/msg/Host.java - ${CMAKE_HOME_DIRECTORY}/org/simgrid/msg/HostFailureException.java - ${CMAKE_HOME_DIRECTORY}/org/simgrid/msg/HostNotFoundException.java - ${CMAKE_HOME_DIRECTORY}/org/simgrid/msg/File.java - ${CMAKE_HOME_DIRECTORY}/org/simgrid/msg/JniException.java - ${CMAKE_HOME_DIRECTORY}/org/simgrid/msg/Msg.java - ${CMAKE_HOME_DIRECTORY}/org/simgrid/msg/MsgException.java - ${CMAKE_HOME_DIRECTORY}/org/simgrid/msg/NativeException.java - ${CMAKE_HOME_DIRECTORY}/org/simgrid/msg/Process.java - ${CMAKE_HOME_DIRECTORY}/org/simgrid/msg/ProcessKilledError.java - ${CMAKE_HOME_DIRECTORY}/org/simgrid/msg/ProcessNotFoundException.java - ${CMAKE_HOME_DIRECTORY}/org/simgrid/msg/Task.java - ${CMAKE_HOME_DIRECTORY}/org/simgrid/msg/TaskCancelledException.java - ${CMAKE_HOME_DIRECTORY}/org/simgrid/msg/TimeoutException.java - ${CMAKE_HOME_DIRECTORY}/org/simgrid/msg/TransferFailureException.java - ${CMAKE_HOME_DIRECTORY}/org/simgrid/msg/Mutex.java - ${CMAKE_HOME_DIRECTORY}/org/simgrid/msg/Comm.java - ${CMAKE_HOME_DIRECTORY}/org/simgrid/msg/RngStream.java - ${CMAKE_HOME_DIRECTORY}/org/simgrid/msg/VM.java -) -set(JTRACE_JAVA_SRC - ${CMAKE_HOME_DIRECTORY}/org/simgrid/trace/Trace.java -) - -set(JAVA_EXAMPLES - ${CMAKE_HOME_DIRECTORY}/examples/async/AsyncTest.java - ${CMAKE_HOME_DIRECTORY}/examples/async/FinalizeTask.java - ${CMAKE_HOME_DIRECTORY}/examples/async/Forwarder.java - ${CMAKE_HOME_DIRECTORY}/examples/async/Master.java - ${CMAKE_HOME_DIRECTORY}/examples/async/Slave.java - ${CMAKE_HOME_DIRECTORY}/examples/bittorrent/Bittorrent.java - ${CMAKE_HOME_DIRECTORY}/examples/bittorrent/Common.java - ${CMAKE_HOME_DIRECTORY}/examples/bittorrent/Connection.java - ${CMAKE_HOME_DIRECTORY}/examples/bittorrent/MessageTask.java - ${CMAKE_HOME_DIRECTORY}/examples/bittorrent/Peer.java - ${CMAKE_HOME_DIRECTORY}/examples/bittorrent/Tracker.java - ${CMAKE_HOME_DIRECTORY}/examples/bittorrent/TrackerTask.java - ${CMAKE_HOME_DIRECTORY}/examples/chord/Chord.java - ${CMAKE_HOME_DIRECTORY}/examples/chord/Common.java - ${CMAKE_HOME_DIRECTORY}/examples/chord/Node.java - ${CMAKE_HOME_DIRECTORY}/examples/chord/ChordTask.java - ${CMAKE_HOME_DIRECTORY}/examples/chord/FindSuccessorAnswerTask.java - ${CMAKE_HOME_DIRECTORY}/examples/chord/FindSuccessorTask.java - ${CMAKE_HOME_DIRECTORY}/examples/chord/GetPredecessorAnswerTask.java - ${CMAKE_HOME_DIRECTORY}/examples/chord/GetPredecessorTask.java - ${CMAKE_HOME_DIRECTORY}/examples/chord/NotifyTask.java - ${CMAKE_HOME_DIRECTORY}/examples/cloud/Cloud.java - ${CMAKE_HOME_DIRECTORY}/examples/cloud/FinalizeTask.java - ${CMAKE_HOME_DIRECTORY}/examples/cloud/Master.java - ${CMAKE_HOME_DIRECTORY}/examples/cloud/Slave.java - ${CMAKE_HOME_DIRECTORY}/examples/commTime/FinalizeTask.java - ${CMAKE_HOME_DIRECTORY}/examples/commTime/Master.java - ${CMAKE_HOME_DIRECTORY}/examples/commTime/Slave.java - ${CMAKE_HOME_DIRECTORY}/examples/commTime/CommTimeTest.java - ${CMAKE_HOME_DIRECTORY}/examples/kademlia/Answer.java - ${CMAKE_HOME_DIRECTORY}/examples/kademlia/Bucket.java - ${CMAKE_HOME_DIRECTORY}/examples/kademlia/Common.java - ${CMAKE_HOME_DIRECTORY}/examples/kademlia/Contact.java - ${CMAKE_HOME_DIRECTORY}/examples/kademlia/Kademlia.java - ${CMAKE_HOME_DIRECTORY}/examples/kademlia/Node.java - ${CMAKE_HOME_DIRECTORY}/examples/kademlia/RoutingTable.java - ${CMAKE_HOME_DIRECTORY}/examples/kademlia/FindNodeAnswerTask.java - ${CMAKE_HOME_DIRECTORY}/examples/kademlia/FindNodeTask.java - ${CMAKE_HOME_DIRECTORY}/examples/kademlia/KademliaTask.java - ${CMAKE_HOME_DIRECTORY}/examples/kademlia/PingAnswerTask.java - ${CMAKE_HOME_DIRECTORY}/examples/kademlia/PingTask.java - ${CMAKE_HOME_DIRECTORY}/examples/io/IO.java - ${CMAKE_HOME_DIRECTORY}/examples/io/Node.java - ${CMAKE_HOME_DIRECTORY}/examples/masterslave/FinalizeTask.java - ${CMAKE_HOME_DIRECTORY}/examples/masterslave/Forwarder.java - ${CMAKE_HOME_DIRECTORY}/examples/masterslave/Master.java - ${CMAKE_HOME_DIRECTORY}/examples/masterslave/Masterslave.java - ${CMAKE_HOME_DIRECTORY}/examples/masterslave/Slave.java - ${CMAKE_HOME_DIRECTORY}/examples/master_slave_bypass/Master.java - ${CMAKE_HOME_DIRECTORY}/examples/master_slave_bypass/MsBypass.java - ${CMAKE_HOME_DIRECTORY}/examples/master_slave_bypass/Slave.java - ${CMAKE_HOME_DIRECTORY}/examples/master_slave_bypass/FinalizeTask.java - ${CMAKE_HOME_DIRECTORY}/examples/master_slave_kill/Master.java - ${CMAKE_HOME_DIRECTORY}/examples/master_slave_kill/MsKill.java - ${CMAKE_HOME_DIRECTORY}/examples/master_slave_kill/Slave.java - ${CMAKE_HOME_DIRECTORY}/examples/master_slave_kill/FinalizeTask.java - ${CMAKE_HOME_DIRECTORY}/examples/migration/Emigrant.java - ${CMAKE_HOME_DIRECTORY}/examples/migration/Migration.java - ${CMAKE_HOME_DIRECTORY}/examples/migration/Policeman.java - ${CMAKE_HOME_DIRECTORY}/examples/mutualExclusion/centralized/MutexCentral.java - ${CMAKE_HOME_DIRECTORY}/examples/mutualExclusion/centralized/GrantTask.java - ${CMAKE_HOME_DIRECTORY}/examples/mutualExclusion/centralized/Coordinator.java - ${CMAKE_HOME_DIRECTORY}/examples/mutualExclusion/centralized/ReleaseTask.java - ${CMAKE_HOME_DIRECTORY}/examples/mutualExclusion/centralized/Node.java - ${CMAKE_HOME_DIRECTORY}/examples/mutualExclusion/centralized/RequestTask.java - ${CMAKE_HOME_DIRECTORY}/examples/pingPong/PingPongTask.java - ${CMAKE_HOME_DIRECTORY}/examples/pingPong/Sender.java - ${CMAKE_HOME_DIRECTORY}/examples/pingPong/Receiver.java - ${CMAKE_HOME_DIRECTORY}/examples/pingPong/PingPongTest.java - ${CMAKE_HOME_DIRECTORY}/examples/startKillTime/Master.java - ${CMAKE_HOME_DIRECTORY}/examples/startKillTime/Slave.java - ${CMAKE_HOME_DIRECTORY}/examples/startKillTime/StartKillTime.java - ${CMAKE_HOME_DIRECTORY}/examples/suspend/DreamMaster.java - ${CMAKE_HOME_DIRECTORY}/examples/suspend/LazyGuy.java - ${CMAKE_HOME_DIRECTORY}/examples/suspend/Suspend.java -) -set(JAVA_TRACING_EXAMPLES - ${CMAKE_HOME_DIRECTORY}/examples/tracing/PingPongTask.java - ${CMAKE_HOME_DIRECTORY}/examples/tracing/Sender.java - ${CMAKE_HOME_DIRECTORY}/examples/tracing/Receiver.java - ${CMAKE_HOME_DIRECTORY}/examples/tracing/TracingTest.java -) - -set(CMAKE_SRC - ${CMAKE_HOME_DIRECTORY}/ChangeLog - ${CMAKE_HOME_DIRECTORY}/MANIFEST.MF - ${CMAKE_HOME_DIRECTORY}/COPYING - ${CMAKE_HOME_DIRECTORY}/CMakeLists.txt - ${CMAKE_HOME_DIRECTORY}/doxygen_postprocesser.pl - ${CMAKE_HOME_DIRECTORY}/FindJavaSG.cmake - ${CMAKE_HOME_DIRECTORY}/FindSimGrid.cmake - ${CMAKE_HOME_DIRECTORY}/GenerateDoc.cmake - ${CMAKE_HOME_DIRECTORY}/README -) - -set(CMAKE_DOC_SRC - ${CMAKE_HOME_DIRECTORY}/doc/Doxyfile.in - ${CMAKE_HOME_DIRECTORY}/doc/footer.html.in - ${CMAKE_HOME_DIRECTORY}/doc/index.doc - ${CMAKE_HOME_DIRECTORY}/doc/install.doc -) - -set(XML_FILES - ${CMAKE_HOME_DIRECTORY}/examples/master_slave_bypass/platform.xml - ${CMAKE_HOME_DIRECTORY}/examples/bittorrent/bittorrent.xml - ${CMAKE_HOME_DIRECTORY}/examples/platform.xml - ${CMAKE_HOME_DIRECTORY}/examples/commTime/commTimeDeployment.xml - ${CMAKE_HOME_DIRECTORY}/examples/async/asyncDeployment.xml - ${CMAKE_HOME_DIRECTORY}/examples/migration/migrationDeployment.xml - ${CMAKE_HOME_DIRECTORY}/examples/masterslave/deploy.xml - ${CMAKE_HOME_DIRECTORY}/examples/masterslave/masterslaveDeployment.xml - ${CMAKE_HOME_DIRECTORY}/examples/chord/chord100.xml - ${CMAKE_HOME_DIRECTORY}/examples/chord/chord.xml - ${CMAKE_HOME_DIRECTORY}/examples/chord/chord10.xml - ${CMAKE_HOME_DIRECTORY}/examples/chord/chord10000.xml - ${CMAKE_HOME_DIRECTORY}/examples/chord/chord1000.xml - ${CMAKE_HOME_DIRECTORY}/examples/chord/chord90.xml - ${CMAKE_HOME_DIRECTORY}/examples/kademlia/kademlia.xml - ${CMAKE_HOME_DIRECTORY}/examples/master_slave_kill/platform.xml - ${CMAKE_HOME_DIRECTORY}/examples/mutualExclusion/centralized/mutex_centralized_deployment.xml - ${CMAKE_HOME_DIRECTORY}/examples/mutualExclusion/ring3.xml - ${CMAKE_HOME_DIRECTORY}/examples/priority/priorityDeployment.xml - ${CMAKE_HOME_DIRECTORY}/examples/pingPong/pingPongDeployment.xml - ${CMAKE_HOME_DIRECTORY}/examples/startKillTime/deployment_kill.xml - ${CMAKE_HOME_DIRECTORY}/examples/startKillTime/deployment_start.xml - ${CMAKE_HOME_DIRECTORY}/examples/startKillTime/deployment_start_kill.xml - ${CMAKE_HOME_DIRECTORY}/examples/startKillTime/deployment.xml - ${CMAKE_HOME_DIRECTORY}/examples/suspend/suspendDeployment.xml - ${CMAKE_HOME_DIRECTORY}/examples/io/storage.xml - ${CMAKE_HOME_DIRECTORY}/examples/tracing/tracingPingPongDeployment.xml -) - -set(TESH_FILES - ${CMAKE_HOME_DIRECTORY}/examples/master_slave_bypass/bypass.tesh - ${CMAKE_HOME_DIRECTORY}/examples/bittorrent/bittorrent.tesh - ${CMAKE_HOME_DIRECTORY}/examples/commTime/commtime.tesh - ${CMAKE_HOME_DIRECTORY}/examples/async/async.tesh - ${CMAKE_HOME_DIRECTORY}/examples/migration/migration.tesh - ${CMAKE_HOME_DIRECTORY}/examples/masterslave/masterslave.tesh - ${CMAKE_HOME_DIRECTORY}/examples/chord/chord.tesh - ${CMAKE_HOME_DIRECTORY}/examples/cloud/cloud.tesh - ${CMAKE_HOME_DIRECTORY}/examples/suspend/suspend.tesh - ${CMAKE_HOME_DIRECTORY}/examples/master_slave_kill/kill.tesh - ${CMAKE_HOME_DIRECTORY}/examples/mutualExclusion/mutualexclusion.tesh - ${CMAKE_HOME_DIRECTORY}/examples/priority/priority.tesh - ${CMAKE_HOME_DIRECTORY}/examples/pingPong/pingpong.tesh - ${CMAKE_HOME_DIRECTORY}/examples/startKillTime/startKillTime.tesh - ${CMAKE_HOME_DIRECTORY}/examples/tracing/tracingPingPong.tesh -) - -set(source_to_pack - ${CMAKE_SRC} - ${JMSG_C_SRC} - ${JTRACE_C_SRC} - ${JMSG_JAVA_SRC} - ${JTRACE_JAVA_SRC} - ${JAVA_EXAMPLES} - ${JAVA_TRACING_EXAMPLES} - ${XML_FILES} - ${CMAKE_DOC_SRC} - ${TESH_FILES} -) - -string(REPLACE "org/" "classes/org/" JMSG_JAVA_SRC_CLASS "${JMSG_JAVA_SRC}") -string(REPLACE ".java" ".class" JMSG_JAVA_SRC_CLASS "${JMSG_JAVA_SRC_CLASS}") - -string(REPLACE "org/" "classes/org/" JTRACE_JAVA_SRC_CLASS "${JTRACE_JAVA_SRC}") -string(REPLACE ".java" ".class" JTRACE_JAVA_SRC_CLASS "${JTRACE_JAVA_SRC_CLASS}") - -string(REPLACE ".java" ".class" JAVA_EXAMPLES_CLASS "${JAVA_EXAMPLES}") -string(REPLACE ".java" ".class" JAVA_TRACING_EXAMPLES_CLASS "${JAVA_TRACING_EXAMPLES}") - -######### -# FLAGS # -######### -set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O0 -g -Wall -Wunused -Wmissing-prototypes -Wmissing-declarations -Wpointer-arith -Wchar-subscripts -Wcomment -Wformat -Wwrite-strings -Wno-unused-function -Wno-unused-parameter -Wno-strict-aliasing -Wno-format-nonliteral -Werror ") -set(INCLUDE_PATH "-I${CMAKE_HOME_DIRECTORY}/src -I${SIMGRID_INCLUDES} ") -SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${INCLUDE_PATH}") - -set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-error=int-to-pointer-cast -Wno-error=pointer-to-int-cast") -if(COMPILER_C_VERSION_MAJOR_MINOR MATCHES "4.6") - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-error=unused-but-set-variable") -endif(COMPILER_C_VERSION_MAJOR_MINOR MATCHES "4.6") - -########### -# TARGETS # -########### -# SG_java -add_library(SG_java SHARED ${JMSG_C_SRC}) -if(WIN32) - set_target_properties(SG_java PROPERTIES LINK_FLAGS "-Wl,--subsystem,windows,--kill-at ${SIMGRID_LIB}" PREFIX "") - find_path(PEXPORTS_PATH NAMES pexports.exe PATHS NO_DEFAULT_PATHS) - message(STATUS "pexports: ${PEXPORTS_PATH}") - if(PEXPORTS_PATH) - add_custom_command(TARGET SG_java POST_BUILD - COMMAND ${PEXPORTS_PATH}/pexports.exe ${CMAKE_BINARY_DIR}/SG_java.dll > ${CMAKE_BINARY_DIR}/SG_java.def) - endif(PEXPORTS_PATH) -else(WIN32) - target_link_libraries(SG_java pcre pthread simgrid) - set_target_properties(SG_java PROPERTIES LINK_FLAGS "-L${SIMGRID_LIB_PATH}") -endif(WIN32) - -if(HAVE_TRACING) -# SG_java_tracing -add_library(SG_java_tracing SHARED ${JTRACE_C_SRC}) - if(WIN32) - set_target_properties(SG_java_tracing PROPERTIES LINK_FLAGS "-Wl,--subsystem,windows,--kill-at ${SIMGRID_LIB}" PREFIX "") - find_path(PEXPORTS_PATH NAMES pexports.exe PATHS NO_DEFAULT_PATHS) - message(STATUS "pexports: ${PEXPORTS_PATH}") - if(PEXPORTS_PATH) - add_custom_command(TARGET SG_java_tracing POST_BUILD - COMMAND ${PEXPORTS_PATH}/pexports.exe ${CMAKE_BINARY_DIR}/SG_java_tracing.dll > ${CMAKE_BINARY_DIR}/SG_java_tracing.def) - endif(PEXPORTS_PATH) - else(WIN32) - target_link_libraries(SG_java_tracing pcre pthread simgrid) - set_target_properties(SG_java_tracing PROPERTIES LINK_FLAGS "-L${SIMGRID_LIB_PATH}") - endif(WIN32) -endif(HAVE_TRACING) - -set(JAVA_SRC - ${JMSG_JAVA_SRC} -) -set(JAVA_SRC_CLASS - ${JMSG_JAVA_SRC_CLASS} -) -if(HAVE_TRACING) - set(JAVA_SRC - ${JAVA_SRC} - ${JTRACE_JAVA_SRC} - ) - set(JAVA_SRC_CLASS - ${JAVA_SRC_CLASS} - ${JTRACE_JAVA_SRC_CLASS} - ) -endif(HAVE_TRACING) - -IF(CMAKE_SYSTEM_PROCESSOR MATCHES ".86") - IF(${ARCH_32_BITS}) - set(JSG_BUNDLE NATIVE/${CMAKE_SYSTEM_NAME}/x86/) - ELSE() - set(JSG_BUNDLE NATIVE/${CMAKE_SYSTEM_NAME}/amd64/) - ENDIF() -ELSE() - error("Unknown system type. Processor: ${CMAKE_SYSTEM_PROCESSOR}; System: ${CMAKE_SYSTEM_NAME}") -ENDIF() -message("Native libraries bundeled into: ${JSG_BUNDLE}") - -# java_classes -add_custom_command( - OUTPUT ${JAVA_SRC_CLASS} - DEPENDS ${JAVA_SRC} - COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_HOME_DIRECTORY}/classes/" - COMMAND ${JAVA_COMPILE} -d ${CMAKE_HOME_DIRECTORY}/classes/ - -cp ${CMAKE_HOME_DIRECTORY}/classes/ ${JAVA_SRC} - COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_HOME_DIRECTORY}/classes/${JSG_BUNDLE} - COMMAND ${CMAKE_COMMAND} -E copy ${SIMGRID_LIB_PATH}/libsimgrid.so ${CMAKE_HOME_DIRECTORY}/classes/${JSG_BUNDLE} - COMMAND strip --strip-debug ${CMAKE_HOME_DIRECTORY}/classes/${JSG_BUNDLE}/libsimgrid.so - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_HOME_DIRECTORY}/lib/libSG_java.so ${CMAKE_HOME_DIRECTORY}/classes/${JSG_BUNDLE} - COMMAND strip --strip-debug ${CMAKE_HOME_DIRECTORY}/classes/${JSG_BUNDLE}/libSG_java.so - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_HOME_DIRECTORY}/ChangeLog ${CMAKE_HOME_DIRECTORY}/classes/${JSG_BUNDLE} - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_HOME_DIRECTORY}/COPYING ${CMAKE_HOME_DIRECTORY}/classes/${JSG_BUNDLE} - COMMENT "Compiling java sources of core library..." -) - -add_custom_target(java_classes ALL - DEPENDS ${JAVA_SRC_CLASS} -) - -# simgrid_jar -add_custom_target(simgrid_jar ALL - COMMAND ${JAVA_ARCHIVE} -cmvf ${CMAKE_HOME_DIRECTORY}/MANIFEST.MF ${CMAKE_HOME_DIRECTORY}/simgrid.jar . - COMMENT "Building simgrid.jar..." - WORKING_DIRECTORY ${CMAKE_HOME_DIRECTORY}/classes -) - -# simgrid_java_examples -set(JAVA_EXAMPLES_CLASS - ${JAVA_EXAMPLES_CLASS} - ${CMAKE_HOME_DIRECTORY}/examples/bittorrent/MessageTask$Type.class - ${CMAKE_HOME_DIRECTORY}/examples/bittorrent/Peer$1.class - ${CMAKE_HOME_DIRECTORY}/examples/bittorrent/TrackerTask$Type.class - ${CMAKE_HOME_DIRECTORY}/examples/chord/GetPredecessorTask.class - ${CMAKE_HOME_DIRECTORY}/examples/priority/Test.class - ${CMAKE_HOME_DIRECTORY}/examples/priority/Priority.class -) - -add_custom_command( - COMMENT "Build examples for java" - OUTPUT ${JAVA_EXAMPLES_CLASS} - DEPENDS ${JAVA_EXAMPLES} - COMMAND ${JAVA_COMPILE} -d ${CMAKE_HOME_DIRECTORY}/examples -cp ${CMAKE_HOME_DIRECTORY}/simgrid.jar ${CMAKE_HOME_DIRECTORY}/examples/async/*.java - COMMAND ${JAVA_COMPILE} -d ${CMAKE_HOME_DIRECTORY}/examples -cp ${CMAKE_HOME_DIRECTORY}/simgrid.jar ${CMAKE_HOME_DIRECTORY}/examples/bittorrent/*.java - COMMAND ${JAVA_COMPILE} -d ${CMAKE_HOME_DIRECTORY}/examples -cp ${CMAKE_HOME_DIRECTORY}/simgrid.jar ${CMAKE_HOME_DIRECTORY}/examples/chord/*.java - COMMAND ${JAVA_COMPILE} -d ${CMAKE_HOME_DIRECTORY}/examples -cp ${CMAKE_HOME_DIRECTORY}/simgrid.jar ${CMAKE_HOME_DIRECTORY}/examples/cloud/*.java - COMMAND ${JAVA_COMPILE} -d ${CMAKE_HOME_DIRECTORY}/examples -cp ${CMAKE_HOME_DIRECTORY}/simgrid.jar ${CMAKE_HOME_DIRECTORY}/examples/commTime/*.java - COMMAND ${JAVA_COMPILE} -d ${CMAKE_HOME_DIRECTORY}/examples -cp ${CMAKE_HOME_DIRECTORY}/simgrid.jar ${CMAKE_HOME_DIRECTORY}/examples/kademlia/*.java - COMMAND ${JAVA_COMPILE} -d ${CMAKE_HOME_DIRECTORY}/examples -cp ${CMAKE_HOME_DIRECTORY}/simgrid.jar ${CMAKE_HOME_DIRECTORY}/examples/io/*.java - COMMAND ${JAVA_COMPILE} -d ${CMAKE_HOME_DIRECTORY}/examples -cp ${CMAKE_HOME_DIRECTORY}/simgrid.jar ${CMAKE_HOME_DIRECTORY}/examples/masterslave/*.java - COMMAND ${JAVA_COMPILE} -d ${CMAKE_HOME_DIRECTORY}/examples -cp ${CMAKE_HOME_DIRECTORY}/simgrid.jar ${CMAKE_HOME_DIRECTORY}/examples/master_slave_bypass/*.java - COMMAND ${JAVA_COMPILE} -d ${CMAKE_HOME_DIRECTORY}/examples -cp ${CMAKE_HOME_DIRECTORY}/simgrid.jar ${CMAKE_HOME_DIRECTORY}/examples/master_slave_kill/*.java - COMMAND ${JAVA_COMPILE} -d ${CMAKE_HOME_DIRECTORY}/examples -cp ${CMAKE_HOME_DIRECTORY}/simgrid.jar ${CMAKE_HOME_DIRECTORY}/examples/migration/*.java - COMMAND ${JAVA_COMPILE} -d ${CMAKE_HOME_DIRECTORY}/examples -cp ${CMAKE_HOME_DIRECTORY}/simgrid.jar ${CMAKE_HOME_DIRECTORY}/examples/mutualExclusion/centralized/*.java - COMMAND ${JAVA_COMPILE} -d ${CMAKE_HOME_DIRECTORY}/examples -cp ${CMAKE_HOME_DIRECTORY}/simgrid.jar ${CMAKE_HOME_DIRECTORY}/examples/pingPong/*.java - COMMAND ${JAVA_COMPILE} -d ${CMAKE_HOME_DIRECTORY}/examples -cp ${CMAKE_HOME_DIRECTORY}/simgrid.jar ${CMAKE_HOME_DIRECTORY}/examples/priority/*.java - COMMAND ${JAVA_COMPILE} -d ${CMAKE_HOME_DIRECTORY}/examples -cp ${CMAKE_HOME_DIRECTORY}/simgrid.jar ${CMAKE_HOME_DIRECTORY}/examples/startKillTime/*.java - COMMAND ${JAVA_COMPILE} -d ${CMAKE_HOME_DIRECTORY}/examples -cp ${CMAKE_HOME_DIRECTORY}/simgrid.jar ${CMAKE_HOME_DIRECTORY}/examples/suspend/*.java -) -if(HAVE_TRACING) - add_custom_command( - COMMENT "Build examples for tracing java" - OUTPUT ${JAVA_TRACING_EXAMPLES_CLASS} - DEPENDS ${JAVA_TRACING_EXAMPLES} ${JAVA_EXAMPLES_CLASS} - COMMAND ${JAVA_COMPILE} -d ${CMAKE_HOME_DIRECTORY}/examples -cp ${CMAKE_HOME_DIRECTORY}/simgrid.jar ${CMAKE_HOME_DIRECTORY}/examples/tracing/*.java - ) - add_custom_target(simgrid_java_examples ALL - DEPENDS ${JAVA_EXAMPLES_CLASS} ${JAVA_TRACING_EXAMPLES_CLASS} - ) -else(HAVE_TRACING) - add_custom_target(simgrid_java_examples ALL - DEPENDS ${JAVA_EXAMPLES_CLASS} - ) -endif(HAVE_TRACING) - - -######################## -# Declare dependencies # -######################## -add_dependencies(simgrid_jar java_classes) -add_dependencies(simgrid_java_examples simgrid_jar SG_java) -if(HAVE_TRACING) - add_dependencies(simgrid_java_examples SG_java_tracing) -endif(HAVE_TRACING) - -##################### -# Declare our tests # -##################### -INCLUDE(CTest) -ENABLE_TESTING() - -ADD_TEST(async ${TESH_BIN_PATH} ${TESH_OPTION} --setenv srcdir=${CMAKE_HOME_DIRECTORY} ${CMAKE_HOME_DIRECTORY}/examples/async/async.tesh) -ADD_TEST(bittorrent ${TESH_BIN_PATH} ${TESH_OPTION} --setenv srcdir=${CMAKE_HOME_DIRECTORY} ${CMAKE_HOME_DIRECTORY}/examples/bittorrent/bittorrent.tesh) -ADD_TEST(bypass ${TESH_BIN_PATH} ${TESH_OPTION} --setenv srcdir=${CMAKE_HOME_DIRECTORY} ${CMAKE_HOME_DIRECTORY}/examples/master_slave_bypass/bypass.tesh) -ADD_TEST(commTime ${TESH_BIN_PATH} ${TESH_OPTION} --setenv srcdir=${CMAKE_HOME_DIRECTORY} ${CMAKE_HOME_DIRECTORY}/examples/commTime/commtime.tesh) -ADD_TEST(chord ${TESH_BIN_PATH} ${TESH_OPTION} --setenv srcdir=${CMAKE_HOME_DIRECTORY} ${CMAKE_HOME_DIRECTORY}/examples/chord/chord.tesh) -ADD_TEST(cloud ${TESH_BIN_PATH} ${TESH_OPTION} --setenv srcdir=${CMAKE_HOME_DIRECTORY} ${CMAKE_HOME_DIRECTORY}/examples/cloud/cloud.tesh) -ADD_TEST(kademlia ${TESH_BIN_PATH} ${TESH_OPTION} --setenv srcdir=${CMAKE_HOME_DIRECTORY} ${CMAKE_HOME_DIRECTORY}/examples/kademlia/kademlia.tesh) -ADD_TEST(kill ${TESH_BIN_PATH} ${TESH_OPTION} --setenv srcdir=${CMAKE_HOME_DIRECTORY} ${CMAKE_HOME_DIRECTORY}/examples/master_slave_kill/kill.tesh) -ADD_TEST(masterslave ${TESH_BIN_PATH} ${TESH_OPTION} --setenv srcdir=${CMAKE_HOME_DIRECTORY} ${CMAKE_HOME_DIRECTORY}/examples/masterslave/masterslave.tesh) -ADD_TEST(migration ${TESH_BIN_PATH} ${TESH_OPTION} --setenv srcdir=${CMAKE_HOME_DIRECTORY} ${CMAKE_HOME_DIRECTORY}/examples/migration/migration.tesh) -ADD_TEST(mutualExclusion ${TESH_BIN_PATH} ${TESH_OPTION} --setenv srcdir=${CMAKE_HOME_DIRECTORY} ${CMAKE_HOME_DIRECTORY}/examples/mutualExclusion/mutualexclusion.tesh) -ADD_TEST(pingPong ${TESH_BIN_PATH} ${TESH_OPTION} --setenv srcdir=${CMAKE_HOME_DIRECTORY} ${CMAKE_HOME_DIRECTORY}/examples/pingPong/pingpong.tesh) -ADD_TEST(priority ${TESH_BIN_PATH} ${TESH_OPTION} --setenv srcdir=${CMAKE_HOME_DIRECTORY} ${CMAKE_HOME_DIRECTORY}/examples/priority/priority.tesh) -ADD_TEST(startKillTime ${TESH_BIN_PATH} ${TESH_OPTION} --setenv srcdir=${CMAKE_HOME_DIRECTORY} ${CMAKE_HOME_DIRECTORY}/examples/startKillTime/startKillTime.tesh) -ADD_TEST(suspend ${TESH_BIN_PATH} ${TESH_OPTION} --setenv srcdir=${CMAKE_HOME_DIRECTORY} ${CMAKE_HOME_DIRECTORY}/examples/suspend/suspend.tesh) -#Don't forget to put new test in this list!!! -set(test_list async bittorrent bypass chord cloud commTime kademlia kill masterslave migration mutualExclusion pingPong priority startKillTime suspend) -if(HAVE_TRACING) - ADD_TEST(tracing ${TESH_BIN_PATH} ${TESH_OPTION} --setenv srcdir=${CMAKE_HOME_DIRECTORY} ${CMAKE_HOME_DIRECTORY}/examples/tracing/tracingPingPong.tesh) - set(test_list ${test_list} tracing) -endif(HAVE_TRACING) -########################################## -# Set the DYLD_LIBRARY_PATH for mac # -########################################## -if(APPLE) - if($ENV{DYLD_LIBRARY_PATH}) - set_tests_properties(${test_list} - PROPERTIES ENVIRONMENT "DYLD_LIBRARY_PATH=${CMAKE_HOME_DIRECTORY}/lib:${SIMGRID_LIB_PATH}") - else($ENV{DYLD_LIBRARY_PATH}) - set_tests_properties(${test_list} - PROPERTIES ENVIRONMENT "DYLD_LIBRARY_PATH=$ENV{DYLD_LIBRARY_PATH}:${CMAKE_HOME_DIRECTORY}/lib:${SIMGRID_LIB_PATH}") - endif($ENV{DYLD_LIBRARY_PATH}) -else(APPLE) -########################################## -# Set the LD_LIBRARY_PATH for our tests # -########################################## - if(NOT WIN32) - if($ENV{LD_LIBRARY_PATH}) - set_tests_properties(${test_list} - PROPERTIES ENVIRONMENT "LD_LIBRARY_PATH=${CMAKE_HOME_DIRECTORY}/lib:${SIMGRID_LIB_PATH}") - else($ENV{LD_LIBRARY_PATH}) - set_tests_properties(${test_list} - PROPERTIES ENVIRONMENT "LD_LIBRARY_PATH=$ENV{LD_LIBRARY_PATH}:${CMAKE_HOME_DIRECTORY}/lib:${SIMGRID_LIB_PATH}") - endif($ENV{LD_LIBRARY_PATH}) - endif(NOT WIN32) -endif(APPLE) - -########### -# Install # -########### -install(TARGETS SG_java - DESTINATION $ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/java/) - -if(HAVE_TRACING) - install(TARGETS SG_java_tracing - DESTINATION $ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/java/) -endif(HAVE_TRACING) - -install(FILES ${CMAKE_HOME_DIRECTORY}/simgrid.jar - DESTINATION $ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/java/) - - -######### -# Dist # -######### -add_custom_target(dist-dir - COMMENT "Generating the distribution directory" - COMMAND test -e ${DIST_NAME}/ && chmod -R a+w ${DIST_NAME}/ || true - COMMAND ${CMAKE_COMMAND} -E remove_directory ${DIST_NAME}/ - COMMAND ${CMAKE_COMMAND} -E make_directory ${DIST_NAME} - COMMAND ${CMAKE_COMMAND} -E make_directory ${DIST_NAME}/doc/html/ - COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_HOME_DIRECTORY}/doc/html/ ${DIST_NAME}/doc/html/ -) - -set(dirs_in_tarball "") -foreach(file ${source_to_pack}) - - # This damn prefix is still set somewhere (seems to be in subdirs) - string(REPLACE "${CMAKE_HOME_DIRECTORY}/" "" file "${file}") - - # Create the directory on need - get_filename_component(file_location ${file} PATH) - string(REGEX MATCH ";${file_location};" OPERATION "${dirs_in_tarball}") - if(NOT OPERATION) - set(dirs_in_tarball "${dirs_in_tarball};${file_location};") - add_custom_command( - TARGET dist-dir - COMMAND ${CMAKE_COMMAND} -E make_directory ${DIST_NAME}/${file_location}/ - ) - endif(NOT OPERATION) - - # Actually copy the file - add_custom_command( - TARGET dist-dir - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_HOME_DIRECTORY}/${file} ${DIST_NAME}/${file_location}/ - ) -endforeach(file ${source_to_pack}) - -add_custom_target(dist - DEPENDS ${CMAKE_BINARY_DIR}/${DIST_NAME}.tar.gz - COMMENT "Generated ${DIST_NAME}" -) -add_custom_command( - OUTPUT ${CMAKE_BINARY_DIR}/${DIST_NAME}.tar.gz - COMMENT "Compressing the archive from the distribution directory" - COMMAND ${CMAKE_COMMAND} -E tar cf ${DIST_NAME}.tar ${DIST_NAME}/ - COMMAND gzip -9v ${DIST_NAME}.tar - COMMAND ${CMAKE_COMMAND} -E remove_directory ${DIST_NAME}/ -) -add_dependencies(dist dist-dir) - -########################## -# Extra make clean files # -########################## -SET_DIRECTORY_PROPERTIES(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES - ${CMAKE_HOME_DIRECTORY}/simgrid.jar -) -SET_DIRECTORY_PROPERTIES(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES - ${CMAKE_BINARY_DIR}/simulation.trace -) - -######## -# NOTE # -######## -file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/Testing/Notes/) -file(WRITE ${CMAKE_BINARY_DIR}/Testing/Notes/Build "GIT version : ${GIT_VERSION}\n") -file(APPEND ${CMAKE_BINARY_DIR}/Testing/Notes/Build "Release : ${DIST_NAME}\n") -file(APPEND ${CMAKE_BINARY_DIR}/Testing/Notes/Build "Pipol user : $ENV{PIPOL_USER}\n") -file(APPEND ${CMAKE_BINARY_DIR}/Testing/Notes/Build "Pipol image : $ENV{PIPOL_IMAGE}\n") - -####### -# DOC # -####### -set(WARNING "This file is generated, don't edit it!") -set(srcdir ${CMAKE_HOME_DIRECTORY}) -include(GenerateDoc.cmake) diff --git a/src/bindings/java/jmsg_task.c b/src/bindings/java/jmsg_task.c index 832b832e1f..f6b80d650c 100644 --- a/src/bindings/java/jmsg_task.c +++ b/src/bindings/java/jmsg_task.c @@ -23,6 +23,7 @@ static jmethodID jtask_method_Comm_constructor; static jfieldID jtask_field_Task_bind; static jfieldID jtask_field_Task_name; +static jfieldID jtask_field_Task_messageSize; static jfieldID jtask_field_Comm_bind; static jfieldID jtask_field_Comm_taskBind; static jfieldID jtask_field_Comm_receiving; @@ -50,6 +51,7 @@ Java_org_simgrid_msg_Task_nativeInit(JNIEnv *env, jclass cls) { jtask_method_Comm_constructor = (*env)->GetMethodID(env, jtask_class_Comm, "", "()V"); jtask_field_Task_bind = jxbt_get_jfield(env, jtask_class_Task, "bind", "J"); jtask_field_Task_name = jxbt_get_jfield(env, jtask_class_Task, "name", "Ljava/lang/String;"); + jtask_field_Task_messageSize = jxbt_get_jfield(env, jtask_class_Task, "messageSize", "D"); jtask_field_Comm_bind = jxbt_get_jfield(env, jtask_class_Comm, "bind", "J"); jtask_field_Comm_taskBind = jxbt_get_jfield(env, jtask_class_Comm, "taskBind", "J"); jtask_field_Comm_receiving = jxbt_get_jfield(env, jtask_class_Comm, "receiving", "Z"); @@ -348,6 +350,7 @@ Java_org_simgrid_msg_Task_setDataSize jxbt_throw_notbound(env, "task", jtask); return; } + (*env)->SetDoubleField(env, jtask, jtask_field_Task_messageSize, dataSize); MSG_task_set_data_size(task, (double) dataSize); } diff --git a/src/include/mc/datatypes.h b/src/include/mc/datatypes.h index d21613cbef..307e3ea064 100644 --- a/src/include/mc/datatypes.h +++ b/src/include/mc/datatypes.h @@ -40,6 +40,7 @@ typedef struct s_stack_region{ char *process_name; void *context; size_t size; + int block; }s_stack_region_t, *stack_region_t; typedef struct s_heap_equality{ @@ -50,5 +51,8 @@ typedef struct s_heap_equality{ void heap_equality_free_voidp(void *e); void stack_region_free_voidp(void *s); +void heap_ignore_region_free(mc_heap_ignore_region_t r); +void heap_ignore_region_free_voidp(void *r); + SG_END_DECL() #endif /* _MC_MC_H */ diff --git a/src/include/mc/mc.h b/src/include/mc/mc.h index 4680251d1e..defbf5c362 100644 --- a/src/include/mc/mc.h +++ b/src/include/mc/mc.h @@ -32,6 +32,8 @@ extern char*_surf_mc_property_file; /* fixme: better location? */ extern xbt_dynar_t mc_heap_comparison_ignore; extern xbt_dynar_t stacks_areas; +extern void *maestro_stack_start; +extern void *maestro_stack_end; /********************************* Global *************************************/ void _mc_cfg_cb_reduce(const char *name, int pos); diff --git a/src/mc/mc_checkpoint.c b/src/mc/mc_checkpoint.c index 70cdb6ef78..0cde2167f2 100644 --- a/src/mc/mc_checkpoint.c +++ b/src/mc/mc_checkpoint.c @@ -23,7 +23,6 @@ char *libsimgrid_path; void *start_data_libsimgrid, *start_bss_libsimgrid; void *start_data_binary, *start_bss_binary; void *start_text_binary; -void *end_raw_heap; static mc_mem_region_t MC_region_new(int type, void *start_addr, size_t size); static void MC_region_restore(mc_mem_region_t reg); @@ -38,6 +37,7 @@ static void print_local_variables_values(xbt_dynar_t all_variables); static void *get_stack_pointer(void *stack_context, void *heap); static void snapshot_stack_free(mc_snapshot_stack_t s); +static xbt_dynar_t take_snapshot_ignore(void); static mc_mem_region_t MC_region_new(int type, void *start_addr, size_t size) { @@ -107,8 +107,9 @@ void MC_init_memory_map_info(){ start_bss_binary = reg.start_addr; i++; } - }else if(!memcmp(maps->regions[i].pathname, "[heap]", 6)){ - end_raw_heap = reg.end_addr; + }else if(!memcmp(maps->regions[i].pathname, "[stack]", 7)){ + maestro_stack_start = reg.start_addr; + maestro_stack_end = reg.end_addr; i++; } } @@ -150,7 +151,6 @@ mc_snapshot_t MC_take_snapshot() unsigned int i = 0; s_map_region_t reg; memory_map_t maps = get_memory_map(); - int nb_reg = 0; void *heap = NULL; size_t size = 0; void *start = NULL; @@ -162,16 +162,14 @@ mc_snapshot_t MC_take_snapshot() if (maps->regions[i].pathname == NULL){ if (reg.start_addr == std_heap){ // only save the std heap (and not the raw one) MC_snapshot_add_region(snapshot, 0, reg.start_addr, (char*)reg.end_addr - (char*)reg.start_addr); - snapshot->heap_chunks_used = mmalloc_get_chunks_used(std_heap); - heap = snapshot->regions[nb_reg]->data; - nb_reg++; + snapshot->heap_bytes_used = mmalloc_get_bytes_used(std_heap); + heap = snapshot->regions[snapshot->num_reg - 1]->data; } i++; } else{ if (!memcmp(basename(maps->regions[i].pathname), "libsimgrid", 10)){ size = (char*)reg.end_addr - (char*)reg.start_addr; start = reg.start_addr; - nb_reg++; i++; reg = maps->regions[i]; if(reg.pathname == NULL && (reg.prot & PROT_WRITE) && i < maps->mapsize){ @@ -180,13 +178,13 @@ mc_snapshot_t MC_take_snapshot() i++; } MC_snapshot_add_region(snapshot, 1, start, size); - }else if(!memcmp(maps->regions[i].pathname, "[heap]", 6)){ - end_raw_heap = reg.end_addr; + }else if(!memcmp(maps->regions[i].pathname, "[stack]", 7)){ + maestro_stack_start = reg.start_addr; + maestro_stack_end = reg.end_addr; i++; } else if (!memcmp(basename(maps->regions[i].pathname), basename(xbt_binary_name), strlen(basename(xbt_binary_name)))){ size = (char*)reg.end_addr - (char*)reg.start_addr; start = reg.start_addr; - nb_reg++; i++; reg = maps->regions[i]; if(reg.pathname == NULL && (reg.prot & PROT_WRITE) && reg.start_addr != std_heap && reg.start_addr != raw_heap && i < maps->mapsize){ @@ -204,6 +202,8 @@ mc_snapshot_t MC_take_snapshot() } } + snapshot->to_ignore = take_snapshot_ignore(); + if(_sg_mc_visited > 0 || strcmp(_sg_mc_property_file,"")) snapshot->stacks = take_snapshot_stacks(&snapshot, heap); @@ -235,6 +235,7 @@ void MC_free_snapshot(mc_snapshot_t snapshot) xbt_free(snapshot->regions); xbt_dynar_free(&(snapshot->stacks)); + xbt_dynar_free(&(snapshot->to_ignore)); xbt_free(snapshot); } @@ -556,7 +557,7 @@ static xbt_strbuff_t get_local_variables_values(void *stack_context, void *heap) xbt_strbuff_append(variables, to_append); xbt_free(to_append); }else if(((long)*((void**)xbt_dynar_get_as(compose, xbt_dynar_length(compose) - 1,variable_value_t)->value.address) > 0xffffffff) || ((long)*((void**)xbt_dynar_get_as(compose, xbt_dynar_length(compose) - 1,variable_value_t)->value.address) < (long)start_text_binary)){ - to_append = bprintf("%s=%d\n", current_variable->name, (int)(long)*((void**)xbt_dynar_get_as(compose, xbt_dynar_length(compose) - 1, variable_value_t)->value.address)); + to_append = bprintf("%s=%u\n", current_variable->name, (unsigned int)(long)*((void**)xbt_dynar_get_as(compose, xbt_dynar_length(compose) - 1, variable_value_t)->value.address)); xbt_strbuff_append(variables, to_append); xbt_free(to_append); }else{ @@ -632,3 +633,26 @@ void variable_value_free_voidp(void* v){ variable_value_free((variable_value_t) * (void **)v); } +static xbt_dynar_t take_snapshot_ignore(){ + + if(mc_heap_comparison_ignore == NULL) + return NULL; + + xbt_dynar_t cpy = xbt_dynar_new(sizeof(mc_heap_ignore_region_t), heap_ignore_region_free_voidp); + + unsigned int cursor = 0; + mc_heap_ignore_region_t current_region; + + xbt_dynar_foreach(mc_heap_comparison_ignore, cursor, current_region){ + mc_heap_ignore_region_t new_region = NULL; + new_region = xbt_new0(s_mc_heap_ignore_region_t, 1); + new_region->address = current_region->address; + new_region->size = current_region->size; + new_region->block = current_region->block; + new_region->fragment = current_region->fragment; + xbt_dynar_push(cpy, &new_region); + } + + return cpy; + +} diff --git a/src/mc/mc_compare.c b/src/mc/mc_compare.c index 711fd83980..d0b8fff820 100644 --- a/src/mc/mc_compare.c +++ b/src/mc/mc_compare.c @@ -12,7 +12,6 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(mc_compare, mc, static int heap_region_compare(void *d1, void *d2, size_t size); -static int compare_stack(stack_region_t s1, stack_region_t s2, void *sp1, void *sp2, void *heap1, void *heap2, xbt_dynar_t equals); static int is_heap_equality(xbt_dynar_t equals, void *a1, void *a2); static size_t heap_ignore_size(void *address); @@ -20,7 +19,8 @@ static void stack_region_free(stack_region_t s); static void heap_equality_free(heap_equality_t e); static int is_stack_ignore_variable(char *frame, char *var_name); -static int compare_local_variables(char *s1, char *s2, xbt_dynar_t heap_equals); +static int compare_local_variables(char *s1, char *s2); +static int compare_global_variables(int region_type, void *d1, void *d2); static size_t heap_ignore_size(void *address){ unsigned int cursor = 0; @@ -42,7 +42,7 @@ static size_t heap_ignore_size(void *address){ return 0; } -static int compare_global_variables(int region_type, void *d1, void *d2, xbt_dynar_t equals){ +static int compare_global_variables(int region_type, void *d1, void *d2){ unsigned int cursor = 0; size_t offset; @@ -68,7 +68,7 @@ static int compare_global_variables(int region_type, void *d1, void *d2, xbt_dyn continue; }else{ if((addr_pointed1 > std_heap) && ((char *)addr_pointed1 < (char *)std_heap + STD_HEAP_SIZE) && (addr_pointed2 > std_heap) && ((char *)addr_pointed2 < (char *)std_heap + STD_HEAP_SIZE)){ - res_compare = compare_area(addr_pointed1, addr_pointed2, NULL, equals); + res_compare = compare_area(addr_pointed1, addr_pointed2, NULL); if(res_compare == 1){ #ifdef MC_VERBOSE XBT_VERB("Different global variable in libsimgrid : %s at addresses %p - %p (size = %zu)", current_var->name, (char *)d1+offset, (char *)d2+offset, current_var->size); @@ -103,7 +103,7 @@ static int compare_global_variables(int region_type, void *d1, void *d2, xbt_dyn continue; }else{ if((addr_pointed1 > std_heap) && ((char *)addr_pointed1 < (char *)std_heap + STD_HEAP_SIZE) && (addr_pointed2 > std_heap) && ((char *)addr_pointed2 < (char *)std_heap + STD_HEAP_SIZE)){ - res_compare = compare_area(addr_pointed1, addr_pointed2, NULL, equals); + res_compare = compare_area(addr_pointed1, addr_pointed2, NULL); if(res_compare == 1){ #ifdef MC_VERBOSE XBT_VERB("Different global variable in binary : %s at addresses %p - %p (size = %zu)", current_var->name, (char *)d1+offset, (char *)d2+offset, current_var->size); @@ -225,16 +225,20 @@ int snapshot_compare(mc_snapshot_t s1, mc_snapshot_t s2){ #endif } - /* Compare number of blocks/fragments used in each heap */ - if(s1->heap_chunks_used != s2->heap_chunks_used){ + #ifdef MC_DEBUG + xbt_os_timer_start(timer); + #endif + + /* Compare number of bytes used in each heap */ + if(s1->heap_bytes_used != s2->heap_bytes_used){ #ifdef MC_DEBUG xbt_os_timer_stop(timer); - mc_comp_times->chunks_used_comparison_time = xbt_os_timer_elapsed(timer); - XBT_DEBUG("Different number of chunks used in each heap : %zu - %zu", s1->heap_chunks_used, s2->heap_chunks_used); + mc_comp_times->bytes_used_comparison_time = xbt_os_timer_elapsed(timer); + XBT_DEBUG("Different number of bytes used in each heap : %zu - %zu", s1->heap_bytes_used, s2->heap_bytes_used); errors++; #else #ifdef MC_VERBOSE - XBT_VERB("Different number of chunks used in each heap : %zu - %zu", s1->heap_chunks_used, s2->heap_chunks_used); + XBT_VERB("Different number of bytes used in each heap : %zu - %zu", s1->heap_bytes_used, s2->heap_bytes_used); #endif xbt_os_timer_free(timer); @@ -324,12 +328,10 @@ int snapshot_compare(mc_snapshot_t s1, mc_snapshot_t s2){ } /* Init heap information used in heap comparison algorithm */ - init_heap_information((xbt_mheap_t)s1->regions[heap_index]->data, (xbt_mheap_t)s2->regions[heap_index]->data); - - xbt_dynar_t equals = xbt_dynar_new(sizeof(heap_equality_t), heap_equality_free_voidp); + init_heap_information((xbt_mheap_t)s1->regions[heap_index]->data, (xbt_mheap_t)s2->regions[heap_index]->data, s1->to_ignore, s2->to_ignore); /* Compare binary global variables */ - is_diff = compare_global_variables(s1->region_type[data_program_index], s1->regions[data_program_index]->data, s2->regions[data_program_index]->data, equals); + is_diff = compare_global_variables(s1->region_type[data_program_index], s1->regions[data_program_index]->data, s2->regions[data_program_index]->data); if(is_diff != 0){ #ifdef MC_DEBUG xbt_os_timer_stop(timer); @@ -353,14 +355,14 @@ int snapshot_compare(mc_snapshot_t s1, mc_snapshot_t s2){ #endif } - #ifdef MC_VERBOSE + #ifdef MC_DEBUG if(is_diff == 0) xbt_os_timer_stop(timer); xbt_os_timer_start(timer); #endif /* Compare libsimgrid global variables */ - is_diff = compare_global_variables(s1->region_type[data_libsimgrid_index], s1->regions[data_libsimgrid_index]->data, s2->regions[data_libsimgrid_index]->data, equals); + is_diff = compare_global_variables(s1->region_type[data_libsimgrid_index], s1->regions[data_libsimgrid_index]->data, s2->regions[data_libsimgrid_index]->data); if(is_diff != 0){ #ifdef MC_DEBUG xbt_os_timer_stop(timer); @@ -390,11 +392,50 @@ int snapshot_compare(mc_snapshot_t s1, mc_snapshot_t s2){ xbt_os_timer_start(timer); #endif + /* Stacks comparison */ + unsigned int cursor = 0; + int diff_local = 0; + is_diff = 0; + + while(cursor < xbt_dynar_length(s1->stacks)){ + diff_local = compare_local_variables(((mc_snapshot_stack_t)xbt_dynar_get_as(s1->stacks, cursor, mc_snapshot_stack_t))->local_variables->data, ((mc_snapshot_stack_t)xbt_dynar_get_as(s2->stacks, cursor, mc_snapshot_stack_t))->local_variables->data); + if(diff_local > 0){ + #ifdef MC_DEBUG + if(is_diff == 0){ + xbt_os_timer_stop(timer); + mc_comp_times->stacks_comparison_time = xbt_os_timer_elapsed(timer); + } + XBT_DEBUG("Different local variables between stacks %d", cursor + 1); + errors++; + is_diff = 1; + #else + + #ifdef MC_VERBOSE + XBT_VERB("Different local variables between stacks %d", cursor + 1); + #endif + + reset_heap_information(); + xbt_os_timer_free(timer); + xbt_os_timer_stop(global_timer); + mc_snapshot_comparison_time = xbt_os_timer_elapsed(global_timer); + xbt_os_timer_free(global_timer); + + if(!raw_mem) + MC_UNSET_RAW_MEM; + + return 1; + #endif + } + cursor++; + } + + #ifdef MC_DEBUG + xbt_os_timer_start(timer); + #endif + /* Compare heap */ - xbt_dynar_t stacks1 = xbt_dynar_new(sizeof(stack_region_t), stack_region_free_voidp); - xbt_dynar_t stacks2 = xbt_dynar_new(sizeof(stack_region_t), stack_region_free_voidp); - if(mmalloc_compare_heap((xbt_mheap_t)s1->regions[heap_index]->data, (xbt_mheap_t)s2->regions[heap_index]->data, &stacks1, &stacks2, equals)){ + if(mmalloc_compare_heap((xbt_mheap_t)s1->regions[heap_index]->data, (xbt_mheap_t)s2->regions[heap_index]->data)){ #ifdef MC_DEBUG xbt_os_timer_stop(timer); @@ -404,14 +445,12 @@ int snapshot_compare(mc_snapshot_t s1, mc_snapshot_t s2){ #else xbt_os_timer_free(timer); - xbt_dynar_free(&stacks1); - xbt_dynar_free(&stacks2); - xbt_dynar_free(&equals); #ifdef MC_VERBOSE XBT_VERB("Different heap (mmalloc_compare)"); #endif + reset_heap_information(); xbt_os_timer_stop(global_timer); mc_snapshot_comparison_time = xbt_os_timer_elapsed(global_timer); xbt_os_timer_free(global_timer); @@ -427,52 +466,7 @@ int snapshot_compare(mc_snapshot_t s1, mc_snapshot_t s2){ #endif } - #ifdef MC_DEBUG - xbt_os_timer_start(timer); - #endif - - /* Stacks comparison */ - unsigned int cursor = 0; - int diff_local = 0; - is_diff = 0; - - while(cursor < xbt_dynar_length(stacks1)){ - diff_local = compare_local_variables(((mc_snapshot_stack_t)xbt_dynar_get_as(s1->stacks, cursor, mc_snapshot_stack_t))->local_variables->data, ((mc_snapshot_stack_t)xbt_dynar_get_as(s2->stacks, cursor, mc_snapshot_stack_t))->local_variables->data, equals); - if(diff_local > 0){ - #ifdef MC_DEBUG - if(is_diff == 0){ - xbt_os_timer_stop(timer); - mc_comp_times->stacks_comparison_time = xbt_os_timer_elapsed(timer); - } - XBT_DEBUG("Different local variables between stacks %d", cursor + 1); - errors++; - is_diff = 1; - #else - xbt_dynar_free(&stacks1); - xbt_dynar_free(&stacks2); - xbt_dynar_free(&equals); - - #ifdef MC_VERBOSE - XBT_VERB("Different local variables between stacks %d", cursor + 1); - #endif - - xbt_os_timer_free(timer); - xbt_os_timer_stop(global_timer); - mc_snapshot_comparison_time = xbt_os_timer_elapsed(global_timer); - xbt_os_timer_free(global_timer); - - if(!raw_mem) - MC_UNSET_RAW_MEM; - - return 1; - #endif - } - cursor++; - } - - xbt_dynar_free(&stacks1); - xbt_dynar_free(&stacks2); - xbt_dynar_free(&equals); + reset_heap_information(); xbt_os_timer_free(timer); @@ -521,7 +515,7 @@ static int is_stack_ignore_variable(char *frame, char *var_name){ return 0; } -static int compare_local_variables(char *s1, char *s2, xbt_dynar_t heap_equals){ +static int compare_local_variables(char *s1, char *s2){ xbt_dynar_t tokens1 = xbt_str_split(s1, NULL); xbt_dynar_t tokens2 = xbt_str_split(s2, NULL); @@ -530,37 +524,47 @@ static int compare_local_variables(char *s1, char *s2, xbt_dynar_t heap_equals){ unsigned int cursor = 0; void *addr1, *addr2; char *ip1 = NULL, *ip2 = NULL; - + int res_compare = 0; + + #ifdef MC_VERBOSE + char *var_name; + #endif + while(cursor < xbt_dynar_length(tokens1)){ s_tokens1 = xbt_str_split(xbt_dynar_get_as(tokens1, cursor, char *), "="); s_tokens2 = xbt_str_split(xbt_dynar_get_as(tokens2, cursor, char *), "="); if(xbt_dynar_length(s_tokens1) > 1 && xbt_dynar_length(s_tokens2) > 1){ + #ifdef MC_VERBOSE + var_name = xbt_dynar_get_as(s_tokens1, 0, char *); + #endif if((strcmp(xbt_dynar_get_as(s_tokens1, 0, char *), "ip") == 0) && (strcmp(xbt_dynar_get_as(s_tokens2, 0, char *), "ip") == 0)){ xbt_free(ip1); xbt_free(ip2); ip1 = strdup(xbt_dynar_get_as(s_tokens1, 1, char *)); ip2 = strdup(xbt_dynar_get_as(s_tokens2, 1, char *)); } - if(strcmp(xbt_dynar_get_as(s_tokens1, 1, char *), xbt_dynar_get_as(s_tokens2, 1, char *)) != 0){ - /* Ignore this variable ? */ - if(is_stack_ignore_variable(ip1, xbt_dynar_get_as(s_tokens1, 0, char *)) && is_stack_ignore_variable(ip2, xbt_dynar_get_as(s_tokens2, 0, char *))){ - xbt_dynar_free(&s_tokens1); - xbt_dynar_free(&s_tokens2); - cursor++; - continue; - } - addr1 = (void *) strtoul(xbt_dynar_get_as(s_tokens1, 1, char *), NULL, 16); - addr2 = (void *) strtoul(xbt_dynar_get_as(s_tokens2, 1, char *), NULL, 16); - if(is_heap_equality(heap_equals, addr1, addr2) == 0){ - if(XBT_LOG_ISENABLED(mc_compare, xbt_log_priority_verbose)) - XBT_VERB("Variable %s is different between stacks in %s : %s - %s", xbt_dynar_get_as(s_tokens1, 0, char *), ip1, xbt_dynar_get_as(s_tokens1, 1, char *), xbt_dynar_get_as(s_tokens2, 1, char *)); - xbt_dynar_free(&s_tokens1); - xbt_dynar_free(&s_tokens2); - xbt_dynar_free(&tokens1); - xbt_dynar_free(&tokens2); - xbt_free(ip1); - xbt_free(ip2); - return 1; + addr1 = (void *) strtoul(xbt_dynar_get_as(s_tokens1, 1, char *), NULL, 16); + addr2 = (void *) strtoul(xbt_dynar_get_as(s_tokens2, 1, char *), NULL, 16); + if(addr1 > std_heap && (char *)addr1 <= (char *)std_heap + STD_HEAP_SIZE && addr2 > std_heap && (char *)addr2 <= (char *)std_heap + STD_HEAP_SIZE){ + res_compare = compare_area(addr1, addr2, NULL); + if(res_compare == 1){ + if(is_stack_ignore_variable(ip1, xbt_dynar_get_as(s_tokens1, 0, char *)) && is_stack_ignore_variable(ip2, xbt_dynar_get_as(s_tokens2, 0, char *))){ + xbt_dynar_free(&s_tokens1); + xbt_dynar_free(&s_tokens2); + cursor++; + continue; + }else { + #ifdef MC_VERBOSE + XBT_VERB("Different local variable : %s at addresses %p - %p", var_name, addr1, addr2); + #endif + xbt_dynar_free(&s_tokens1); + xbt_dynar_free(&s_tokens2); + xbt_dynar_free(&tokens1); + xbt_dynar_free(&tokens2); + xbt_free(ip1); + xbt_free(ip2); + return 1; + } } } } @@ -606,37 +610,6 @@ static int is_heap_equality(xbt_dynar_t equals, void *a1, void *a2){ } - -static int compare_stack(stack_region_t s1, stack_region_t s2, void *sp1, void *sp2, void *heap1, void *heap2, xbt_dynar_t equals){ - - size_t k = 0; - size_t size_used1 = s1->size - ((char*)sp1 - (char*)s1->address); - size_t size_used2 = s2->size - ((char*)sp2 - (char*)s2->address); - - int pointer_align; - void *addr_pointed1 = NULL, *addr_pointed2 = NULL; - - while(k < size_used1){ - if(memcmp((char *)s1->address + s1->size - k, (char *)s2->address + s2->size - k, 1) != 0){ - pointer_align = ((size_used1 - k) / sizeof(void*)) * sizeof(void*); - addr_pointed1 = *((void **)(((char*)s1->address + (s1->size - size_used1)) + pointer_align)); - addr_pointed2 = *((void **)(((char*)s2->address + (s2->size - size_used2)) + pointer_align)); - if(is_heap_equality(equals, addr_pointed1, addr_pointed2) == 0){ - if((addr_pointed1 > std_heap) && (addr_pointed1 < (void *)((char *)std_heap + STD_HEAP_SIZE)) && (addr_pointed2 > std_heap) && (addr_pointed2 < (void *)((char *)std_heap + STD_HEAP_SIZE))){ - if(is_free_area(addr_pointed1, (xbt_mheap_t)heap1) == 0 || is_free_area(addr_pointed2, (xbt_mheap_t)heap2) == 0){ - return 1; - } - }else{ - return 1; - } - } - } - k++; - } - - return 0; -} - int MC_compare_snapshots(void *s1, void *s2){ MC_ignore_stack("self", "simcall_BODY_mc_snapshot"); @@ -648,7 +621,7 @@ int MC_compare_snapshots(void *s1, void *s2){ void print_comparison_times(){ XBT_DEBUG("*** Comparison times ***"); XBT_DEBUG("- Nb processes : %f", mc_comp_times->nb_processes_comparison_time); - XBT_DEBUG("- Nb chunks used : %f", mc_comp_times->chunks_used_comparison_time); + XBT_DEBUG("- Nb bytes used : %f", mc_comp_times->bytes_used_comparison_time); XBT_DEBUG("- Stacks sizes : %f", mc_comp_times->stacks_sizes_comparison_time); XBT_DEBUG("- Binary global variables : %f", mc_comp_times->binary_global_variables_comparison_time); XBT_DEBUG("- Libsimgrid global variables : %f", mc_comp_times->libsimgrid_global_variables_comparison_time); diff --git a/src/mc/mc_dpor.c b/src/mc/mc_dpor.c index c3a338309d..1768a12a5d 100644 --- a/src/mc/mc_dpor.c +++ b/src/mc/mc_dpor.c @@ -49,14 +49,14 @@ static int is_visited_state(){ if(raw_mem_set) MC_SET_RAW_MEM; - + return 0; }else{ MC_SET_RAW_MEM; - size_t current_chunks_used = new_state->system_state->heap_chunks_used; + size_t current_bytes_used = new_state->system_state->heap_bytes_used; unsigned int cursor = 0; int previous_cursor = 0, next_cursor = 0; @@ -64,38 +64,40 @@ static int is_visited_state(){ int end = xbt_dynar_length(visited_states) - 1; mc_safety_visited_state_t state_test = NULL; - size_t chunks_used_test; - int same_chunks_not_found = 1; + size_t bytes_used_test; + int same_bytes_not_found = 1; - while(start <= end && same_chunks_not_found){ + while(start <= end && same_bytes_not_found){ cursor = (start + end) / 2; state_test = (mc_safety_visited_state_t)xbt_dynar_get_as(visited_states, cursor, mc_safety_visited_state_t); - chunks_used_test = state_test->system_state->heap_chunks_used; - if(chunks_used_test < current_chunks_used) + bytes_used_test = state_test->system_state->heap_bytes_used; + if(bytes_used_test < current_bytes_used) start = cursor + 1; - if(chunks_used_test > current_chunks_used) + if(bytes_used_test > current_bytes_used) end = cursor - 1; - if(chunks_used_test == current_chunks_used){ - same_chunks_not_found = 0; + if(bytes_used_test == current_bytes_used){ + same_bytes_not_found = 0; if(snapshot_compare(new_state->system_state, state_test->system_state) == 0){ xbt_dynar_remove_at(visited_states, cursor, NULL); xbt_dynar_insert_at(visited_states, cursor, &new_state); + XBT_DEBUG("State %d already visited ! (equal to state %d)", new_state->num, state_test->num); if(raw_mem_set) MC_SET_RAW_MEM; else MC_UNSET_RAW_MEM; return 1; }else{ - /* Search another state with same number of chunks used */ + /* Search another state with same number of bytes used */ previous_cursor = cursor - 1; while(previous_cursor >= 0){ state_test = (mc_safety_visited_state_t)xbt_dynar_get_as(visited_states, previous_cursor, mc_safety_visited_state_t); - chunks_used_test = state_test->system_state->heap_chunks_used; - if(chunks_used_test != current_chunks_used) + bytes_used_test = state_test->system_state->heap_bytes_used; + if(bytes_used_test != current_bytes_used) break; if(snapshot_compare(new_state->system_state, state_test->system_state) == 0){ xbt_dynar_remove_at(visited_states, previous_cursor, NULL); xbt_dynar_insert_at(visited_states, previous_cursor, &new_state); + XBT_DEBUG("State %d already visited ! (equal to state %d)", new_state->num, state_test->num); if(raw_mem_set) MC_SET_RAW_MEM; else @@ -107,12 +109,13 @@ static int is_visited_state(){ next_cursor = cursor + 1; while(next_cursor < xbt_dynar_length(visited_states)){ state_test = (mc_safety_visited_state_t)xbt_dynar_get_as(visited_states, next_cursor, mc_safety_visited_state_t); - chunks_used_test = state_test->system_state->heap_chunks_used; - if(chunks_used_test != current_chunks_used) + bytes_used_test = state_test->system_state->heap_bytes_used; + if(bytes_used_test != current_bytes_used) break; if(snapshot_compare(new_state->system_state, state_test->system_state) == 0){ xbt_dynar_remove_at(visited_states, next_cursor, NULL); xbt_dynar_insert_at(visited_states, next_cursor, &new_state); + XBT_DEBUG("State %d already visited ! (equal to state %d)", new_state->num, state_test->num); if(raw_mem_set) MC_SET_RAW_MEM; else @@ -126,9 +129,9 @@ static int is_visited_state(){ } state_test = (mc_safety_visited_state_t)xbt_dynar_get_as(visited_states, cursor, mc_safety_visited_state_t); - chunks_used_test = state_test->system_state->heap_chunks_used; + bytes_used_test = state_test->system_state->heap_bytes_used; - if(chunks_used_test < current_chunks_used) + if(bytes_used_test < current_bytes_used) xbt_dynar_insert_at(visited_states, cursor + 1, &new_state); else xbt_dynar_insert_at(visited_states, cursor, &new_state); @@ -306,10 +309,6 @@ void MC_dpor(void) next_state->system_state = MC_take_snapshot(); } - }else{ - - XBT_DEBUG("State already visited !"); - } xbt_fifo_unshift(mc_stack_safety, next_state); diff --git a/src/mc/mc_global.c b/src/mc/mc_global.c index 461e0b53a9..cec559a6c2 100644 --- a/src/mc/mc_global.c +++ b/src/mc/mc_global.c @@ -122,8 +122,6 @@ static dw_location_t get_location(xbt_dict_t location_list, char *expr); static dw_frame_t get_frame_by_offset(xbt_dict_t all_variables, unsigned long int offset); static size_t data_bss_ignore_size(void *address); static void MC_get_global_variables(char *elf_file); -static void heap_ignore_region_free(mc_heap_ignore_region_t r); -static void heap_ignore_region_free_voidp(void *r); void MC_do_the_modelcheck_for_real() { @@ -191,10 +189,6 @@ void MC_init(){ get_libsimgrid_plt_section(); get_binary_plt_section(); - MC_ignore_data_bss(&end_raw_heap, sizeof(end_raw_heap)); - MC_ignore_data_bss(&mc_comp_times, sizeof(mc_comp_times)); - MC_ignore_data_bss(&mc_snapshot_comparison_time, sizeof(mc_snapshot_comparison_time)); - /* Get global variables */ MC_get_global_variables(xbt_binary_name); MC_get_global_variables(libsimgrid_path); @@ -214,6 +208,9 @@ void MC_init(){ MC_ignore_stack("next_context", "smx_ctx_sysv_suspend_serial"); MC_ignore_stack("i", "smx_ctx_sysv_suspend_serial"); + MC_ignore_data_bss(&mc_comp_times, sizeof(mc_comp_times)); + MC_ignore_data_bss(&mc_snapshot_comparison_time, sizeof(mc_snapshot_comparison_time)); + if(raw_mem_set) MC_SET_RAW_MEM; @@ -746,12 +743,12 @@ void MC_automaton_new_propositional_symbol(const char* id, void* fct) { /************ MC_ignore ***********/ -static void heap_ignore_region_free(mc_heap_ignore_region_t r){ +void heap_ignore_region_free(mc_heap_ignore_region_t r){ if(r) xbt_free(r); } -static void heap_ignore_region_free_voidp(void *r){ +void heap_ignore_region_free_voidp(void *r){ heap_ignore_region_free((mc_heap_ignore_region_t) * (void **) r); } @@ -845,12 +842,12 @@ void MC_ignore_data_bss(void *address, size_t size){ if(mc_data_bss_comparison_ignore == NULL) mc_data_bss_comparison_ignore = xbt_dynar_new(sizeof(mc_data_bss_ignore_variable_t), NULL); - if(xbt_dynar_is_empty(mc_data_bss_comparison_ignore)){ + mc_data_bss_ignore_variable_t var = NULL; + var = xbt_new0(s_mc_data_bss_ignore_variable_t, 1); + var->address = address; + var->size = size; - mc_data_bss_ignore_variable_t var = NULL; - var = xbt_new0(s_mc_data_bss_ignore_variable_t, 1); - var->address = address; - var->size = size; + if(xbt_dynar_is_empty(mc_data_bss_comparison_ignore)){ xbt_dynar_insert_at(mc_data_bss_comparison_ignore, 0, &var); @@ -875,11 +872,6 @@ void MC_ignore_data_bss(void *address, size_t size){ if(current_var->address > address) end = cursor - 1; } - - mc_data_bss_ignore_variable_t var = NULL; - var = xbt_new0(s_mc_data_bss_ignore_variable_t, 1); - var->address = address; - var->size = size; if(current_var->address < address) xbt_dynar_insert_at(mc_data_bss_comparison_ignore, cursor + 1, &var); @@ -888,6 +880,34 @@ void MC_ignore_data_bss(void *address, size_t size){ } + /* Remove variable from mc_global_variables */ + + if(mc_global_variables != NULL){ + + unsigned int cursor = 0; + int start = 0; + int end = xbt_dynar_length(mc_global_variables) - 1; + global_variable_t current_var; + int var_found; + + while(start <= end){ + cursor = (start + end) / 2; + current_var = (global_variable_t)xbt_dynar_get_as(mc_global_variables, cursor, global_variable_t); + if(current_var->address == var->address){ + var_found = 1; + break; + } + if(current_var->address < address) + start = cursor + 1; + if(current_var->address > address) + end = cursor - 1; + } + + if(var_found) + xbt_dynar_remove_at(mc_global_variables, cursor, NULL); + + } + MC_UNSET_RAW_MEM; if(raw_mem_set) @@ -999,6 +1019,7 @@ void MC_new_stack_area(void *stack, char *name, void* context, size_t size){ region->process_name = strdup(name); region->context = context; region->size = size; + region->block = ((char*)stack - (char*)((xbt_mheap_t)std_heap)->heapbase) / BLOCKSIZE + 1; xbt_dynar_push(stacks_areas, ®ion); MC_UNSET_RAW_MEM; @@ -1515,13 +1536,13 @@ static dw_location_t get_location(xbt_dict_t location_list, char *expr){ }else if(strcmp(tok2, "DW_OP_fbreg:") == 0){ dw_location_t new_element = xbt_new0(s_dw_location_t, 1); new_element->type = e_dw_fbregister_op; - new_element->location.fbreg_op = atoi(xbt_dynar_get_as(tokens2, 1, char*)); + new_element->location.fbreg_op = atoi(xbt_dynar_get_as(tokens2, xbt_dynar_length(tokens2) - 1, char*)); xbt_dynar_push(loc->location.compose, &new_element); }else if(strncmp(tok2, "DW_OP_breg", 10) == 0){ dw_location_t new_element = xbt_new0(s_dw_location_t, 1); new_element->type = e_dw_bregister_op; new_element->location.breg_op.reg = atoi(strtok(tok2, "DW_OP_breg")); - new_element->location.breg_op.offset = atoi(xbt_dynar_get_as(tokens2, 1, char*)); + new_element->location.breg_op.offset = atoi(xbt_dynar_get_as(tokens2, xbt_dynar_length(tokens2) - 1, char*)); xbt_dynar_push(loc->location.compose, &new_element); }else if(strncmp(tok2, "DW_OP_lit", 9) == 0){ dw_location_t new_element = xbt_new0(s_dw_location_t, 1); @@ -1531,7 +1552,7 @@ static dw_location_t get_location(xbt_dict_t location_list, char *expr){ }else if(strcmp(tok2, "DW_OP_piece:") == 0){ dw_location_t new_element = xbt_new0(s_dw_location_t, 1); new_element->type = e_dw_piece; - new_element->location.piece = atoi(xbt_dynar_get_as(tokens2, 1, char*)); + new_element->location.piece = atoi(xbt_dynar_get_as(tokens2, xbt_dynar_length(tokens2) - 1, char*)); /*if(strlen(xbt_dynar_get_as(tokens2, 1, char*)) > 1) new_element->location.piece = atoi(xbt_dynar_get_as(tokens2, 1, char*)); else @@ -1540,7 +1561,7 @@ static dw_location_t get_location(xbt_dict_t location_list, char *expr){ }else if(strcmp(tok2, "DW_OP_plus_uconst:") == 0){ dw_location_t new_element = xbt_new0(s_dw_location_t, 1); new_element->type = e_dw_plus_uconst; - new_element->location.plus_uconst = atoi(xbt_dynar_get_as(tokens2, 1, char *)); + new_element->location.plus_uconst = atoi(xbt_dynar_get_as(tokens2, xbt_dynar_length(tokens2) - 1, char *)); xbt_dynar_push(loc->location.compose, &new_element); }else if(strcmp(tok, "DW_OP_abs") == 0 || strcmp(tok, "DW_OP_and") == 0 || @@ -1560,7 +1581,7 @@ static dw_location_t get_location(xbt_dict_t location_list, char *expr){ }else if(strcmp(tok2, "DW_OP_deref_size:") == 0){ dw_location_t new_element = xbt_new0(s_dw_location_t, 1); new_element->type = e_dw_deref; - new_element->location.deref_size = (unsigned int short) atoi(xbt_dynar_get_as(tokens2, 1, char*)); + new_element->location.deref_size = (unsigned int short) atoi(xbt_dynar_get_as(tokens2, xbt_dynar_length(tokens2) - 1, char*)); /*if(strlen(xbt_dynar_get_as(tokens, ++cursor, char*)) > 1) new_element->location.deref_size = atoi(xbt_dynar_get_as(tokens, cursor, char*)); else @@ -1575,7 +1596,7 @@ static dw_location_t get_location(xbt_dict_t location_list, char *expr){ dw_location_t new_element = xbt_new0(s_dw_location_t, 1); new_element->type = e_dw_uconstant; new_element->location.uconstant.bytes = 1; - new_element->location.uconstant.value = (unsigned long int)(atoi(xbt_dynar_get_as(tokens2, 1, char*))); + new_element->location.uconstant.value = (unsigned long int)(atoi(xbt_dynar_get_as(tokens2, xbt_dynar_length(tokens2) - 1, char*))); /*if(strlen(xbt_dynar_get_as(tokens, ++cursor, char*)) > 1) new_element->location.uconstant.value = (unsigned long int)(atoi(xbt_dynar_get_as(tokens, cursor, char*))); else @@ -1585,7 +1606,7 @@ static dw_location_t get_location(xbt_dict_t location_list, char *expr){ dw_location_t new_element = xbt_new0(s_dw_location_t, 1); new_element->type = e_dw_sconstant; new_element->location.sconstant.bytes = 1; - new_element->location.sconstant.value = (long int)(atoi(xbt_dynar_get_as(tokens2, 1, char*))); + new_element->location.sconstant.value = (long int)(atoi(xbt_dynar_get_as(tokens2, xbt_dynar_length(tokens2) - 1, char*))); xbt_dynar_push(loc->location.compose, &new_element); }else if(strcmp(tok2, "DW_OP_const1u:") == 0 || strcmp(tok2, "DW_OP_const2u:") == 0 || @@ -1594,7 +1615,7 @@ static dw_location_t get_location(xbt_dict_t location_list, char *expr){ dw_location_t new_element = xbt_new0(s_dw_location_t, 1); new_element->type = e_dw_uconstant; new_element->location.uconstant.bytes = tok2[11] - '0'; - new_element->location.uconstant.value = (unsigned long int)(atoi(xbt_dynar_get_as(tokens2, 1, char*))); + new_element->location.uconstant.value = (unsigned long int)(atoi(xbt_dynar_get_as(tokens2, xbt_dynar_length(tokens2) - 1, char*))); /*if(strlen(xbt_dynar_get_as(tokens, ++cursor, char*)) > 1) new_element->location.constant.value = atoi(xbt_dynar_get_as(tokens, cursor, char*)); else @@ -1607,7 +1628,7 @@ static dw_location_t get_location(xbt_dict_t location_list, char *expr){ dw_location_t new_element = xbt_new0(s_dw_location_t, 1); new_element->type = e_dw_sconstant; new_element->location.sconstant.bytes = tok2[11] - '0'; - new_element->location.sconstant.value = (long int)(atoi(xbt_dynar_get_as(tokens2, 1, char*))); + new_element->location.sconstant.value = (long int)(atoi(xbt_dynar_get_as(tokens2, xbt_dynar_length(tokens2) - 1, char*))); xbt_dynar_push(loc->location.compose, &new_element); }else{ dw_location_t new_element = xbt_new0(s_dw_location_t, 1); @@ -1801,7 +1822,6 @@ static void MC_get_global_variables(char *elf_file){ || (strcmp(xbt_dynar_get_as(line_tokens, xbt_dynar_length(line_tokens) - 1, char*), ".data") == 0) || (strcmp(xbt_dynar_get_as(line_tokens, xbt_dynar_length(line_tokens) - 1, char*), ".bss") == 0) || (strncmp(xbt_dynar_get_as(line_tokens, xbt_dynar_length(line_tokens) - 1, char*), "stderr", 6) == 0) - || (strncmp(xbt_dynar_get_as(line_tokens, xbt_dynar_length(line_tokens) - 1, char*), "counter", 7) == 0) || ((size_t)strtoul(xbt_dynar_get_as(line_tokens, xbt_dynar_length(line_tokens) - 2, char*), NULL, 16) == 0)) continue; @@ -1817,10 +1837,34 @@ static void MC_get_global_variables(char *elf_file){ var->size = (size_t)strtoul(xbt_dynar_get_as(line_tokens, xbt_dynar_length(line_tokens) - 2, char*), NULL, 16); var->name = strdup(xbt_dynar_get_as(line_tokens, xbt_dynar_length(line_tokens) - 1, char*)); - if(data_bss_ignore_size(var->address) > 0) + if(data_bss_ignore_size(var->address) > 0){ global_variable_free(var); - else - xbt_dynar_push(mc_global_variables, &var); + }else{ + if(xbt_dynar_is_empty(mc_global_variables)){ + xbt_dynar_push(mc_global_variables, &var); + }else{ + unsigned int cursor = 0; + int start = 0; + int end = xbt_dynar_length(mc_global_variables) - 1; + global_variable_t current_var = NULL; + + while(start <= end){ + cursor = (start + end) / 2; + current_var = (global_variable_t)xbt_dynar_get_as(mc_global_variables, cursor, global_variable_t); + if(current_var->address == var->address) + break; + if(current_var->address < var->address) + start = cursor + 1; + if(current_var->address > var->address) + end = cursor - 1; + } + + if(current_var->address < var->address) + xbt_dynar_insert_at(mc_global_variables, cursor + 1, &var); + else + xbt_dynar_insert_at(mc_global_variables, cursor, &var); + } + } xbt_dynar_free(&line_tokens); diff --git a/src/mc/mc_liveness.c b/src/mc/mc_liveness.c index 8067a737c0..8f2dadcff5 100644 --- a/src/mc/mc_liveness.c +++ b/src/mc/mc_liveness.c @@ -476,9 +476,11 @@ void MC_ddfs(int search_cycle){ /* Debug information */ - req_str = MC_request_to_string(req, value); - XBT_DEBUG("Execute: %s", req_str); - xbt_free(req_str); + if(XBT_LOG_ISENABLED(mc_liveness, xbt_log_priority_debug)){ + req_str = MC_request_to_string(req, value); + XBT_DEBUG("Execute: %s", req_str); + xbt_free(req_str); + } MC_state_set_executed_request(current_pair->graph_state, req, value); diff --git a/src/mc/mc_private.h b/src/mc/mc_private.h index bf29aa9089..df27cd0e5f 100644 --- a/src/mc/mc_private.h +++ b/src/mc/mc_private.h @@ -36,11 +36,12 @@ typedef struct s_mc_mem_region{ typedef struct s_mc_snapshot{ unsigned int num_reg; int region_type[nb_regions]; - size_t heap_chunks_used; + size_t heap_bytes_used; mc_mem_region_t *regions; size_t *stack_sizes; xbt_dynar_t stacks; int nb_processes; + xbt_dynar_t to_ignore; } s_mc_snapshot_t, *mc_snapshot_t; typedef struct s_mc_snapshot_stack{ @@ -200,7 +201,6 @@ void get_libsimgrid_plt_section(void); void get_binary_plt_section(void); extern void *start_data_libsimgrid; -extern void *end_raw_heap; extern void *start_data_binary; extern void *start_bss_binary; extern char *libsimgrid_path; @@ -219,7 +219,7 @@ extern void *end_got_plt_binary; typedef struct s_mc_comparison_times{ double nb_processes_comparison_time; - double chunks_used_comparison_time; + double bytes_used_comparison_time; double stacks_sizes_comparison_time; double binary_global_variables_comparison_time; double libsimgrid_global_variables_comparison_time; diff --git a/src/simdag/dax_dtd.c b/src/simdag/dax_dtd.c index ec0af0b960..8e1cded546 100644 --- a/src/simdag/dax_dtd.c +++ b/src/simdag/dax_dtd.c @@ -1259,8 +1259,8 @@ char *dax_text; * * This program was generated with the FleXML XML processor generator. * FleXML is Copyright (C) 1999-2005 Kristoffer Rose. All rights reserved. - * FleXML is Copyright (C) 2003-2011 Martin Quinson. All rights reserved. - * (Id: flexml.pl,v 1.69 2012/12/20 00:13:40 mquinson Exp). + * FleXML is Copyright (C) 2003-2013 Martin Quinson. All rights reserved. + * (1.9.6). * * There are two, intertwined parts to this program, part A and part B. * @@ -1269,7 +1269,7 @@ char *dax_text; * * Some parts, here collectively called "Part A", are found in the * FleXML package. They are Copyright (C) 1999-2005 Kristoffer Rose - * and Copyright (C) 2003-2011 Martin Quinson. All rights reserved. + * and Copyright (C) 2003-2013 Martin Quinson. All rights reserved. * * You can redistribute, use, perform, display and/or modify "Part A" * provided the following two conditions hold: @@ -1302,10 +1302,7 @@ char *dax_text; */ /* Version strings. */ -const char rcs_dax__flexml_skeleton[] = - "$" "Id: skel,v 1.40 2007/10/11 09:57:24 mquinson Exp $"; -const char rcs_dax__flexml[] = - "$" "Id: flexml.pl,v 1.69 2012/12/20 00:13:40 mquinson Exp $"; +const char dax__flexml_version[] = "1.9.6"; /* ANSI headers. */ #include /* for realloc() -- needed here when using flex 2.5.4 */ diff --git a/src/simdag/dax_dtd.h b/src/simdag/dax_dtd.h index e1d69e7e3a..e7b83a4e0e 100644 --- a/src/simdag/dax_dtd.h +++ b/src/simdag/dax_dtd.h @@ -2,8 +2,8 @@ * * This program was generated with the FleXML XML processor generator. * FleXML is Copyright (C) 1999-2005 Kristoffer Rose. All rights reserved. - * FleXML is Copyright (C) 2003-2011 Martin Quinson. All rights reserved. - * (Id: flexml.pl,v 1.69 2012/12/20 00:13:40 mquinson Exp). + * FleXML is Copyright (C) 2003-2013 Martin Quinson. All rights reserved. + * (1.9.6). * * There are two, intertwined parts to this program, part A and part B. * @@ -12,7 +12,7 @@ * * Some parts, here collectively called "Part A", are found in the * FleXML package. They are Copyright (C) 1999-2005 Kristoffer Rose - * and Copyright (C) 2003-2011 Martin Quinson. All rights reserved. + * and Copyright (C) 2003-2013 Martin Quinson. All rights reserved. * * You can redistribute, use, perform, display and/or modify "Part A" * provided the following two conditions hold: diff --git a/src/simdag/sd_dotloader.c b/src/simdag/sd_dotloader.c index 148b4d4781..338f799b35 100644 --- a/src/simdag/sd_dotloader.c +++ b/src/simdag/sd_dotloader.c @@ -40,18 +40,15 @@ void dot_add_output_dependencies(SD_task_t current_job, Agedge_t * edge, seq_par_t seq_or_par); xbt_dynar_t SD_dotload_generic(const char * filename); -static double dot_parse_double(const char *string) -{ +static double dot_parse_double(const char *string) { if (string == NULL) return -1; double value = -1; char *err; - //ret = sscanf(string, "%lg", &value); errno = 0; value = strtod(string,&err); - if(errno) - { + if(errno) { XBT_WARN("Failed to convert string to double: %s\n",strerror(errno)); return -1; } @@ -59,8 +56,7 @@ static double dot_parse_double(const char *string) } -static int dot_parse_int(const char *string) -{ +static int dot_parse_int(const char *string) { if (string == NULL) return -10; int ret = 0; @@ -80,8 +76,7 @@ static SD_task_t root_task, end_task; static Agraph_t *dag_dot; static bool schedule = true; -static void dump_res() -{ +static void dump_res() { unsigned int cursor; SD_task_t task; xbt_dynar_foreach(result, cursor, task) { @@ -91,20 +86,18 @@ static void dump_res() } -static void dot_task_free(void *task) -{ +static void dot_task_free(void *task) { SD_task_t t = task; SD_task_destroy(t); } -static void dot_task_p_free(void *task) -{ +static void dot_task_p_free(void *task) { SD_task_t *t = task; SD_task_destroy(*t); } -static void TRACE_sd_dotloader (SD_task_t task, const char *category) -{ +#ifdef HAVE_TRACING +static void TRACE_sd_dotloader (SD_task_t task, const char *category) { if (category && strlen (category)){ if (task->category) XBT_DEBUG("Change the category of %s from %s to %s", @@ -115,6 +108,7 @@ static void TRACE_sd_dotloader (SD_task_t task, const char *category) TRACE_sd_set_task_category(task, category); } } +#endif /** @brief loads a DOT file describing a DAG * @@ -125,8 +119,7 @@ static void TRACE_sd_dotloader (SD_task_t task, const char *category) * (the amount of data transfer in bit). * if they aren't here, there choose to be equal to zero. */ -xbt_dynar_t SD_dotload(const char *filename) -{ +xbt_dynar_t SD_dotload(const char *filename) { SD_dotload_generic(filename); xbt_dynar_t computer = NULL; xbt_dict_cursor_t dict_cursor; @@ -138,7 +131,7 @@ xbt_dynar_t SD_dotload(const char *filename) return result; } -xbt_dynar_t SD_dotload_with_sched(const char *filename){ +xbt_dynar_t SD_dotload_with_sched(const char *filename) { SD_dotload_generic(filename); if(schedule == true){ @@ -152,8 +145,8 @@ xbt_dynar_t SD_dotload_with_sched(const char *filename){ SD_task_t task; SD_task_t task_previous = NULL; xbt_dynar_foreach(computer,count,task){ - // add dependency between the previous and the task to avoid - // parallel execution + /* add dependency between the previous and the task to avoid + * parallel execution */ if(task != NULL ){ if(task_previous != NULL && !SD_task_dependency_exists(task_previous, task)) @@ -187,8 +180,7 @@ xbt_dynar_t SD_dotload_with_sched(const char *filename){ return NULL; } -xbt_dynar_t SD_PTG_dotload(const char * filename) -{ +xbt_dynar_t SD_PTG_dotload(const char * filename) { xbt_assert(filename, "Unable to use a null file descriptor\n"); FILE *in_file = fopen(filename, "r"); dag_dot = agread(in_file, NIL(Agdisc_t *)); @@ -207,16 +199,20 @@ xbt_dynar_t SD_PTG_dotload(const char * filename) xbt_dict_set(jobs, "end", end_task, NULL); Agnode_t *dag_node = NULL; - for (dag_node = agfstnode(dag_dot); dag_node; dag_node = agnxtnode(dag_dot, dag_node)) { + for (dag_node = agfstnode(dag_dot); dag_node; dag_node = agnxtnode(dag_dot, + dag_node)) { dot_add_parallel_task(dag_node); } agclose(dag_dot); xbt_dict_free(&jobs); /* And now, post-process the files. - * We want a file task per pair of computation tasks exchanging the file. Duplicate on need - * Files not produced in the system are said to be produced by root task (top of DAG). - * Files not consumed in the system are said to be consumed by end task (bottom of DAG). + * We want a file task per pair of computation tasks exchanging the file. + * Duplicate on need + * Files not produced in the system are said to be produced by root task + * (top of DAG). + * Files not consumed in the system are said to be consumed by end task + * (bottom of DAG). */ xbt_dict_cursor_t cursor; SD_task_t file; @@ -236,7 +232,8 @@ xbt_dynar_t SD_PTG_dotload(const char * filename) } else if (xbt_dynar_is_empty(file->tasks_after)) { xbt_dynar_foreach(file->tasks_before, cpt2, depbefore) { SD_task_t newfile = - SD_task_create_comm_par_mxn_1d_block(file->name, NULL, file->amount); + SD_task_create_comm_par_mxn_1d_block(file->name, NULL, + file->amount); SD_task_dependency_add(NULL, NULL, depbefore->src, newfile); SD_task_dependency_add(NULL, NULL, newfile, end_task); xbt_dynar_push(result, &newfile); @@ -250,7 +247,8 @@ xbt_dynar_t SD_PTG_dotload(const char * filename) file->name, depbefore->src->name); } newfile = - SD_task_create_comm_par_mxn_1d_block(file->name, NULL, file->amount); + SD_task_create_comm_par_mxn_1d_block(file->name, NULL, + file->amount); SD_task_dependency_add(NULL, NULL, depbefore->src, newfile); SD_task_dependency_add(NULL, NULL, newfile, depafter->dst); xbt_dynar_push(result, &newfile); @@ -276,10 +274,8 @@ xbt_dynar_t SD_PTG_dotload(const char * filename) } -xbt_dynar_t SD_dotload_generic(const char * filename) -{ +xbt_dynar_t SD_dotload_generic(const char * filename) { xbt_assert(filename, "Unable to use a null file descriptor\n"); - //dag_dot = agopen((char*)filename,Agstrictdirected,0); FILE *in_file = fopen(filename, "r"); dag_dot = agread(in_file, NIL(Agdisc_t *)); @@ -304,15 +300,18 @@ xbt_dynar_t SD_dotload_generic(const char * filename) xbt_dict_free(&jobs); /* And now, post-process the files. - * We want a file task per pair of computation tasks exchanging the file. Duplicate on need - * Files not produced in the system are said to be produced by root task (top of DAG). - * Files not consumed in the system are said to be consumed by end task (bottom of DAG). + * We want a file task per pair of computation tasks exchanging the file. + * Duplicate on need + * Files not produced in the system are said to be produced by root task + * (top of DAG). + * Files not consumed in the system are said to be consumed by end task + * (bottom of DAG). */ xbt_dict_cursor_t cursor; SD_task_t file; char *name; xbt_dict_foreach(files, cursor, name, file) { - XBT_DEBUG("Considering file '%s' stored in the dictionnary", + XBT_DEBUG("Considering file '%s' stored in the dictionary", file->name); if (xbt_dynar_is_empty(file->tasks_before)) { XBT_DEBUG("file '%s' has no source. Add dependency from 'root'", @@ -343,8 +342,7 @@ xbt_dynar_t SD_dotload_generic(const char * filename) /* dot_add_parallel_task create a sd_task of SD_TASK_COMP_PAR_AMDHAL type and * all transfers required for this task. The execution time of the task is * given by the attribute size. The unit of size is the Flop.*/ -void dot_add_parallel_task(Agnode_t * dag_node) -{ +void dot_add_parallel_task(Agnode_t * dag_node) { char *name = agnameof(dag_node); SD_task_t current_job; double amount = dot_parse_double(agget(dag_node, (char *) "size")); @@ -356,12 +354,21 @@ void dot_add_parallel_task(Agnode_t * dag_node) XBT_DEBUG("See ", name, agget(dag_node, (char *) "size"), amount, alpha); if (!strcmp(name, "root")){ - XBT_WARN("'root' node is explicitly declared in the DOT file. Ignore it"); - return; + XBT_WARN("'root' node is explicitly declared in the DOT file. Update it"); + root_task->amount = amount; + root_task->alpha = alpha; +#ifdef HAVE_TRACING + TRACE_sd_dotloader (root_task, agget (dag_node, (char*)"category")); +#endif } + if (!strcmp(name, "end")){ - XBT_WARN("'end' node is explicitly declared in the DOT file. Ignore it"); - return; + XBT_WARN("'end' node is explicitly declared in the DOT file. Update it"); + end_task->amount = amount; + end_task->alpha = alpha; +#ifdef HAVE_TRACING + TRACE_sd_dotloader (end_task, agget (dag_node, (char*)"category")); +#endif } current_job = xbt_dict_get_or_null(jobs, name); @@ -397,8 +404,7 @@ void dot_add_parallel_task(Agnode_t * dag_node) /* dot_add_task create a sd_task and all transfers required for this * task. The execution time of the task is given by the attribute size. * The unit of size is the Flop.*/ -void dot_add_task(Agnode_t * dag_node) -{ +void dot_add_task(Agnode_t * dag_node) { char *name = agnameof(dag_node); SD_task_t current_job; double runtime = dot_parse_double(agget(dag_node, (char *) "size")); @@ -454,51 +460,52 @@ void dot_add_task(Agnode_t * dag_node) if(schedule || XBT_LOG_ISENABLED(sd_dotparse, xbt_log_priority_verbose)){ /* try to take the information to schedule the task only if all is * right*/ - // performer is the computer which execute the task + /* performer is the computer which execute the task */ unsigned long performer = -1; char * char_performer = agget(dag_node, (char *) "performer"); if (char_performer != NULL) performer = (long) dot_parse_int(char_performer); - // order is giving the task order on one computer + /* order is giving the task order on one computer */ unsigned long order = -1; char * char_order = agget(dag_node, (char *) "order"); if (char_order != NULL) order = (long) dot_parse_int(char_order); xbt_dynar_t computer = NULL; - //XBT_INFO("performer = %d, order=%d",performer,order); if(performer != -1 && order != -1){ - //necessary parameters are given + /* required parameters are given */ computer = xbt_dict_get_or_null(computers, char_performer); if(computer == NULL){ computer = xbt_dynar_new(sizeof(SD_task_t), NULL); xbt_dict_set(computers, char_performer, computer, NULL); } if(performer < xbt_lib_length(host_lib)){ - // the wanted computer is available + /* the wanted computer is available */ SD_task_t *task_test = NULL; if(order < computer->used) task_test = xbt_dynar_get_ptr(computer,order); if(task_test != NULL && *task_test != NULL && *task_test != current_job){ - /*the user gives the same order to several tasks*/ + /* the user gives the same order to several tasks */ schedule = false; XBT_VERB("The task %s starts on the computer %s at the position : %s like the task %s", - (*task_test)->name, char_performer, char_order, current_job->name); + (*task_test)->name, char_performer, char_order, + current_job->name); }else{ - //the parameter seems to be ok + /* the parameter seems to be ok */ xbt_dynar_set_as(computer, order, SD_task_t, current_job); } }else{ - /*the platform has not enough processors to schedule the DAG like - *the user wants*/ + /* the platform has not enough processors to schedule the DAG like + * the user wants*/ schedule = false; XBT_VERB("The schedule is ignored, there are not enough computers"); } } else { - //one of necessary parameters are not given + /* one of required parameters is not given */ schedule = false; - XBT_VERB("The schedule is ignored, the task %s is not correctly scheduled", current_job->name); + XBT_VERB("The schedule is ignored, the task %s is not correctly scheduled", + current_job->name); } } } @@ -508,8 +515,7 @@ void dot_add_task(Agnode_t * dag_node) * The amount of data transfers is given by the attribute size on the * edge. */ void dot_add_input_dependencies(SD_task_t current_job, Agedge_t * edge, - seq_par_t seq_or_par) -{ + seq_par_t seq_or_par) { SD_task_t file = NULL; char *name_tail=agnameof(agtail(edge)); char *name_head=agnameof(aghead(edge)); @@ -554,7 +560,7 @@ void dot_add_input_dependencies(SD_task_t current_job, Agedge_t * edge, * The amount of data transfers is given by the attribute size on the * edge. */ void dot_add_output_dependencies(SD_task_t current_job, Agedge_t * edge, - seq_par_t seq_or_par){ + seq_par_t seq_or_par) { SD_task_t file; char *name_tail=agnameof(agtail(edge)); char *name_head=agnameof(aghead(edge)); diff --git a/src/simix/smx_smurf_private.h b/src/simix/smx_smurf_private.h index aaa090fb28..601bf8ef1e 100644 --- a/src/simix/smx_smurf_private.h +++ b/src/simix/smx_smurf_private.h @@ -172,7 +172,8 @@ inline static SIMCALL_FUNC_RETURN_TYPE(RES) simcall_BODY_##NAME(MAP(SIMCALL_ARG, ##__VA_ARGS__)) { \ smx_process_t self = SIMIX_process_self(); \ self->simcall.call = TYPE; \ - memset(self->simcall.args, 0, sizeof(self->simcall.args)); \ + memset(&self->simcall.result, 0, sizeof(self->simcall.result)); \ + memset(self->simcall.args, 0, sizeof(self->simcall.args)); \ MAP_WITH_DEFAULT_ARGS(SIMCALL_INIT_FIELD, (), ##__VA_ARGS__) \ if (self != simix_global->maestro_process) { \ XBT_DEBUG("Yield process '%s' on simcall %s (%d)", self->name, \ diff --git a/src/smpi/smpi_replay.c b/src/smpi/smpi_replay.c index 843129146a..a17362e640 100644 --- a/src/smpi/smpi_replay.c +++ b/src/smpi/smpi_replay.c @@ -14,6 +14,7 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(smpi_replay,smpi,"Trace Replay with SMPI"); int communicator_size = 0; static int active_processes = 0; +xbt_dynar_t *reqq; static void log_timed_action (const char *const *action, double clock){ if (XBT_LOG_ISENABLED(smpi_replay, xbt_log_priority_verbose)){ @@ -23,11 +24,13 @@ static void log_timed_action (const char *const *action, double clock){ } } + typedef struct { xbt_dynar_t isends; /* of MPI_Request */ xbt_dynar_t irecvs; /* of MPI_Request */ } s_smpi_replay_globals_t, *smpi_replay_globals_t; + /* Helper function */ static double parse_double(const char *string) { @@ -41,17 +44,27 @@ static double parse_double(const char *string) static void action_init(const char *const *action) { + int i; XBT_DEBUG("Initialize the counters"); smpi_replay_globals_t globals = xbt_new(s_smpi_replay_globals_t, 1); globals->isends = xbt_dynar_new(sizeof(MPI_Request),NULL); globals->irecvs = xbt_dynar_new(sizeof(MPI_Request),NULL); - + + smpi_process_set_user_data((void*) globals); /* start a simulated timer */ smpi_process_simulated_start(); /*initialize the number of active processes */ active_processes = smpi_process_count(); + + reqq=xbt_new0(xbt_dynar_t,active_processes); + + for(i=0;isend = 1; @@ -146,6 +160,7 @@ static void action_Isend(const char *const *action) #endif xbt_dynar_push(globals->isends,&request); + xbt_dynar_push(reqq[smpi_comm_rank(MPI_COMM_WORLD)],&request); log_timed_action (action, clock); } @@ -190,11 +205,13 @@ static void action_Irecv(const char *const *action) #endif request = smpi_mpi_irecv(NULL, size, MPI_BYTE, from, 0, MPI_COMM_WORLD); + #ifdef HAVE_TRACING TRACE_smpi_ptp_out(rank, src_traced, rank, __FUNCTION__); request->recv = 1; #endif xbt_dynar_push(globals->irecvs,&request); + xbt_dynar_push(reqq[smpi_comm_rank(MPI_COMM_WORLD)],&request); log_timed_action (action, clock); } @@ -236,7 +253,75 @@ static void action_wait(const char *const *action){ static void action_waitall(const char *const *action){ double clock = smpi_process_simulated_elapsed(); -// smpi_mpi_waitall(count, requests, status); + int count_requests=0; + unsigned int i=0; + + count_requests=xbt_dynar_length(reqq[smpi_comm_rank(MPI_COMM_WORLD)]); + + if (count_requests>0) { + MPI_Request requests[count_requests]; + MPI_Status status[count_requests]; + + /* The reqq is an array of dynars. Its index corresponds to the rank. + Thus each rank saves its own requests to the array request. */ + xbt_dynar_foreach(reqq[smpi_comm_rank(MPI_COMM_WORLD)],i,requests[i]); + + #ifdef HAVE_TRACING + //save information from requests + + xbt_dynar_t srcs = xbt_dynar_new(sizeof(int), NULL); + xbt_dynar_t dsts = xbt_dynar_new(sizeof(int), NULL); + xbt_dynar_t recvs = xbt_dynar_new(sizeof(int), NULL); + for (i = 0; i < count_requests; i++) { + if(requests[i]){ + int *asrc = xbt_new(int, 1); + int *adst = xbt_new(int, 1); + int *arecv = xbt_new(int, 1); + *asrc = requests[i]->src; + *adst = requests[i]->dst; + *arecv = requests[i]->recv; + xbt_dynar_insert_at(srcs, i, asrc); + xbt_dynar_insert_at(dsts, i, adst); + xbt_dynar_insert_at(recvs, i, arecv); + xbt_free(asrc); + xbt_free(adst); + xbt_free(arecv); + }else { + int *t = xbt_new(int, 1); + xbt_dynar_insert_at(srcs, i, t); + xbt_dynar_insert_at(dsts, i, t); + xbt_dynar_insert_at(recvs, i, t); + xbt_free(t); + } + } + int rank_traced = smpi_process_index(); + TRACE_smpi_computing_out(rank_traced); + + TRACE_smpi_ptp_in(rank_traced, -1, -1, __FUNCTION__); + #endif + + smpi_mpi_waitall(count_requests, requests, status); + + #ifdef HAVE_TRACING + for (i = 0; i < count_requests; i++) { + int src_traced, dst_traced, is_wait_for_receive; + xbt_dynar_get_cpy(srcs, i, &src_traced); + xbt_dynar_get_cpy(dsts, i, &dst_traced); + xbt_dynar_get_cpy(recvs, i, &is_wait_for_receive); + if (is_wait_for_receive) { + TRACE_smpi_recv(rank_traced, src_traced, dst_traced); + } + } + TRACE_smpi_ptp_out(rank_traced, -1, -1, __FUNCTION__); + //clean-up of dynars + xbt_dynar_free(&srcs); + xbt_dynar_free(&dsts); + xbt_dynar_free(&recvs); + TRACE_smpi_computing_in(rank_traced); + #endif + + xbt_dynar_reset(reqq[smpi_comm_rank(MPI_COMM_WORLD)]); + } log_timed_action (action, clock); } @@ -317,9 +402,12 @@ static void action_allReduce(const char *const *action) { static void action_allToAll(const char *const *action) { double clock = smpi_process_simulated_elapsed(); - double comm_size = smpi_comm_size(MPI_COMM_WORLD); - double send_size = parse_double(action[2]); - double recv_size = parse_double(action[3]); + int comm_size = smpi_comm_size(MPI_COMM_WORLD); + int send_size = atoi(action[2]); + int recv_size = atoi(action[3]); + void *send = xbt_new0(int, send_size*comm_size); + void *recv = xbt_new0(int, send_size*comm_size); + #ifdef HAVE_TRACING int rank = smpi_process_index(); @@ -328,16 +416,17 @@ static void action_allToAll(const char *const *action) { #endif if (send_size < 200 && comm_size > 12) { - smpi_coll_tuned_alltoall_bruck(NULL, send_size, MPI_BYTE, - NULL, recv_size, MPI_BYTE, + smpi_coll_tuned_alltoall_bruck(send, send_size, MPI_BYTE, + recv, recv_size, MPI_BYTE, MPI_COMM_WORLD); } else if (send_size < 3000) { - smpi_coll_tuned_alltoall_basic_linear(NULL, send_size, MPI_BYTE, - NULL, recv_size, MPI_BYTE, + + smpi_coll_tuned_alltoall_basic_linear(send, send_size, MPI_BYTE, + recv, recv_size, MPI_BYTE, MPI_COMM_WORLD); } else { - smpi_coll_tuned_alltoall_pairwise(NULL, send_size, MPI_BYTE, - NULL, recv_size, MPI_BYTE, + smpi_coll_tuned_alltoall_pairwise(send, send_size, MPI_BYTE, + recv, recv_size, MPI_BYTE, MPI_COMM_WORLD); } @@ -347,12 +436,21 @@ static void action_allToAll(const char *const *action) { #endif log_timed_action (action, clock); + xbt_free(send); + xbt_free(recv); } static void action_allToAllv(const char *const *action) { double clock = smpi_process_simulated_elapsed(); +// int comm_size = smpi_comm_size(MPI_COMM_WORLD); + +// PMPI_Alltoallv(NULL, send_size, send_disp, +// MPI_BYTE, NULL, recv_size, +// recv_disp, MPI_BYTE, MPI_COMM_WORLD); + log_timed_action (action, clock); + } void smpi_replay_init(int *argc, char***argv){ @@ -386,10 +484,10 @@ int smpi_replay_finalize(){ double sim_time= 1.; /* One active process will stop. Decrease the counter*/ active_processes--; - if(!active_processes){ /* Last process alive speaking */ /* end the simulated timer */ + xbt_dynar_free(reqq); sim_time = smpi_process_simulated_elapsed(); XBT_INFO("Simulation time %g", sim_time); _xbt_replay_action_exit(); diff --git a/src/surf/simgrid_dtd.c b/src/surf/simgrid_dtd.c index 931756b254..c069682415 100644 --- a/src/surf/simgrid_dtd.c +++ b/src/surf/simgrid_dtd.c @@ -4356,8 +4356,8 @@ char *surf_parse_text; * * This program was generated with the FleXML XML processor generator. * FleXML is Copyright (C) 1999-2005 Kristoffer Rose. All rights reserved. - * FleXML is Copyright (C) 2003-2011 Martin Quinson. All rights reserved. - * (Id: flexml.pl,v 1.69 2012/12/20 00:13:40 mquinson Exp). + * FleXML is Copyright (C) 2003-2013 Martin Quinson. All rights reserved. + * (1.9.6). * * There are two, intertwined parts to this program, part A and part B. * @@ -4366,7 +4366,7 @@ char *surf_parse_text; * * Some parts, here collectively called "Part A", are found in the * FleXML package. They are Copyright (C) 1999-2005 Kristoffer Rose - * and Copyright (C) 2003-2011 Martin Quinson. All rights reserved. + * and Copyright (C) 2003-2013 Martin Quinson. All rights reserved. * * You can redistribute, use, perform, display and/or modify "Part A" * provided the following two conditions hold: @@ -4399,10 +4399,7 @@ char *surf_parse_text; */ /* Version strings. */ -const char rcs_surfxml_flexml_skeleton[] = - "$" "Id: skel,v 1.40 2007/10/11 09:57:24 mquinson Exp $"; -const char rcs_surfxml_flexml[] = - "$" "Id: flexml.pl,v 1.69 2012/12/20 00:13:40 mquinson Exp $"; +const char surfxml_flexml_version[] = "1.9.6"; /* ANSI headers. */ #include /* for realloc() -- needed here when using flex 2.5.4 */ diff --git a/src/xbt/graphxml.c b/src/xbt/graphxml.c index 9581d7931f..0f5a9e4ce3 100644 --- a/src/xbt/graphxml.c +++ b/src/xbt/graphxml.c @@ -1057,8 +1057,8 @@ char *xbt_graph_parse_text; * * This program was generated with the FleXML XML processor generator. * FleXML is Copyright (C) 1999-2005 Kristoffer Rose. All rights reserved. - * FleXML is Copyright (C) 2003-2011 Martin Quinson. All rights reserved. - * (Id: flexml.pl,v 1.69 2012/12/20 00:13:40 mquinson Exp). + * FleXML is Copyright (C) 2003-2013 Martin Quinson. All rights reserved. + * (1.9.6). * * There are two, intertwined parts to this program, part A and part B. * @@ -1067,7 +1067,7 @@ char *xbt_graph_parse_text; * * Some parts, here collectively called "Part A", are found in the * FleXML package. They are Copyright (C) 1999-2005 Kristoffer Rose - * and Copyright (C) 2003-2011 Martin Quinson. All rights reserved. + * and Copyright (C) 2003-2013 Martin Quinson. All rights reserved. * * You can redistribute, use, perform, display and/or modify "Part A" * provided the following two conditions hold: @@ -1100,10 +1100,7 @@ char *xbt_graph_parse_text; */ /* Version strings. */ -const char rcs_graphxml_flexml_skeleton[] = - "$" "Id: skel,v 1.40 2007/10/11 09:57:24 mquinson Exp $"; -const char rcs_graphxml_flexml[] = - "$" "Id: flexml.pl,v 1.69 2012/12/20 00:13:40 mquinson Exp $"; +const char graphxml_flexml_version[] = "1.9.6"; /* ANSI headers. */ #include /* for realloc() -- needed here when using flex 2.5.4 */ diff --git a/src/xbt/mmalloc/mm_diff.c b/src/xbt/mmalloc/mm_diff.c index 2aa4c8e859..8c67d8d8ea 100644 --- a/src/xbt/mmalloc/mm_diff.c +++ b/src/xbt/mmalloc/mm_diff.c @@ -15,6 +15,7 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(mm_diff, xbt, xbt_dynar_t mc_heap_comparison_ignore; xbt_dynar_t stacks_areas; +void *maestro_stack_start, *maestro_stack_end; static void heap_area_pair_free(heap_area_pair_t pair); static void heap_area_pair_free_voidp(void *d); @@ -22,11 +23,13 @@ static int add_heap_area_pair(xbt_dynar_t list, int block1, int fragment1, int b static int is_new_heap_area_pair(xbt_dynar_t list, int block1, int fragment1, int block2, int fragment2); static heap_area_t new_heap_area(int block, int fragment); -static size_t heap_comparison_ignore_size(void *address); +static size_t heap_comparison_ignore_size(xbt_dynar_t list, void *address); static void add_heap_equality(xbt_dynar_t equals, void *a1, void *a2); static void remove_heap_equality(xbt_dynar_t equals, int address, void *a); -static char* is_stack(void *address); +static int is_stack(void *address); +static int is_block_stack(int block); +static int equal_blocks(int b1, int b2); void mmalloc_backtrace_block_display(void* heapinfo, int block){ @@ -112,10 +115,11 @@ void mmalloc_backtrace_display(void *addr){ void *s_heap = NULL, *heapbase1 = NULL, *heapbase2 = NULL; malloc_info *heapinfo1 = NULL, *heapinfo2 = NULL; size_t heaplimit = 0, heapsize1 = 0, heapsize2 = 0; +xbt_dynar_t to_ignore1 = NULL, to_ignore2 = NULL; -int ignore_done = 0; +int ignore_done1 = 0, ignore_done2 = 0; -void init_heap_information(xbt_mheap_t heap1, xbt_mheap_t heap2){ +void init_heap_information(xbt_mheap_t heap1, xbt_mheap_t heap2, xbt_dynar_t i1, xbt_dynar_t i2){ heaplimit = ((struct mdesc *)heap1)->heaplimit; @@ -129,10 +133,26 @@ void init_heap_information(xbt_mheap_t heap1, xbt_mheap_t heap2){ heapsize1 = heap1->heapsize; heapsize2 = heap2->heapsize; + + to_ignore1 = i1; + to_ignore2 = i2; + + if(MC_is_active()){ + MC_ignore_data_bss(&heaplimit, sizeof(heaplimit)); + MC_ignore_data_bss(&s_heap, sizeof(s_heap)); + MC_ignore_data_bss(&heapbase1, sizeof(heapbase1)); + MC_ignore_data_bss(&heapbase2, sizeof(heapbase2)); + MC_ignore_data_bss(&heapinfo1, sizeof(heapinfo1)); + MC_ignore_data_bss(&heapinfo2, sizeof(heapinfo2)); + MC_ignore_data_bss(&heapsize1, sizeof(heapsize1)); + MC_ignore_data_bss(&heapsize2, sizeof(heapsize2)); + MC_ignore_data_bss(&to_ignore1, sizeof(to_ignore1)); + MC_ignore_data_bss(&to_ignore2, sizeof(to_ignore2)); + } } -int mmalloc_compare_heap(xbt_mheap_t heap1, xbt_mheap_t heap2, xbt_dynar_t *stack1, xbt_dynar_t *stack2, xbt_dynar_t equals){ +int mmalloc_compare_heap(xbt_mheap_t heap1, xbt_mheap_t heap2){ if(heap1 == NULL && heap1 == NULL){ XBT_DEBUG("Malloc descriptors null"); @@ -149,14 +169,12 @@ int mmalloc_compare_heap(xbt_mheap_t heap1, xbt_mheap_t heap2, xbt_dynar_t *stac size_t current_block = -1; /* avoid "maybe uninitialized" warning */ size_t current_fragment; void *addr_block1, *addr_block2, *addr_frag1, *addr_frag2; - void *snap_addr_block1, *snap_addr_block2; - char *stack_name; int nb_diff1 = 0, nb_diff2 = 0; xbt_dynar_t previous = xbt_dynar_new(sizeof(heap_area_pair_t), heap_area_pair_free_voidp); int equal, res_compare = 0; - + /* Check busy blocks*/ i1 = 1; @@ -171,17 +189,16 @@ int mmalloc_compare_heap(xbt_mheap_t heap1, xbt_mheap_t heap2, xbt_dynar_t *stac } addr_block1 = ((void*) (((ADDR2UINT(i1)) - 1) * BLOCKSIZE + (char*)((xbt_mheap_t)s_heap)->heapbase)); - snap_addr_block1 = ((void*) (((ADDR2UINT(i1)) - 1) * BLOCKSIZE + (char*)heapbase1)); if(heapinfo1[i1].type == 0){ /* Large block */ - if((xbt_dynar_length(*stack1) < xbt_dynar_length(stacks_areas)) && ((stack_name = is_stack(addr_block1)) != NULL)){ - stack_region_t stack = xbt_new0(s_stack_region_t, 1); - stack->address = snap_addr_block1; - stack->process_name = strdup(stack_name); - stack->size = heapinfo1[i1].busy_block.busy_size; - xbt_dynar_push(*stack1, &stack); - res_compare = -1; + if(is_stack(addr_block1)){ + for(k=0; k < heapinfo1[i1].busy_block.size; k++) + heapinfo1[i1+k].busy_block.equal_to = new_heap_area(i1, -1); + for(k=0; k < heapinfo2[i1].busy_block.size; k++) + heapinfo2[i1+k].busy_block.equal_to = new_heap_area(i1, -1); + i1 = i1 + heapinfo1[current_block].busy_block.size; + continue; } if(heapinfo1[i1].busy_block.equal_to != NULL){ @@ -199,26 +216,16 @@ int mmalloc_compare_heap(xbt_mheap_t heap1, xbt_mheap_t heap2, xbt_dynar_t *stac if(heapinfo2[current_block].busy_block.equal_to == NULL){ addr_block2 = ((void*) (((ADDR2UINT(current_block)) - 1) * BLOCKSIZE + (char*)((xbt_mheap_t)s_heap)->heapbase)); - snap_addr_block2 = ((void*) (((ADDR2UINT(current_block)) - 1) * BLOCKSIZE + (char*)heapbase2)); - - if((xbt_dynar_length(*stack2) < xbt_dynar_length(stacks_areas)) && ((stack_name = is_stack(addr_block2)) != NULL)){ - stack_region_t stack = xbt_new0(s_stack_region_t, 1); - stack->address = snap_addr_block2; - stack->process_name = strdup(stack_name); - stack->size = heapinfo2[current_block].busy_block.busy_size; - xbt_dynar_push(*stack2, &stack); - res_compare = -1; - } - res_compare = compare_area(addr_block1, addr_block2, previous, equals); + res_compare = compare_area(addr_block1, addr_block2, previous); - if(res_compare == 0 || res_compare == -1){ + if(res_compare == 0){ for(k=1; k < heapinfo2[current_block].busy_block.size; k++) heapinfo2[current_block+k].busy_block.equal_to = new_heap_area(i1, -1); for(k=1; k < heapinfo1[current_block].busy_block.size; k++) heapinfo1[current_block+k].busy_block.equal_to = new_heap_area(i1, -1); equal = 1; - match_equals(previous, equals); + match_equals(previous); i1 = i1 + heapinfo1[current_block].busy_block.size; } @@ -231,16 +238,6 @@ int mmalloc_compare_heap(xbt_mheap_t heap1, xbt_mheap_t heap2, xbt_dynar_t *stac while(i2 <= heaplimit && !equal){ addr_block2 = ((void*) (((ADDR2UINT(i2)) - 1) * BLOCKSIZE + (char*)((xbt_mheap_t)s_heap)->heapbase)); - snap_addr_block2 = ((void*) (((ADDR2UINT(i2)) - 1) * BLOCKSIZE + (char*)heapbase2)); - - if((xbt_dynar_length(*stack2) < xbt_dynar_length(stacks_areas)) && ((stack_name = is_stack(addr_block2)) != NULL)){ - stack_region_t stack = xbt_new0(s_stack_region_t, 1); - stack->address = snap_addr_block2; - stack->process_name = strdup(stack_name); - stack->size = heapinfo2[i2].busy_block.busy_size; - xbt_dynar_push(*stack2, &stack); - res_compare = -1; - } if(i2 == current_block){ i2++; @@ -257,15 +254,15 @@ int mmalloc_compare_heap(xbt_mheap_t heap1, xbt_mheap_t heap2, xbt_dynar_t *stac continue; } - res_compare = compare_area(addr_block1, addr_block2, previous, equals); + res_compare = compare_area(addr_block1, addr_block2, previous); - if(res_compare == 0 || res_compare == -1){ + if(res_compare == 0){ for(k=1; k < heapinfo2[i2].busy_block.size; k++) heapinfo2[i2+k].busy_block.equal_to = new_heap_area(i1, -1); for(k=1; k < heapinfo1[i1].busy_block.size; k++) heapinfo1[i1+k].busy_block.equal_to = new_heap_area(i2, -1); equal = 1; - match_equals(previous, equals); + match_equals(previous); i1 = i1 + heapinfo1[i1].busy_block.size; } @@ -276,7 +273,7 @@ int mmalloc_compare_heap(xbt_mheap_t heap1, xbt_mheap_t heap2, xbt_dynar_t *stac } if(!equal){ - XBT_DEBUG("Block %zu not found (size_used = %zu)", i1, heapinfo1[i1].busy_block.busy_size); + XBT_DEBUG("Block %zu not found (size_used = %zu, addr = %p)", i1, heapinfo1[i1].busy_block.busy_size, addr_block1); i1 = heaplimit + 1; nb_diff1++; } @@ -306,11 +303,11 @@ int mmalloc_compare_heap(xbt_mheap_t heap1, xbt_mheap_t heap2, xbt_dynar_t *stac addr_block2 = ((void*) (((ADDR2UINT(current_block)) - 1) * BLOCKSIZE + (char*)((xbt_mheap_t)s_heap)->heapbase)); addr_frag2 = (void*) ((char *)addr_block2 + (current_fragment << ((xbt_mheap_t)s_heap)->heapinfo[current_block].type)); - res_compare = compare_area(addr_frag1, addr_frag2, previous, equals); + res_compare = compare_area(addr_frag1, addr_frag2, previous); if(res_compare == 0){ equal = 1; - match_equals(previous, equals); + match_equals(previous); } xbt_dynar_reset(previous); @@ -332,16 +329,16 @@ int mmalloc_compare_heap(xbt_mheap_t heap1, xbt_mheap_t heap2, xbt_dynar_t *stac continue; if(heapinfo2[i2].busy_frag.equal_to[j2] != NULL) - continue; + continue; addr_block2 = ((void*) (((ADDR2UINT(i2)) - 1) * BLOCKSIZE + (char*)((xbt_mheap_t)s_heap)->heapbase)); addr_frag2 = (void*) ((char *)addr_block2 + (j2 << ((xbt_mheap_t)s_heap)->heapinfo[i2].type)); - res_compare = compare_area(addr_frag1, addr_frag2, previous, equals); + res_compare = compare_area(addr_frag1, addr_frag2, previous); if(res_compare == 0){ equal = 1; - match_equals(previous, equals); + match_equals(previous); xbt_dynar_reset(previous); break; } @@ -355,7 +352,7 @@ int mmalloc_compare_heap(xbt_mheap_t heap1, xbt_mheap_t heap2, xbt_dynar_t *stac } if(heapinfo1[i1].busy_frag.equal_to[j1] == NULL){ - XBT_DEBUG("Block %zu, fragment %zu not found (size_used = %d)", i1, j1, heapinfo1[i1].busy_frag.frag_size[j1]); + XBT_DEBUG("Block %zu, fragment %zu not found (size_used = %d, address = %p)", i1, j1, heapinfo1[i1].busy_frag.frag_size[j1], addr_frag1); i2 = heaplimit + 1; i1 = heaplimit + 1; nb_diff1++; @@ -412,6 +409,9 @@ int mmalloc_compare_heap(xbt_mheap_t heap1, xbt_mheap_t heap2, xbt_dynar_t *stac i++; } + if(current_block == heaplimit) + XBT_DEBUG("Number of blocks/fragments not found in heap1 : %d", nb_diff1); + i = 1; while(i<=heaplimit){ @@ -428,8 +428,6 @@ int mmalloc_compare_heap(xbt_mheap_t heap1, xbt_mheap_t heap2, xbt_dynar_t *stac } } } - xbt_free(heapinfo2[i].busy_block.equal_to); - heapinfo2[i].busy_block.equal_to = NULL; } if(heapinfo2[i].type > 0){ addr_block2 = ((void*) (((ADDR2UINT(i)) - 1) * BLOCKSIZE + (char*)heapbase2)); @@ -446,6 +444,46 @@ int mmalloc_compare_heap(xbt_mheap_t heap1, xbt_mheap_t heap2, xbt_dynar_t *stac } } } + } + } + i++; + } + + if(current_block == heaplimit) + XBT_DEBUG("Number of blocks/fragments not found in heap2 : %d", nb_diff2); + + xbt_dynar_free(&previous); + + return ((nb_diff1 > 0) || (nb_diff2 > 0)); +} + +void reset_heap_information(){ + + size_t i = 0, j; + + while(i<=heaplimit){ + if(heapinfo1[i].type == 0){ + xbt_free(heapinfo1[i].busy_block.equal_to); + heapinfo1[i].busy_block.equal_to = NULL; + } + if(heapinfo1[i].type > 0){ + for(j=0; j < (size_t) (BLOCKSIZE >> heapinfo1[i].type); j++){ + xbt_free(heapinfo1[i].busy_frag.equal_to[j]); + heapinfo1[i].busy_frag.equal_to[j] = NULL; + } + } + i++; + } + + i = 0; + + while(i<=heaplimit){ + if(heapinfo2[i].type == 0){ + xbt_free(heapinfo2[i].busy_block.equal_to); + heapinfo2[i].busy_block.equal_to = NULL; + } + if(heapinfo2[i].type > 0){ + for(j=0; j < (size_t) (BLOCKSIZE >> heapinfo2[i].type); j++){ xbt_free(heapinfo2[i].busy_frag.equal_to[j]); heapinfo2[i].busy_frag.equal_to[j] = NULL; } @@ -453,13 +491,12 @@ int mmalloc_compare_heap(xbt_mheap_t heap1, xbt_mheap_t heap2, xbt_dynar_t *stac i++; } - xbt_dynar_free(&previous); - ignore_done = 0; + ignore_done1 = 0, ignore_done2 = 0; s_heap = NULL, heapbase1 = NULL, heapbase2 = NULL; heapinfo1 = NULL, heapinfo2 = NULL; heaplimit = 0, heapsize1 = 0, heapsize2 = 0; + to_ignore1 = NULL, to_ignore2 = NULL; - return ((nb_diff1 > 0) || (nb_diff2 > 0)); } static heap_area_t new_heap_area(int block, int fragment){ @@ -471,16 +508,16 @@ static heap_area_t new_heap_area(int block, int fragment){ } -static size_t heap_comparison_ignore_size(void *address){ +static size_t heap_comparison_ignore_size(xbt_dynar_t ignore_list, void *address){ unsigned int cursor = 0; int start = 0; - int end = xbt_dynar_length(mc_heap_comparison_ignore) - 1; + int end = xbt_dynar_length(ignore_list) - 1; mc_heap_ignore_region_t region; while(start <= end){ cursor = (start + end) / 2; - region = (mc_heap_ignore_region_t)xbt_dynar_get_as(mc_heap_comparison_ignore, cursor, mc_heap_ignore_region_t); + region = (mc_heap_ignore_region_t)xbt_dynar_get_as(ignore_list, cursor, mc_heap_ignore_region_t); if(region->address == address) return region->size; if(region->address < address) @@ -493,10 +530,10 @@ static size_t heap_comparison_ignore_size(void *address){ } -int compare_area(void *area1, void* area2, xbt_dynar_t previous, xbt_dynar_t equals){ +int compare_area(void *area1, void* area2, xbt_dynar_t previous){ size_t i = 0, pointer_align = 0, ignore1 = 0, ignore2 = 0; - void *address_pointed1, *address_pointed2; + void *addr_pointed1, *addr_pointed2; int res_compare; size_t block1, frag1, block2, frag2, size; int check_ignore = 0; @@ -514,6 +551,9 @@ int compare_area(void *area1, void* area2, xbt_dynar_t previous, xbt_dynar_t equ block1 = ((char*)area1 - (char*)((xbt_mheap_t)s_heap)->heapbase) / BLOCKSIZE + 1; block2 = ((char*)area2 - (char*)((xbt_mheap_t)s_heap)->heapbase) / BLOCKSIZE + 1; + if(is_block_stack((int)block1) && is_block_stack((int)block2)) + return 0; + if(((char *)area1 < (char*)((xbt_mheap_t)s_heap)->heapbase) || (block1 > heapsize1) || (block1 < 1) || ((char *)area2 < (char*)((xbt_mheap_t)s_heap)->heapbase) || (block2 > heapsize2) || (block2 < 1)) return 1; @@ -525,6 +565,11 @@ int compare_area(void *area1, void* area2, xbt_dynar_t previous, xbt_dynar_t equ if(heapinfo1[block1].type == -1){ return 0; }else if(heapinfo1[block1].type == 0){ + if(heapinfo1[block1].busy_block.equal_to != NULL){ + if(equal_blocks(block1, block2)){ + return 0; + } + } if(heapinfo1[block1].busy_block.size != heapinfo2[block2].busy_block.size) return 1; if(heapinfo1[block1].busy_block.busy_size != heapinfo2[block2].busy_block.busy_size) @@ -539,7 +584,7 @@ int compare_area(void *area1, void* area2, xbt_dynar_t previous, xbt_dynar_t equ area1_to_compare = addr_block1; area2_to_compare = addr_block2; - if((ignore_done < xbt_dynar_length(mc_heap_comparison_ignore)) && heapinfo1[block1].busy_block.ignore == 1) + if(heapinfo1[block1].busy_block.ignore == 1 || heapinfo2[block2].busy_block.ignore == 1) check_ignore = 1; }else{ frag1 = ((uintptr_t) (ADDR2UINT (area1) % (BLOCKSIZE))) >> heapinfo1[block1].type; @@ -560,8 +605,8 @@ int compare_area(void *area1, void* area2, xbt_dynar_t previous, xbt_dynar_t equ if(size == 0) return 0; - - if((ignore_done < xbt_dynar_length(mc_heap_comparison_ignore)) && heapinfo1[block1].busy_frag.ignore[frag1] == 1) + + if(heapinfo1[block1].busy_frag.ignore[frag1] == 1 || heapinfo2[block2].busy_frag.ignore[frag2] == 1) check_ignore = 1; } }else if((heapinfo1[block1].type > 0) && (heapinfo2[block2].type > 0)){ @@ -584,7 +629,7 @@ int compare_area(void *area1, void* area2, xbt_dynar_t previous, xbt_dynar_t equ if(size == 0) return 0; - if((ignore_done < xbt_dynar_length(mc_heap_comparison_ignore)) && heapinfo1[block1].busy_frag.ignore[frag1] == 1) + if(heapinfo1[block1].busy_frag.ignore[frag1] == 1 || heapinfo2[block2].busy_frag.ignore[frag2] == 1) check_ignore = 1; }else{ return 1; @@ -592,12 +637,12 @@ int compare_area(void *area1, void* area2, xbt_dynar_t previous, xbt_dynar_t equ while(i 0){ - if((ignore2 = heap_comparison_ignore_size((char *)area2 + i)) == ignore1){ + if(check_ignore){ + if((ignore_done1 < xbt_dynar_length(to_ignore1)) && ((ignore1 = heap_comparison_ignore_size(to_ignore1, (char *)area1 + i)) > 0)){ + if((ignore_done2 < xbt_dynar_length(to_ignore2)) && ((ignore2 = heap_comparison_ignore_size(to_ignore2, (char *)area2 + i)) == ignore1)){ i = i + ignore2; - ignore_done++; + ignore_done1++; + ignore_done2++; continue; } } @@ -607,14 +652,19 @@ int compare_area(void *area1, void* area2, xbt_dynar_t previous, xbt_dynar_t equ /* Check pointer difference */ pointer_align = (i / sizeof(void*)) * sizeof(void*); - address_pointed1 = *((void **)((char *)area1_to_compare + pointer_align)); - address_pointed2 = *((void **)((char *)area2_to_compare + pointer_align)); + addr_pointed1 = *((void **)((char *)area1_to_compare + pointer_align)); + addr_pointed2 = *((void **)((char *)area2_to_compare + pointer_align)); + + if(addr_pointed1 > maestro_stack_start && addr_pointed1 < maestro_stack_end && addr_pointed2 > maestro_stack_start && addr_pointed2 < maestro_stack_end){ + i = pointer_align + sizeof(void *); + continue; + } - res_compare = compare_area(address_pointed1, address_pointed2, previous, equals); + res_compare = compare_area(addr_pointed1, addr_pointed2, previous); if(res_compare == 1) return 1; - + i = pointer_align + sizeof(void *); }else{ @@ -625,7 +675,7 @@ int compare_area(void *area1, void* area2, xbt_dynar_t previous, xbt_dynar_t equ } if(match_pairs) - match_equals(previous, equals); + match_equals(previous); return 0; @@ -675,66 +725,46 @@ static int is_new_heap_area_pair(xbt_dynar_t list, int block1, int fragment1, in return 1; } -void match_equals(xbt_dynar_t list, xbt_dynar_t equals){ +void match_equals(xbt_dynar_t list){ unsigned int cursor = 0; heap_area_pair_t current_pair; heap_area_t previous_area; - void *real_addr_block1, *real_addr_block2, *real_addr_frag1, *real_addr_frag2; - xbt_dynar_foreach(list, cursor, current_pair){ if(current_pair->fragment1 != -1){ - - real_addr_block1 = ((void*) (((ADDR2UINT((size_t)current_pair->block1)) - 1) * BLOCKSIZE + (char*)((xbt_mheap_t)s_heap)->heapbase)); - real_addr_frag1 = (void*) ((char *)real_addr_block1 + (current_pair->fragment1 << heapinfo1[current_pair->block1].type)); - real_addr_block2 = ((void*) (((ADDR2UINT((size_t)current_pair->block2)) - 1) * BLOCKSIZE + (char*)((xbt_mheap_t)s_heap)->heapbase)); - real_addr_frag2 = (void*) ((char *)real_addr_block2 + (current_pair->fragment2 << heapinfo2[current_pair->block2].type)); - + if(heapinfo1[current_pair->block1].busy_frag.equal_to[current_pair->fragment1] != NULL){ - remove_heap_equality(equals, 1, real_addr_frag1); previous_area = heapinfo1[current_pair->block1].busy_frag.equal_to[current_pair->fragment1]; xbt_free(heapinfo2[previous_area->block].busy_frag.equal_to[previous_area->fragment]); heapinfo2[previous_area->block].busy_frag.equal_to[previous_area->fragment] = NULL; xbt_free(previous_area); } if(heapinfo2[current_pair->block2].busy_frag.equal_to[current_pair->fragment2] != NULL){ - remove_heap_equality(equals, 2, real_addr_frag2); previous_area = heapinfo2[current_pair->block2].busy_frag.equal_to[current_pair->fragment2]; xbt_free(heapinfo1[previous_area->block].busy_frag.equal_to[previous_area->fragment]); heapinfo1[previous_area->block].busy_frag.equal_to[previous_area->fragment] = NULL; xbt_free(previous_area); } - - if(real_addr_frag1 != real_addr_frag2) - add_heap_equality(equals, real_addr_frag1, real_addr_frag2); heapinfo1[current_pair->block1].busy_frag.equal_to[current_pair->fragment1] = new_heap_area(current_pair->block2, current_pair->fragment2); heapinfo2[current_pair->block2].busy_frag.equal_to[current_pair->fragment2] = new_heap_area(current_pair->block1, current_pair->fragment1); }else{ - real_addr_block1 = ((void*) (((ADDR2UINT((size_t)current_pair->block1)) - 1) * BLOCKSIZE + (char*)((xbt_mheap_t)s_heap)->heapbase)); - real_addr_block2 = ((void*) (((ADDR2UINT((size_t)current_pair->block2)) - 1) * BLOCKSIZE + (char*)((xbt_mheap_t)s_heap)->heapbase)); - if(heapinfo1[current_pair->block1].busy_block.equal_to != NULL){ - remove_heap_equality(equals, 1, real_addr_block1); previous_area = heapinfo1[current_pair->block1].busy_block.equal_to; xbt_free(heapinfo2[previous_area->block].busy_block.equal_to); heapinfo2[previous_area->block].busy_block.equal_to = NULL; xbt_free(previous_area); } if(heapinfo2[current_pair->block2].busy_block.equal_to != NULL){ - remove_heap_equality(equals, 2, real_addr_block2); previous_area = heapinfo2[current_pair->block2].busy_block.equal_to; xbt_free(heapinfo1[previous_area->block].busy_block.equal_to); heapinfo1[previous_area->block].busy_block.equal_to = NULL; xbt_free(previous_area); } - - if(real_addr_block1 != real_addr_block2) - add_heap_equality(equals, real_addr_block1, real_addr_block2); heapinfo1[current_pair->block1].busy_block.equal_to = new_heap_area(current_pair->block2, current_pair->fragment2); heapinfo2[current_pair->block2].busy_block.equal_to = new_heap_area(current_pair->block1, current_pair->fragment1); @@ -873,16 +903,28 @@ int mmalloc_linear_compare_heap(xbt_mheap_t heap1, xbt_mheap_t heap2){ } -static char* is_stack(void *address){ +static int is_stack(void *address){ unsigned int cursor = 0; stack_region_t stack; xbt_dynar_foreach(stacks_areas, cursor, stack){ if(address == stack->address) - return stack->process_name; + return 1; } - return NULL; + return 0; +} + +static int is_block_stack(int block){ + unsigned int cursor = 0; + stack_region_t stack; + + xbt_dynar_foreach(stacks_areas, cursor, stack){ + if(block == stack->block) + return 1; + } + + return 0; } static void add_heap_equality(xbt_dynar_t equals, void *a1, void *a2){ @@ -1001,7 +1043,15 @@ int is_free_area(void *area, xbt_mheap_t heap){ } return 0; - - + +} +static int equal_blocks(b1, b2){ + if(heapinfo1[b1].busy_block.equal_to != NULL){ + if(heapinfo2[b2].busy_block.equal_to != NULL){ + if(((heap_area_t)(heapinfo1[b1].busy_block.equal_to))->block == b2 && ((heap_area_t)(heapinfo2[b2].busy_block.equal_to))->block == b1) + return 1; + } + } + return 0; } diff --git a/src/xbt/mmalloc/mm_module.c b/src/xbt/mmalloc/mm_module.c index 07cbe7ef7e..0dfd0279e1 100644 --- a/src/xbt/mmalloc/mm_module.c +++ b/src/xbt/mmalloc/mm_module.c @@ -344,6 +344,24 @@ void mmalloc_postexit(void) xbt_mheap_destroy_no_free(__mmalloc_default_mdp); } -size_t mmalloc_get_chunks_used(xbt_mheap_t heap){ - return ((struct mdesc *)heap)->heapstats.chunks_used; +size_t mmalloc_get_bytes_used(xbt_mheap_t heap){ + int i = 0, j = 0; + int bytes = 0; + + while(i<=((struct mdesc *)heap)->heaplimit){ + if(((struct mdesc *)heap)->heapinfo[i].type == 0){ + if(((struct mdesc *)heap)->heapinfo[i].busy_block.busy_size > 0) + bytes += ((struct mdesc *)heap)->heapinfo[i].busy_block.busy_size; + + }else if(((struct mdesc *)heap)->heapinfo[i].type > 0){ + for(j=0; j < (size_t) (BLOCKSIZE >> ((struct mdesc *)heap)->heapinfo[i].type); j++){ + if(((struct mdesc *)heap)->heapinfo[i].busy_frag.frag_size[j] > 0) + bytes += ((struct mdesc *)heap)->heapinfo[i].busy_frag.frag_size[j]; + } + } + i++; + } + + return bytes; } +