From: Arnaud Giersch Date: Thu, 17 Jan 2013 13:03:10 +0000 (+0100) Subject: Merge branch 'master' into vmtrace X-Git-Tag: v3_9_rc1~86 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/0c13871d73e933c1847faf8debea7b7745a3ff44?hp=-c Merge branch 'master' into vmtrace Conflicts: buildtools/Cmake/DefinePackages.cmake include/surf/simgrid_dtd.h include/xbt/graphxml.h src/instr/instr_config.c src/instr/instr_private.h src/simdag/dax_dtd.c src/simdag/dax_dtd.h src/surf/simgrid_dtd.c src/xbt/graphxml.c --- 0c13871d73e933c1847faf8debea7b7745a3ff44 diff --combined buildtools/Cmake/CompleteInFiles.cmake index 1d637be01d,2cb506e5bf..abcd9c94d2 --- a/buildtools/Cmake/CompleteInFiles.cmake +++ b/buildtools/Cmake/CompleteInFiles.cmake @@@ -52,7 -52,7 +52,7 @@@ ELSEIF(CMAKE_SYSTEM_PROCESSOR MATCHES " ELSEIF(CMAKE_SYSTEM_PROCESSOR MATCHES "^sh") message(STATUS "System processor: sh") - ELSE() #PROCESSOR NOT fIND + ELSE() #PROCESSOR NOT FOUND message(STATUS "PROCESSOR NOT FOUND: ${CMAKE_SYSTEM_PROCESSOR}") ENDIF() @@@ -118,7 -118,6 +118,6 @@@ CHECK_INCLUDE_FILE("sys/time.h" HAVE_SY CHECK_INCLUDE_FILE("sys/param.h" HAVE_SYS_PARAM_H) CHECK_INCLUDE_FILE("sys/sysctl.h" HAVE_SYS_SYSCTL_H) CHECK_INCLUDE_FILE("time.h" HAVE_TIME_H) - CHECK_INCLUDE_FILE("dlfcn.h" HAVE_DLFCN_H) CHECK_INCLUDE_FILE("inttypes.h" HAVE_INTTYPES_H) CHECK_INCLUDE_FILE("memory.h" HAVE_MEMORY_H) CHECK_INCLUDE_FILE("stdlib.h" HAVE_STDLIB_H) @@@ -157,10 -156,10 +156,10 @@@ else( endif() # Our usage of mmap is Linux-specific (flag MAP_ANONYMOUS), but kFreeBSD uses a GNU libc -IF(NOT "${CMAKE_SYSTEM}" MATCHES "Linux" AND NOT "${CMAKE_SYSTEM}" MATCHES "kFreeBSD" AND NOT "${CMAKE_SYSTEM}" MATCHES "GNU") +IF(NOT "${CMAKE_SYSTEM}" MATCHES "Linux" AND NOT "${CMAKE_SYSTEM}" MATCHES "kFreeBSD" AND NOT "${CMAKE_SYSTEM}" MATCHES "GNU" AND NOT "${CMAKE_SYSTEM}" MATCHES "Darwin") SET(HAVE_MMAP 0) message(STATUS "Warning: MMAP is thought as non functional on this architecture (${CMAKE_SYSTEM})") -ENDIF() +ENDIF(NOT "${CMAKE_SYSTEM}" MATCHES "Linux" AND NOT "${CMAKE_SYSTEM}" MATCHES "kFreeBSD" AND NOT "${CMAKE_SYSTEM}" MATCHES "GNU" AND NOT "${CMAKE_SYSTEM}" MATCHES "Darwin") if(WIN32) #THOSE FILES ARE FUNCTIONS ARE NOT DETECTED BUT THEY SHOULD... set(HAVE_UCONTEXT_H 1) @@@ -215,6 -214,40 +214,40 @@@ endif( CHECK_TYPE_SIZE(int SIZEOF_INT) CHECK_TYPE_SIZE(void* SIZEOF_VOIDP) + #-------------------------------------------------------------------------------------------------- + ### Check for GNU dynamic linker + CHECK_INCLUDE_FILE("dlfcn.h" HAVE_DLFCN_H) + if (HAVE_DLFCN_H) + execute_process(COMMAND ${CMAKE_C_COMPILER} ${CMAKE_HOME_DIRECTORY}/buildtools/Cmake/test_prog/prog_gnu_dynlinker.c -ldl -o test_gnu_ld + WORKING_DIRECTORY ${CMAKE_BINARY_DIR} + OUTPUT_VARIABLE HAVE_GNU_LD_compil + ) + if(HAVE_GNU_LD_compil) + set(HAVE_GNU_LD 0) + message(STATUS "Warning: test program toward GNU ld failed to compile:") + message(STATUS "${HAVE_GNU_LD_comp_output}") + else() + + execute_process(COMMAND ./test_gnu_ld + WORKING_DIRECTORY ${CMAKE_BINARY_DIR} + RESULT_VARIABLE HAVE_GNU_LD_run + OUTPUT_VARIABLE var_exec + ) + + if(NOT HAVE_GNU_LD_run) + set(HAVE_GNU_LD 1) + message(STATUS "We are using GNU dynamic linker") + else() + set(HAVE_GNU_LD 0) + message(STATUS "Warning: error while checking for GNU ld:") + message(STATUS "Test output: '${var_exec}'") + message(STATUS "Exit status: ${HAVE_GNU_LD_run}") + endif() + file(REMOVE test_gnu_ld) + endif() + endif() + + #-------------------------------------------------------------------------------------------------- ### Initialize of CONTEXT THREADS @@@ -541,7 -574,7 +574,7 @@@ endif( #AC_PROG_MAKE_SET - #AC_PRINTF_NULL + #AC_PRINTF_NULL FIXME: this is too ancient to survive! try_run(RUN_PRINTF_NULL_VAR COMPILE_PRINTF_NULL_VAR ${CMAKE_BINARY_DIR} ${CMAKE_HOME_DIRECTORY}/buildtools/Cmake/test_prog/prog_printf_null.c @@@ -757,6 -790,7 +790,7 @@@ configure_file(${CMAKE_HOME_DIRECTORY}/ configure_file(${CMAKE_HOME_DIRECTORY}/src/smpi/smpicc.in ${CMAKE_BINARY_DIR}/bin/smpicc @ONLY) configure_file(${CMAKE_HOME_DIRECTORY}/src/smpi/smpif2c.in ${CMAKE_BINARY_DIR}/bin/smpif2c @ONLY) configure_file(${CMAKE_HOME_DIRECTORY}/src/smpi/smpiff.in ${CMAKE_BINARY_DIR}/bin/smpiff @ONLY) + configure_file(${CMAKE_HOME_DIRECTORY}/src/smpi/smpif90.in ${CMAKE_BINARY_DIR}/bin/smpif90 @ONLY) configure_file(${CMAKE_HOME_DIRECTORY}/src/smpi/smpirun.in ${CMAKE_BINARY_DIR}/bin/smpirun @ONLY) ### Script used when simgrid is compiling @@@ -770,6 -804,7 +804,7 @@@ set(libdir "${CMAKE_BINARY_DIR}/lib" configure_file(${CMAKE_HOME_DIRECTORY}/src/smpi/smpicc.in ${CMAKE_BINARY_DIR}/smpi_script/bin/smpicc @ONLY) configure_file(${CMAKE_HOME_DIRECTORY}/src/smpi/smpif2c.in ${CMAKE_BINARY_DIR}/smpi_script/bin/smpif2c @ONLY) configure_file(${CMAKE_HOME_DIRECTORY}/src/smpi/smpiff.in ${CMAKE_BINARY_DIR}/smpi_script/bin/smpiff @ONLY) + configure_file(${CMAKE_HOME_DIRECTORY}/src/smpi/smpif90.in ${CMAKE_BINARY_DIR}/smpi_script/bin/smpif90 @ONLY) configure_file(${CMAKE_HOME_DIRECTORY}/src/smpi/smpirun.in ${CMAKE_BINARY_DIR}/smpi_script/bin/smpirun @ONLY) set(top_builddir ${CMAKE_HOME_DIRECTORY}) @@@ -778,10 -813,12 +813,12 @@@ if(NOT WIN32 execute_process(COMMAND chmod a=rwx ${CMAKE_BINARY_DIR}/bin/smpicc) execute_process(COMMAND chmod a=rwx ${CMAKE_BINARY_DIR}/bin/smpif2c) execute_process(COMMAND chmod a=rwx ${CMAKE_BINARY_DIR}/bin/smpiff) + execute_process(COMMAND chmod a=rwx ${CMAKE_BINARY_DIR}/bin/smpif90) execute_process(COMMAND chmod a=rwx ${CMAKE_BINARY_DIR}/bin/smpirun) execute_process(COMMAND chmod a=rwx ${CMAKE_BINARY_DIR}/smpi_script/bin/smpicc) execute_process(COMMAND chmod a=rwx ${CMAKE_BINARY_DIR}/smpi_script/bin/smpif2c) execute_process(COMMAND chmod a=rwx ${CMAKE_BINARY_DIR}/smpi_script/bin/smpiff) + execute_process(COMMAND chmod a=rwx ${CMAKE_BINARY_DIR}/smpi_script/bin/smpif90) execute_process(COMMAND chmod a=rwx ${CMAKE_BINARY_DIR}/smpi_script/bin/smpirun) endif() @@@ -801,6 -838,7 +838,7 @@@ set(generated_files_to_clea ${CMAKE_BINARY_DIR}/bin/smpicc ${CMAKE_BINARY_DIR}/bin/smpif2c ${CMAKE_BINARY_DIR}/bin/smpiff + ${CMAKE_BINARY_DIR}/bin/smpif90 ${CMAKE_BINARY_DIR}/bin/smpirun ${CMAKE_BINARY_DIR}/bin/colorize ${CMAKE_BINARY_DIR}/bin/simgrid_update_xml @@@ -817,7 -855,10 +855,10 @@@ else( configure_file(${CMAKE_HOME_DIRECTORY}/examples/msg/tracing/platform.xml ${CMAKE_BINARY_DIR}/examples/msg/tracing/platform.xml COPYONLY) configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions0.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions0.txt COPYONLY) configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions1.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions1.txt COPYONLY) + configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_allReduce.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_allReduce.txt COPYONLY) + configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_barrier.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_barrier.txt COPYONLY) configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_bcast.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_bcast.txt COPYONLY) + configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_with_isend.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_with_isend.txt COPYONLY) configure_file(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/hostfile ${CMAKE_BINARY_DIR}/teshsuite/smpi/hostfile COPYONLY) set(generated_files_to_clean @@@ -828,7 -869,10 +869,10 @@@ ${CMAKE_BINARY_DIR}/examples/msg/tracing/platform.xml ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions0.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions1.txt + ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_allReduce.txt + ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_barrier.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_bcast.txt + ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_with_isend.txt ${CMAKE_BINARY_DIR}/teshsuite/smpi/hostfile ) endif() diff --combined buildtools/Cmake/DefinePackages.cmake index 0f5e390168,cf125c02d8..56fd828081 --- a/buildtools/Cmake/DefinePackages.cmake +++ b/buildtools/Cmake/DefinePackages.cmake @@@ -1,9 -1,12 +1,12 @@@ ### define source packages set(EXTRA_DIST + src/include/smpi/smpi_interface.h + src/include/instr/instr_interface.h src/include/mc/datatypes.h src/include/mc/mc.h src/include/simgrid/platf_interface.h + src/include/simgrid/sg_config.h src/include/surf/datatypes.h src/include/surf/maxmin.h src/include/surf/random_mgr.h @@@ -83,11 -86,15 +86,15 @@@ src/xbt/mmalloc/mmtrace.awk src/xbt/mmalloc/mrealloc.c src/xbt/setset_private.h + src/win32/config.h + src/xbt/win32_ucontext.c + include/xbt/win32_ucontext.h tools/tesh/run_context.h tools/tesh/tesh.h ) set(SMPI_SRC + src/smpi/instr_smpi.c src/smpi/smpi_base.c src/smpi/smpi_bench.c src/smpi/smpi_c99.c @@@ -181,6 -188,8 +188,8 @@@ set(SURF_SR src/surf/cpu_cas01.c src/surf/cpu_ti.c src/surf/fair_bottleneck.c + src/surf/instr_routing.c + src/surf/instr_surf.c src/surf/lagrange.c src/surf/maxmin.c src/surf/network.c @@@ -191,7 -200,6 +200,6 @@@ src/surf/storage.c src/surf/surf.c src/surf/surf_action.c - src/surf/surf_config.c src/surf/surf_model.c src/surf/surf_routing.c src/surf/surf_routing_cluster.c @@@ -226,9 -234,14 +234,15 @@@ set(SIMIX_SR src/simix/smx_user.c ) + set(SIMGRID_SRC + src/simgrid/sg_config.c + ) + set(MSG_SRC + src/msg/instr_msg_process.c + src/msg/instr_msg_task.c ++ src/msg/instr_msg_vm.c src/msg/msg_actions.c - src/msg/msg_config.c src/msg/msg_deployment.c src/msg/msg_environment.c src/msg/msg_global.c @@@ -310,9 -323,6 +324,6 @@@ set(LUA_SR set(TRACING_SRC src/instr/instr_config.c src/instr/instr_interface.c - src/instr/instr_msg_process.c - src/instr/instr_msg_vm.c - src/instr/instr_msg_task.c src/instr/instr_paje_containers.c src/instr/instr_paje_trace.c src/instr/instr_paje_header.c @@@ -320,9 -330,6 +331,6 @@@ src/instr/instr_paje_values.c src/instr/instr_private.h src/instr/instr_resource_utilization.c - src/instr/instr_routing.c - src/instr/instr_smpi.c - src/instr/instr_surf.c ) set(JEDULE_SRC @@@ -454,15 -461,39 +462,39 @@@ endif( set(simgrid_sources ${BINDINGS_SRC} ${GTNETS_USED} - ${JEDULE_SRC} ${MSG_SRC} ${SIMDAG_SRC} + ${SIMGRID_SRC} ${SIMIX_SRC} ${SURF_SRC} ${TRACING_SRC} ${XBT_SRC} ) + if(${HAVE_JEDULE}) + set(simgrid_sources + ${simgrid_sources} + ${JEDULE_SRC} + ) + else() + set(EXTRA_DIST + ${EXTRA_DIST} + ${JEDULE_SRC} + ) + endif() + + if(${HAVE_TRACING}) + set(simgrid_sources + ${simgrid_sources} + ${TRACING_SRC} + ) + else() + set(EXTRA_DIST + ${EXTRA_DIST} + ${TRACING_SRC} + ) + endif() + if(HAVE_MC) set(simgrid_sources ${simgrid_sources} @@@ -505,13 -536,41 +537,41 @@@ set(DOC_SOURCE doc/simix.fig doc/surf_nutshell.fig doc/Doxyfile.in - doc/FAQ.doc - doc/index.doc - doc/simgrid.css - doc/SimgridDoxygenLayout.xml + doc/Layout.xml doc/triva-graph_configuration.png doc/triva-graph_visualization.png doc/triva-time_interval.png + + doc/doxygen/footer.html + doc/doxygen/header.html + doc/doxygen/stylesheet.css + + doc/doxygen/index.doc + doc/doxygen/getting_started.doc + doc/doxygen/introduction.doc + doc/doxygen/use.doc + doc/doxygen/bindings.doc + doc/doxygen/deployment.doc + doc/doxygen/install.doc + doc/doxygen/options.doc + doc/doxygen/platform.doc + doc/doxygen/pls.doc + doc/doxygen/tracing.doc + doc/doxygen/FAQ.doc + doc/doxygen/advanced.doc + doc/doxygen/inside_autotests.doc + doc/doxygen/inside_cmake.doc + doc/doxygen/inside_extending.doc + doc/doxygen/inside_release.doc + doc/doxygen/contributing.doc + doc/doxygen/modules.doc + doc/doxygen/module-msg.doc + doc/doxygen/module-sd.doc + doc/doxygen/module-simix.doc + doc/doxygen/module-surf.doc + doc/doxygen/module-trace.doc + doc/doxygen/module-xbt.doc + ) set(DOC_FIGS @@@ -519,123 -578,42 +579,42 @@@ ${CMAKE_HOME_DIRECTORY}/doc/shared/fig/simgrid_modules2.fig ) - set(DOC_SHARED_TAG - doc/shared/doxygen/simgriddevguide.tag - doc/shared/doxygen/simgridrefguide.tag - doc/shared/doxygen/simgriduserguide.tag - ) - set(DOC_TOOLS tools/doxygen/fig2dev_postprocessor.pl tools/doxygen/index_create.pl tools/doxygen/xbt_log_extract_hierarchy.pl ) - - set(USER_GUIDE_SOURCES - doc/user_guide/doxygen/footer.html - doc/user_guide/doxygen/header.html - doc/user_guide/doxygen/UserGuideDoxyfile.in - doc/user_guide/doxygen/UserGuideDoxygenLayout.xml - doc/user_guide/doxygen/bindings.doc - doc/user_guide/doxygen/deployment.doc - doc/user_guide/doxygen/examples.doc - doc/user_guide/doxygen/index.doc - doc/user_guide/doxygen/install.doc - doc/user_guide/doxygen/options.doc - doc/user_guide/doxygen/platform.doc - doc/user_guide/doxygen/pls.doc - doc/user_guide/doxygen/tracing.doc - doc/user_guide/doxygen/use.doc - doc/user_guide/doxygen/stylesheet.css - ) - - set(REF_GUIDE_SOURCES - doc/ref_guide/doxygen/footer.html - doc/ref_guide/doxygen/header.html - doc/ref_guide/doxygen/main.doc - doc/ref_guide/doxygen/module-msg.doc - doc/ref_guide/doxygen/module-sd.doc - doc/ref_guide/doxygen/module-simix.doc - doc/ref_guide/doxygen/module-surf.doc - doc/ref_guide/doxygen/module-trace.doc - doc/ref_guide/doxygen/module-xbt.doc - doc/ref_guide/doxygen/modules.doc - doc/ref_guide/doxygen/RefGuideDoxyfile.in - doc/ref_guide/doxygen/RefGuideDoxygenLayout.xml - doc/ref_guide/doxygen/stylesheet.css - ) - - set(DEV_GUIDE_SOURCES - doc/dev_guide/doxygen/footer.html - doc/dev_guide/doxygen/header.html - doc/dev_guide/doxygen/index.doc - doc/dev_guide/doxygen/cmake.doc - doc/dev_guide/doxygen/simgrid.doc - doc/dev_guide/doxygen/xps.doc - doc/dev_guide/doxygen/DevGuideDoxyfile.in - doc/dev_guide/doxygen/DevGuideDoxygenLayout.xml - doc/dev_guide/doxygen/stylesheet.css - ) - + # these files get copied automatically to the html documentation set(DOC_IMG - ${CMAKE_HOME_DIRECTORY}/doc/webcruft/awstats_logo3.png - ${CMAKE_HOME_DIRECTORY}/doc/webcruft/Paje_MSG_screenshot.jpg - ${CMAKE_HOME_DIRECTORY}/doc/webcruft/Paje_MSG_screenshot_thn.jpg - ${CMAKE_HOME_DIRECTORY}/doc/webcruft/poster_thumbnail.png - ${CMAKE_HOME_DIRECTORY}/doc/webcruft/README - ${CMAKE_HOME_DIRECTORY}/doc/webcruft/SGicon.gif - ${CMAKE_HOME_DIRECTORY}/doc/webcruft/SGicon.icns - ${CMAKE_HOME_DIRECTORY}/doc/webcruft/SGicon.ico - ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid-101_001.png - ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid-101_002.png - ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid-101_003.png - ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid-101_004.png - ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid-101_005.png - ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid-101_006.png - ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid-101_007.png - ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid-101_008.png - ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid-101_009.png - ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid-101_010.png - ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid-101_011.png - ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid-101_012.png - ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid-101_013.png - ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid-101_014.png - ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid-101_015.png - ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid-101_016.png - ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid-101_017.png - ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid-101_018.png - ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid-101_019.png - ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid-101_020.png - ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid-101_021.png - ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid-101_022.png - ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid-101_023.png - ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid-101_024.png - ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid-101_025.png - ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid-101_026.png - ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid-101_027.png - ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid-101_028.png - ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid-101_029.png - ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid-101_030.png - ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid-101.pdf - ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid_logo_2011.gif - ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid_logo_2011.png - ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid_logo_2011_small.png - ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid_logo_win_2011.bmp - ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid_logo_win.bmp - ${CMAKE_HOME_DIRECTORY}/doc/webcruft/win_install_01.png - ${CMAKE_HOME_DIRECTORY}/doc/webcruft/win_install_02.png - ${CMAKE_HOME_DIRECTORY}/doc/webcruft/win_install_03.png - ${CMAKE_HOME_DIRECTORY}/doc/webcruft/win_install_04.png - ${CMAKE_HOME_DIRECTORY}/doc/webcruft/win_install_05.png - ${CMAKE_HOME_DIRECTORY}/doc/webcruft/win_install_06.png - ) + ${CMAKE_HOME_DIRECTORY}/doc/simgrid.css + ${CMAKE_HOME_DIRECTORY}/doc/webcruft/Paje_MSG_screenshot.jpg + ${CMAKE_HOME_DIRECTORY}/doc/webcruft/Paje_MSG_screenshot_thn.jpg + ${CMAKE_HOME_DIRECTORY}/doc/webcruft/SGicon.gif + ${CMAKE_HOME_DIRECTORY}/doc/webcruft/SGicon.icns + ${CMAKE_HOME_DIRECTORY}/doc/webcruft/SGicon.ico + ${CMAKE_HOME_DIRECTORY}/doc/webcruft/awstats_logo3.png + ${CMAKE_HOME_DIRECTORY}/doc/webcruft/output.goal.pdf + ${CMAKE_HOME_DIRECTORY}/doc/webcruft/poster_thumbnail.png + ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid_logo_2011.gif + ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid_logo_2011.png + ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid_logo_2011_small.png + ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid_logo_win.bmp + ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid_logo_win_2011.bmp + ${CMAKE_HOME_DIRECTORY}/doc/webcruft/win_install_01.png + ${CMAKE_HOME_DIRECTORY}/doc/webcruft/win_install_02.png + ${CMAKE_HOME_DIRECTORY}/doc/webcruft/win_install_03.png + ${CMAKE_HOME_DIRECTORY}/doc/webcruft/win_install_04.png + ${CMAKE_HOME_DIRECTORY}/doc/webcruft/win_install_05.png + ${CMAKE_HOME_DIRECTORY}/doc/webcruft/win_install_06.png + ) set(bin_files ${bin_files} src/smpi/smpicc.in src/smpi/smpif2c.in src/smpi/smpiff.in + src/smpi/smpif90.in src/smpi/smpirun.in ) @@@ -643,6 -621,7 +622,7 @@@ set(txt_file ${txt_files} AUTHORS COPYING + README ChangeLog INSTALL LICENSE-LGPL-2.1 @@@ -672,6 -651,7 +652,7 @@@ set(EXAMPLES_CMAKEFILES_TX examples/msg/priority/CMakeLists.txt examples/msg/properties/CMakeLists.txt examples/msg/sendrecv/CMakeLists.txt + examples/msg/chainsend/CMakeLists.txt examples/msg/start_kill_time/CMakeLists.txt examples/msg/suspend/CMakeLists.txt examples/msg/token_ring/CMakeLists.txt @@@ -729,9 -709,6 +710,6 @@@ set(CMAKE_SOURCE_FILE buildtools/Cmake/Flags.cmake buildtools/Cmake/GenerateDoc.cmake buildtools/Cmake/GenerateDocWin.cmake - buildtools/Cmake/GenerateRefGuide.cmake - buildtools/Cmake/GenerateUserGuide.cmake - buildtools/Cmake/GenerateDevGuide.cmake buildtools/Cmake/MaintainerMode.cmake buildtools/Cmake/MakeExe.cmake buildtools/Cmake/MakeLib.cmake @@@ -779,6 -756,7 +757,7 @@@ buildtools/Cmake/test_prog/prog_thread_storage.c buildtools/Cmake/test_prog/prog_va_copy.c buildtools/Cmake/test_prog/prog_vsnprintf.c + buildtools/Cmake/test_prog/prog_gnu_dynlinker.c ) set(PLATFORMS_EXAMPLES diff --combined include/msg/msg.h index faa4e01d29,5d993b0f40..afac0e94f5 --- a/include/msg/msg.h +++ b/include/msg/msg.h @@@ -32,7 -32,7 +32,7 @@@ typedef enum /** @} */ /************************** Global ******************************************/ - XBT_PUBLIC(void) MSG_config(const char *name, ...); + XBT_PUBLIC(void) MSG_config(const char *key, const char *value); /** \ingroup msg_simulation * \brief Initialize the MSG internal data. * \hideinitializer @@@ -324,6 -324,8 +324,6 @@@ XBT_PUBLIC(msg_error_t) MSG_set_channel XBT_PUBLIC(int) MSG_get_channel_number(void); #endif -#include "instr/instr.h" - /** @brief Opaque type describing a Virtual Machine. * @ingroup msg_VMs * @@@ -332,8 -334,9 +332,8 @@@ * Usual lack of guaranty of any kind applies here, and is even increased. * */ -typedef struct msg_vm *msg_vm_t; /* This function should not be called directly, but rather from MSG_vm_start_from_template that does not exist yet*/ -XBT_PUBLIC(msg_vm_t) MSG_vm_start(msg_host_t location, int coreAmount); +XBT_PUBLIC(msg_vm_t) MSG_vm_start(msg_host_t location, const char *name, int coreAmount); XBT_PUBLIC(int) MSG_vm_is_suspended(msg_vm_t); XBT_PUBLIC(int) MSG_vm_is_running(msg_vm_t); @@@ -376,8 -379,6 +376,8 @@@ xbt_dynar_t MSG_vm_get_list_f xbt_dynar_t MSG_vm_get_list_from_hosts(msg_dynar_t) + des fonctions de filtrage sur les dynar */ +#include "instr/instr.h" + /* ****************************************************************************************** */ diff --combined src/instr/instr_config.c index 268c643e38,3797373038..3737cf7e7b --- a/src/instr/instr_config.c +++ b/src/instr/instr_config.c @@@ -4,8 -4,9 +4,9 @@@ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ - #include "instr/instr_private.h" + #include "simgrid/sg_config.h" + #include "surf/surf.h" #ifdef HAVE_TRACING @@@ -21,7 -22,6 +22,7 @@@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY (instr_ #define OPT_TRACING_CATEGORIZED "tracing/categorized" #define OPT_TRACING_UNCATEGORIZED "tracing/uncategorized" #define OPT_TRACING_MSG_PROCESS "tracing/msg/process" +#define OPT_TRACING_MSG_VM "tracing/msg/vm" #define OPT_TRACING_FILENAME "tracing/filename" #define OPT_TRACING_BUFFER "tracing/buffer" #define OPT_TRACING_ONELINK_ONLY "tracing/onelink_only" @@@ -41,7 -41,6 +42,7 @@@ static int trace_smpi_computing static int trace_categorized; static int trace_uncategorized; static int trace_msg_process_enabled; +static int trace_msg_vm_enabled; static int trace_buffer; static int trace_onelink_only; static int trace_disable_destroy; @@@ -50,22 -49,31 +51,32 @@@ static int trace_basic static int trace_configured = 0; static int trace_active = 0; + + static void TRACE_getopts(void) { - trace_enabled = xbt_cfg_get_int(_surf_cfg_set, OPT_TRACING); - trace_platform = xbt_cfg_get_int(_surf_cfg_set, OPT_TRACING_PLATFORM); - trace_platform_topology = xbt_cfg_get_int(_surf_cfg_set, OPT_TRACING_TOPOLOGY); - trace_smpi_enabled = xbt_cfg_get_int(_surf_cfg_set, OPT_TRACING_SMPI); - trace_smpi_grouped = xbt_cfg_get_int(_surf_cfg_set, OPT_TRACING_SMPI_GROUP); - trace_smpi_computing = xbt_cfg_get_int(_surf_cfg_set, OPT_TRACING_SMPI_COMPUTING); - trace_categorized = xbt_cfg_get_int(_surf_cfg_set, OPT_TRACING_CATEGORIZED); - trace_uncategorized = xbt_cfg_get_int(_surf_cfg_set, OPT_TRACING_UNCATEGORIZED); - trace_msg_process_enabled = xbt_cfg_get_int(_surf_cfg_set, OPT_TRACING_MSG_PROCESS); - trace_msg_vm_enabled = xbt_cfg_get_int(_surf_cfg_set, OPT_TRACING_MSG_VM); - trace_buffer = xbt_cfg_get_int(_surf_cfg_set, OPT_TRACING_BUFFER); - trace_onelink_only = xbt_cfg_get_int(_surf_cfg_set, OPT_TRACING_ONELINK_ONLY); - trace_disable_destroy = xbt_cfg_get_int(_surf_cfg_set, OPT_TRACING_DISABLE_DESTROY); - trace_basic = xbt_cfg_get_int(_surf_cfg_set, OPT_TRACING_BASIC); + trace_enabled = xbt_cfg_get_int(_sg_cfg_set, OPT_TRACING); + trace_platform = xbt_cfg_get_int(_sg_cfg_set, OPT_TRACING_PLATFORM); + trace_platform_topology = xbt_cfg_get_int(_sg_cfg_set, OPT_TRACING_TOPOLOGY); + trace_smpi_enabled = xbt_cfg_get_int(_sg_cfg_set, OPT_TRACING_SMPI); + trace_smpi_grouped = xbt_cfg_get_int(_sg_cfg_set, OPT_TRACING_SMPI_GROUP); + trace_smpi_computing = xbt_cfg_get_int(_sg_cfg_set, OPT_TRACING_SMPI_COMPUTING); + trace_categorized = xbt_cfg_get_int(_sg_cfg_set, OPT_TRACING_CATEGORIZED); + trace_uncategorized = xbt_cfg_get_int(_sg_cfg_set, OPT_TRACING_UNCATEGORIZED); + trace_msg_process_enabled = xbt_cfg_get_int(_sg_cfg_set, OPT_TRACING_MSG_PROCESS); ++ trace_msg_vm_enabled = xbt_cfg_get_int(_sg_cfg_set, OPT_TRACING_MSG_VM); + trace_buffer = xbt_cfg_get_int(_sg_cfg_set, OPT_TRACING_BUFFER); + trace_onelink_only = xbt_cfg_get_int(_sg_cfg_set, OPT_TRACING_ONELINK_ONLY); + trace_disable_destroy = xbt_cfg_get_int(_sg_cfg_set, OPT_TRACING_DISABLE_DESTROY); + trace_basic = xbt_cfg_get_int(_sg_cfg_set, OPT_TRACING_BASIC); + } + + xbt_dynar_t TRACE_start_functions = NULL; + void TRACE_add_start_function(void (*func) ()) + { + if (TRACE_start_functions == NULL) + TRACE_start_functions = xbt_dynar_new(sizeof(void (*)()), NULL); + xbt_dynar_push(TRACE_start_functions, &func); } int TRACE_start() @@@ -75,73 -83,94 +86,97 @@@ // tracing system must be: // - enabled (with --cfg=tracing:1) // - already configured (TRACE_global_init already called) - if (!(TRACE_is_enabled() && TRACE_is_configured())){ - return 0; + if (TRACE_is_enabled() && TRACE_is_configured()) { + XBT_DEBUG("Tracing starts"); + + /* open the trace file */ + TRACE_paje_start(); + + /* activate trace */ + if (trace_active == 1) { + THROWF(tracing_error, 0, "Tracing is already active"); + } + trace_active = 1; + XBT_DEBUG("Tracing is on"); + + /* other trace initialization */ + created_categories = xbt_dict_new_homogeneous(xbt_free); + declared_marks = xbt_dict_new_homogeneous(xbt_free); + user_host_variables = xbt_dict_new_homogeneous(xbt_free); ++ user_vm_variables = xbt_dict_new_homogeneous (xbt_free); + user_link_variables = xbt_dict_new_homogeneous(xbt_free); + + if (TRACE_start_functions != NULL) { + void (*func) (); + unsigned int iter = xbt_dynar_length(TRACE_start_functions); + xbt_dynar_foreach(TRACE_start_functions, iter, func) { + func(); + } + } } - - XBT_DEBUG("Tracing starts"); - - /* open the trace file */ - TRACE_paje_start(); - - /* activate trace */ - if (trace_active == 1){ - THROWF (tracing_error, 0, "Tracing is already active"); - } - trace_active = 1; - XBT_DEBUG ("Tracing is on"); - - /* other trace initialization */ - created_categories = xbt_dict_new_homogeneous(xbt_free); - declared_marks = xbt_dict_new_homogeneous (xbt_free); - user_host_variables = xbt_dict_new_homogeneous (xbt_free); - user_vm_variables = xbt_dict_new_homogeneous (xbt_free); - user_link_variables = xbt_dict_new_homogeneous (xbt_free); - TRACE_surf_alloc(); - TRACE_smpi_alloc(); + xbt_dynar_free(&TRACE_start_functions); return 0; } + xbt_dynar_t TRACE_end_functions = NULL; + void TRACE_add_end_function(void (*func) (void)) + { + if (TRACE_end_functions == NULL) + TRACE_end_functions = xbt_dynar_new(sizeof(void (*)(void)), NULL); + xbt_dynar_push(TRACE_end_functions, &func); + } + int TRACE_end() { - if (!trace_active) - return 1; - - TRACE_generate_viva_uncat_conf(); - TRACE_generate_viva_cat_conf(); - - /* dump trace buffer */ - TRACE_last_timestamp_to_dump = surf_get_clock(); - TRACE_paje_dump_buffer(1); - - /* destroy all data structures of tracing (and free) */ - PJ_container_free_all(); - PJ_type_free_all(); - PJ_container_release(); - PJ_type_release(); - TRACE_smpi_release(); - TRACE_surf_release(); - xbt_dict_free(&user_link_variables); - xbt_dict_free(&user_host_variables); - xbt_dict_free(&user_vm_variables); - - xbt_dict_free(&declared_marks); - xbt_dict_free(&created_categories); - - /* close the trace file */ - TRACE_paje_end(); - - /* de-activate trace */ - trace_active = 0; - XBT_DEBUG ("Tracing is off"); - XBT_DEBUG("Tracing system is shutdown"); - return 0; + int retval; + if (!trace_active) { + retval = 1; + } else { + retval = 0; + + TRACE_generate_viva_uncat_conf(); + TRACE_generate_viva_cat_conf(); + + /* dump trace buffer */ + TRACE_last_timestamp_to_dump = surf_get_clock(); + TRACE_paje_dump_buffer(1); + + /* destroy all data structures of tracing (and free) */ + PJ_container_free_all(); + PJ_type_free_all(); + PJ_container_release(); + PJ_type_release(); + + if (TRACE_end_functions != NULL) { + void (*func) (void); + unsigned int iter; + xbt_dynar_foreach(TRACE_end_functions, iter, func) { + func(); + } + } + + xbt_dict_free(&user_link_variables); + xbt_dict_free(&user_host_variables); ++ xbt_dict_free(&user_vm_variables); + xbt_dict_free(&declared_marks); + xbt_dict_free(&created_categories); + + /* close the trace file */ + TRACE_paje_end(); + + /* de-activate trace */ + trace_active = 0; + XBT_DEBUG("Tracing is off"); + XBT_DEBUG("Tracing system is shutdown"); + } + xbt_dynar_free(&TRACE_end_functions); + return retval; } int TRACE_needs_platform (void) { return TRACE_msg_process_is_enabled() || + TRACE_msg_vm_is_enabled() || TRACE_categorized() || TRACE_uncategorized() || TRACE_platform () || @@@ -200,12 -229,6 +235,12 @@@ int TRACE_msg_process_is_enabled(void return trace_msg_process_enabled && TRACE_is_enabled(); } +int TRACE_msg_vm_is_enabled(void) +{ + return trace_msg_vm_enabled && TRACE_is_enabled(); +} + + int TRACE_buffer (void) { return trace_buffer && TRACE_is_enabled(); @@@ -228,160 -251,153 +263,160 @@@ int TRACE_basic (void char *TRACE_get_comment (void) { - return xbt_cfg_get_string(_surf_cfg_set, OPT_TRACING_COMMENT); + return xbt_cfg_get_string(_sg_cfg_set, OPT_TRACING_COMMENT); } char *TRACE_get_comment_file (void) { - return xbt_cfg_get_string(_surf_cfg_set, OPT_TRACING_COMMENT_FILE); + return xbt_cfg_get_string(_sg_cfg_set, OPT_TRACING_COMMENT_FILE); } char *TRACE_get_filename(void) { - return xbt_cfg_get_string(_surf_cfg_set, OPT_TRACING_FILENAME); + return xbt_cfg_get_string(_sg_cfg_set, OPT_TRACING_FILENAME); } char *TRACE_get_viva_uncat_conf (void) { - return xbt_cfg_get_string(_surf_cfg_set, OPT_VIVA_UNCAT_CONF); + return xbt_cfg_get_string(_sg_cfg_set, OPT_VIVA_UNCAT_CONF); } char *TRACE_get_viva_cat_conf (void) { - return xbt_cfg_get_string(_surf_cfg_set, OPT_VIVA_CAT_CONF); + return xbt_cfg_get_string(_sg_cfg_set, OPT_VIVA_CAT_CONF); } void TRACE_global_init(int *argc, char **argv) { /* name of the tracefile */ char *default_tracing_filename = xbt_strdup("simgrid.trace"); - xbt_cfg_register(&_surf_cfg_set, OPT_TRACING_FILENAME, + xbt_cfg_register(&_sg_cfg_set, OPT_TRACING_FILENAME, "Trace file created by the instrumented SimGrid.", xbt_cfgelm_string, &default_tracing_filename, 1, 1, NULL, NULL); /* tracing */ int default_tracing = 0; - xbt_cfg_register(&_surf_cfg_set, OPT_TRACING, + xbt_cfg_register(&_sg_cfg_set, OPT_TRACING, "Enable Tracing.", xbt_cfgelm_int, &default_tracing, 0, 1, NULL, NULL); /* register platform in the trace */ int default_tracing_platform = 0; - xbt_cfg_register(&_surf_cfg_set, OPT_TRACING_PLATFORM, + xbt_cfg_register(&_sg_cfg_set, OPT_TRACING_PLATFORM, "Register the platform in the trace as a hierarchy.", xbt_cfgelm_int, &default_tracing_platform, 0, 1, NULL, NULL); /* register platform in the trace */ int default_tracing_platform_topology = 1; - xbt_cfg_register(&_surf_cfg_set, OPT_TRACING_TOPOLOGY, + xbt_cfg_register(&_sg_cfg_set, OPT_TRACING_TOPOLOGY, "Register the platform topology in the trace as a graph.", xbt_cfgelm_int, &default_tracing_platform_topology, 0, 1, NULL, NULL); /* smpi */ int default_tracing_smpi = 0; - xbt_cfg_register(&_surf_cfg_set, OPT_TRACING_SMPI, + xbt_cfg_register(&_sg_cfg_set, OPT_TRACING_SMPI, "Tracing of the SMPI interface.", xbt_cfgelm_int, &default_tracing_smpi, 0, 1, NULL, NULL); /* smpi grouped */ int default_tracing_smpi_grouped = 0; - xbt_cfg_register(&_surf_cfg_set, OPT_TRACING_SMPI_GROUP, + xbt_cfg_register(&_sg_cfg_set, OPT_TRACING_SMPI_GROUP, "Group MPI processes by host.", xbt_cfgelm_int, &default_tracing_smpi_grouped, 0, 1, NULL, NULL); /* smpi computing */ int default_tracing_smpi_computing = 0; - xbt_cfg_register(&_surf_cfg_set, OPT_TRACING_SMPI_COMPUTING, + xbt_cfg_register(&_sg_cfg_set, OPT_TRACING_SMPI_COMPUTING, "Generate states for timing out of SMPI parts of the application", xbt_cfgelm_int, &default_tracing_smpi_computing, 0, 1, NULL, NULL); /* tracing categorized resource utilization traces */ int default_tracing_categorized = 0; - xbt_cfg_register(&_surf_cfg_set, OPT_TRACING_CATEGORIZED, + xbt_cfg_register(&_sg_cfg_set, OPT_TRACING_CATEGORIZED, "Tracing categorized resource utilization of hosts and links.", xbt_cfgelm_int, &default_tracing_categorized, 0, 1, NULL, NULL); /* tracing uncategorized resource utilization */ int default_tracing_uncategorized = 0; - xbt_cfg_register(&_surf_cfg_set, OPT_TRACING_UNCATEGORIZED, + xbt_cfg_register(&_sg_cfg_set, OPT_TRACING_UNCATEGORIZED, "Tracing uncategorized resource utilization of hosts and links.", xbt_cfgelm_int, &default_tracing_uncategorized, 0, 1, NULL, NULL); /* msg process */ int default_tracing_msg_process = 0; - xbt_cfg_register(&_surf_cfg_set, OPT_TRACING_MSG_PROCESS, + xbt_cfg_register(&_sg_cfg_set, OPT_TRACING_MSG_PROCESS, "Tracing of MSG process behavior.", xbt_cfgelm_int, &default_tracing_msg_process, 0, 1, NULL, NULL); + /* msg process */ + int default_tracing_msg_vm = 0; - xbt_cfg_register(&_surf_cfg_set, OPT_TRACING_MSG_VM, ++ xbt_cfg_register(&_sg_cfg_set, OPT_TRACING_MSG_VM, + "Tracing of MSG process behavior.", + xbt_cfgelm_int, &default_tracing_msg_vm, 0, 1, + NULL, NULL); + /* tracing buffer */ int default_buffer = 1; - xbt_cfg_register(&_surf_cfg_set, OPT_TRACING_BUFFER, + xbt_cfg_register(&_sg_cfg_set, OPT_TRACING_BUFFER, "Buffer trace events to put them in temporal order.", xbt_cfgelm_int, &default_buffer, 0, 1, NULL, NULL); /* tracing one link only */ int default_onelink_only = 0; - xbt_cfg_register(&_surf_cfg_set, OPT_TRACING_ONELINK_ONLY, + xbt_cfg_register(&_sg_cfg_set, OPT_TRACING_ONELINK_ONLY, "Use only routes with one link to trace platform.", xbt_cfgelm_int, &default_onelink_only, 0, 1, NULL, NULL); /* disable destroy */ int default_disable_destroy = 0; - xbt_cfg_register(&_surf_cfg_set, OPT_TRACING_DISABLE_DESTROY, + xbt_cfg_register(&_sg_cfg_set, OPT_TRACING_DISABLE_DESTROY, "Disable platform containers destruction.", xbt_cfgelm_int, &default_disable_destroy, 0, 1, NULL, NULL); /* basic -- Avoid extended events (impoverished trace file) */ int default_basic = 0; - xbt_cfg_register(&_surf_cfg_set, OPT_TRACING_BASIC, + xbt_cfg_register(&_sg_cfg_set, OPT_TRACING_BASIC, "Avoid extended events (impoverished trace file).", xbt_cfgelm_int, &default_basic, 0, 1, NULL, NULL); /* comment */ char *default_tracing_comment = xbt_strdup (""); - xbt_cfg_register(&_surf_cfg_set, OPT_TRACING_COMMENT, + xbt_cfg_register(&_sg_cfg_set, OPT_TRACING_COMMENT, "Comment to be added on the top of the trace file.", xbt_cfgelm_string, &default_tracing_comment, 1, 1, NULL, NULL); /* comment_file */ char *default_tracing_comment_file = xbt_strdup (""); - xbt_cfg_register(&_surf_cfg_set, OPT_TRACING_COMMENT_FILE, + xbt_cfg_register(&_sg_cfg_set, OPT_TRACING_COMMENT_FILE, "The contents of the file are added to the top of the trace file as comment.", xbt_cfgelm_string, &default_tracing_comment_file, 1, 1, NULL, NULL); /* Viva graph configuration for uncategorized tracing */ char *default_viva_uncat_conf_file = xbt_strdup (""); - xbt_cfg_register(&_surf_cfg_set, OPT_VIVA_UNCAT_CONF, + xbt_cfg_register(&_sg_cfg_set, OPT_VIVA_UNCAT_CONF, "Viva Graph configuration file for uncategorized resource utilization traces.", xbt_cfgelm_string, &default_viva_uncat_conf_file, 1, 1, NULL, NULL); /* Viva graph configuration for uncategorized tracing */ char *default_viva_cat_conf_file = xbt_strdup (""); - xbt_cfg_register(&_surf_cfg_set, OPT_VIVA_CAT_CONF, + xbt_cfg_register(&_sg_cfg_set, OPT_VIVA_CAT_CONF, "Viva Graph configuration file for categorized resource utilization traces.", xbt_cfgelm_string, &default_viva_cat_conf_file, 1, 1, NULL, NULL); diff --combined src/instr/instr_paje_containers.c index 18129e8a31,64590e9e99..68464748a6 --- a/src/instr/instr_paje_containers.c +++ b/src/instr/instr_paje_containers.c @@@ -5,6 -5,9 +5,9 @@@ * under the terms of the license (GNU LGPL) which comes with this package. */ #include "instr/instr_private.h" + #include "xbt/lib.h" + #include "surf/surf.h" + #include "surf/surf_routing.h" #ifdef HAVE_TRACING @@@ -104,7 -107,6 +107,7 @@@ container_t PJ_container_new (const cha case INSTR_ROUTER: snprintf (typename, INSTR_DEFAULT_STR_SIZE, "ROUTER"); break; case INSTR_SMPI: snprintf (typename, INSTR_DEFAULT_STR_SIZE, "MPI"); break; case INSTR_MSG_PROCESS: snprintf (typename, INSTR_DEFAULT_STR_SIZE, "MSG_PROCESS"); break; + case INSTR_MSG_VM: snprintf (typename, INSTR_DEFAULT_STR_SIZE, "MSG_VM"); break; case INSTR_MSG_TASK: snprintf (typename, INSTR_DEFAULT_STR_SIZE, "MSG_TASK"); break; default: THROWF (tracing_error, 0, "new container kind is unknown."); break; } diff --combined src/instr/instr_private.h index 82488cb9bb,972997897b..ea02f0a09c --- a/src/instr/instr_private.h +++ b/src/instr/instr_private.h @@@ -7,6 -7,8 +7,8 @@@ #ifndef INSTR_PRIVATE_H_ #define INSTR_PRIVATE_H_ + #include "instr/instr.h" + #include "instr/instr_interface.h" #include "simgrid_config.h" #ifdef HAVE_TRACING @@@ -18,11 -20,9 +20,9 @@@ #define INSTR_DEFAULT_STR_SIZE 500 - #include "instr/instr.h" - #include "msg/msg.h" - #include "simdag/private.h" - #include "simix/smx_private.h" - #include "xbt/graph_private.h" + #include "xbt/graph.h" + #include "xbt/dict.h" + #include "simgrid/platf.h" typedef enum { PAJE_DefineContainerType, @@@ -78,7 -78,6 +78,7 @@@ typedef enum INSTR_ROUTER, INSTR_AS, INSTR_SMPI, + INSTR_MSG_VM, INSTR_MSG_PROCESS, INSTR_MSG_TASK } e_container_types; @@@ -98,7 -97,6 +98,7 @@@ typedef struct s_container extern xbt_dict_t created_categories; extern xbt_dict_t declared_marks; extern xbt_dict_t user_host_variables; +extern xbt_dict_t user_vm_variables; extern xbt_dict_t user_link_variables; extern double TRACE_last_timestamp_to_dump; @@@ -128,75 -126,10 +128,10 @@@ void new_pajeStartLink (double timestam void new_pajeEndLink (double timestamp, container_t container, type_t type, container_t destContainer, const char *value, const char *key); void new_pajeNewEvent (double timestamp, container_t container, type_t type, val_t value); - /* declaration of instrumentation functions from msg_task_instr.c */ - void TRACE_msg_set_task_category(msg_task_t task, const char *category); - void TRACE_msg_task_create(msg_task_t task); - void TRACE_msg_task_execute_start(msg_task_t task); - void TRACE_msg_task_execute_end(msg_task_t task); - void TRACE_msg_task_destroy(msg_task_t task); - void TRACE_msg_task_get_start(void); - void TRACE_msg_task_get_end(double start_time, msg_task_t task); - int TRACE_msg_task_put_start(msg_task_t task); //returns TRUE if the task_put_end must be called - void TRACE_msg_task_put_end(void); - - /* declaration of instrumentation functions from msg_process_instr.c */ - char *instr_process_id (msg_process_t proc, char *str, int len); - char *instr_process_id_2 (const char *process_name, int process_pid, char *str, int len); - void TRACE_msg_process_change_host(msg_process_t process, msg_host_t old_host, - msg_host_t new_host); - void TRACE_msg_process_create (const char *process_name, int process_pid, msg_host_t host); - void TRACE_msg_process_destroy (const char *process_name, int process_pid, msg_host_t host); - void TRACE_msg_process_kill(msg_process_t process); - void TRACE_msg_process_suspend(msg_process_t process); - void TRACE_msg_process_resume(msg_process_t process); - void TRACE_msg_process_sleep_in(msg_process_t process); //called from msg/gos.c - void TRACE_msg_process_sleep_out(msg_process_t process); - void TRACE_msg_process_end(msg_process_t process); - - /* declaration of instrumentation functions from instr_msg_vm.c */ - char *instr_vm_id (msg_vm_t vm, char *str, int len); - char *instr_vm_id_2 (const char *vm_name, char *str, int len); - void TRACE_msg_vm_change_host(msg_vm_t vm, msg_host_t old_host, - msg_host_t new_host); - void TRACE_msg_vm_create (const char *vm_name, msg_host_t host); - void TRACE_msg_vm_kill(msg_vm_t process); - void TRACE_msg_vm_suspend(msg_vm_t vm); - void TRACE_msg_vm_resume(msg_vm_t vm); - void TRACE_msg_vm_sleep_in(msg_vm_t vm); - void TRACE_msg_vm_sleep_out(msg_vm_t vm); - void TRACE_msg_vm_end(msg_vm_t vm); - - /* from surf_instr.c */ - void TRACE_surf_alloc(void); - void TRACE_surf_release(void); - void TRACE_surf_host_set_power(double date, const char *resource, double power); - void TRACE_surf_link_set_bandwidth(double date, const char *resource, double bandwidth); - void TRACE_surf_link_set_latency(double date, const char *resource, double latency); - void TRACE_surf_action(surf_action_t surf_action, const char *category); - //for tracing gtnets void TRACE_surf_gtnets_communicate(void *action, void *src, void *dst); - /* from smpi_instr.c */ - void TRACE_internal_smpi_set_category (const char *category); - const char *TRACE_internal_smpi_get_category (void); - void TRACE_smpi_alloc(void); - void TRACE_smpi_release(void); - void TRACE_smpi_init(int rank); - void TRACE_smpi_finalize(int rank); - void TRACE_smpi_collective_in(int rank, int root, const char *operation); - void TRACE_smpi_collective_out(int rank, int root, const char *operation); - void TRACE_smpi_computing_init(int rank); - void TRACE_smpi_computing_out(int rank); - void TRACE_smpi_computing_in(int rank); - void TRACE_smpi_ptp_in(int rank, int src, int dst, const char *operation); - void TRACE_smpi_ptp_out(int rank, int src, int dst, const char *operation); - void TRACE_smpi_send(int rank, int src, int dst); - void TRACE_smpi_recv(int rank, int src, int dst); - /* from instr_config.c */ - int TRACE_start (void); - int TRACE_end (void); int TRACE_needs_platform (void); int TRACE_is_enabled(void); int TRACE_platform(void); @@@ -208,7 -141,6 +143,7 @@@ int TRACE_smpi_is_computing(void) int TRACE_categorized (void); int TRACE_uncategorized (void); int TRACE_msg_process_is_enabled(void); +int TRACE_msg_vm_is_enabled(void); int TRACE_buffer (void); int TRACE_onelink_only (void); int TRACE_disable_destroy (void); @@@ -218,8 -150,6 +153,6 @@@ char *TRACE_get_comment_file (void) char *TRACE_get_filename(void); char *TRACE_get_viva_uncat_conf (void); char *TRACE_get_viva_cat_conf (void); - void TRACE_global_init(int *argc, char **argv); - void TRACE_help(int detailed); void TRACE_generate_viva_uncat_conf (void); void TRACE_generate_viva_cat_conf (void); void instr_pause_tracing (void); @@@ -237,7 -167,6 +170,6 @@@ void TRACE_surf_link_set_utilization(co double now, double delta); void TRACE_surf_resource_utilization_alloc(void); - void TRACE_surf_resource_utilization_release(void); /* instr_paje.c */ extern xbt_dict_t trivaNodeTypes; @@@ -274,16 -203,6 +206,6 @@@ val_t PJ_value_get_or_new (const char * val_t PJ_value_get (const char *name, const type_t father); void PJ_value_free (val_t value); - /* instr_routing.c */ - void instr_routing_define_callbacks (void); - void instr_new_variable_type (const char *new_typename, const char *color); - void instr_new_user_variable_type (const char *father_type, const char *new_typename, const char *color); - void instr_new_user_state_type (const char *father_type, const char *new_typename); - void instr_new_value_for_user_state_type (const char *typename, const char *value, const char *color); - int instr_platform_traced (void); - xbt_graph_t instr_routing_platform_graph (void); - void instr_routing_platform_graph_export_graphviz (xbt_graph_t g, const char *filename); - #endif /* HAVE_TRACING */ #ifdef HAVE_JEDULE diff --combined src/msg/instr_msg_vm.c index afbd5287bf,0000000000..73581c5e83 mode 100644,000000..100644 --- a/src/msg/instr_msg_vm.c +++ b/src/msg/instr_msg_vm.c @@@ -1,144 -1,0 +1,144 @@@ +/* Copyright (c) 2012. The SimGrid Team. + * All rights reserved. */ + +/* This program is free software; you can redistribute it and/or modify it + * under the terms of the license (GNU LGPL) which comes with this package. */ + - #include "instr/instr_private.h" ++#include "msg_private.h" + +#ifdef HAVE_TRACING + +XBT_LOG_NEW_DEFAULT_SUBCATEGORY (instr_msg_vm, instr, "MSG VM"); + + +char *instr_vm_id (msg_vm_t vm, char *str, int len) +{ + return instr_vm_id_2 (vm->name, str, len); +} + +char *instr_vm_id_2 (const char *vm_name, char *str, int len) +{ + snprintf (str, len, "%s", vm_name); + return str; +} + +/* + * Instrumentation functions to trace MSG VMs (msg_vm_t) + */ +void TRACE_msg_vm_change_host(msg_vm_t vm, msg_host_t old_host, msg_host_t new_host) +{ + if (TRACE_msg_vm_is_enabled()){ + static long long int counter = 0; + char key[INSTR_DEFAULT_STR_SIZE]; + snprintf (key, INSTR_DEFAULT_STR_SIZE, "%lld", counter++); + + int len = INSTR_DEFAULT_STR_SIZE; + char str[INSTR_DEFAULT_STR_SIZE]; + + //start link + container_t msg = PJ_container_get (instr_vm_id(vm, str, len)); + type_t type = PJ_type_get ("MSG_VM_LINK", PJ_type_get_root()); + new_pajeStartLink (MSG_get_clock(), PJ_container_get_root(), type, msg, "M", key); + + //destroy existing container of this vm + container_t existing_container = PJ_container_get(instr_vm_id(vm, str, len)); + PJ_container_remove_from_parent (existing_container); + PJ_container_free(existing_container); + + //create new container on the new_host location + msg = PJ_container_new(instr_vm_id(vm, str, len), INSTR_MSG_VM, PJ_container_get(SIMIX_host_get_name(new_host->smx_host))); + + //end link + msg = PJ_container_get(instr_vm_id(vm, str, len)); + type = PJ_type_get ("MSG_VM_LINK", PJ_type_get_root()); + new_pajeEndLink (MSG_get_clock(), PJ_container_get_root(), type, msg, "M", key); + } +} + +void TRACE_msg_vm_create (const char *vm_name, msg_host_t host) +{ + if (TRACE_msg_vm_is_enabled()){ + int len = INSTR_DEFAULT_STR_SIZE; + char str[INSTR_DEFAULT_STR_SIZE]; + + container_t host_container = PJ_container_get (SIMIX_host_get_name(host->smx_host)); + PJ_container_new(instr_vm_id_2(vm_name, str, len), INSTR_MSG_VM, host_container); + } +} + +void TRACE_msg_vm_kill(msg_vm_t vm) { + if (TRACE_msg_vm_is_enabled()) { + int len = INSTR_DEFAULT_STR_SIZE; + char str[INSTR_DEFAULT_STR_SIZE]; + + //kill means that this vm no longer exists, let's destroy it + container_t process = PJ_container_get (instr_vm_id(vm, str, len)); + PJ_container_remove_from_parent (process); + PJ_container_free (process); + } +} + +void TRACE_msg_vm_suspend(msg_vm_t vm) +{ + if (TRACE_msg_vm_is_enabled()){ + int len = INSTR_DEFAULT_STR_SIZE; + char str[INSTR_DEFAULT_STR_SIZE]; + + container_t vm_container = PJ_container_get (instr_vm_id(vm, str, len)); + type_t type = PJ_type_get ("MSG_VM_STATE", vm_container->type); + val_t value = PJ_value_get ("suspend", type); + new_pajePushState (MSG_get_clock(), vm_container, type, value); + } +} + +void TRACE_msg_vm_resume(msg_vm_t vm) +{ + if (TRACE_msg_vm_is_enabled()){ + int len = INSTR_DEFAULT_STR_SIZE; + char str[INSTR_DEFAULT_STR_SIZE]; + + container_t vm_container = PJ_container_get (instr_vm_id(vm, str, len)); + type_t type = PJ_type_get ("MSG_VM_STATE", vm_container->type); + new_pajePopState (MSG_get_clock(), vm_container, type); + } +} + +void TRACE_msg_vm_sleep_in(msg_vm_t vm) +{ + if (TRACE_msg_vm_is_enabled()){ + int len = INSTR_DEFAULT_STR_SIZE; + char str[INSTR_DEFAULT_STR_SIZE]; + + container_t vm_container = PJ_container_get (instr_vm_id(vm, str, len)); + type_t type = PJ_type_get ("MSG_VM_STATE", vm_container->type); + val_t value = PJ_value_get ("sleep", type); + new_pajePushState (MSG_get_clock(), vm_container, type, value); + } +} + +void TRACE_msg_vm_sleep_out(msg_vm_t vm) +{ + if (TRACE_msg_vm_is_enabled()){ + int len = INSTR_DEFAULT_STR_SIZE; + char str[INSTR_DEFAULT_STR_SIZE]; + + container_t vm_container = PJ_container_get (instr_vm_id(vm, str, len)); + type_t type = PJ_type_get ("MSG_VM_STATE", vm_container->type); + new_pajePopState (MSG_get_clock(), vm_container, type); + } +} + +void TRACE_msg_vm_end(msg_vm_t vm) +{ + if (TRACE_msg_vm_is_enabled()) { + int len = INSTR_DEFAULT_STR_SIZE; + char str[INSTR_DEFAULT_STR_SIZE]; + + //that's the end, let's destroy it + container_t container = PJ_container_get (instr_vm_id(vm, str, len)); + PJ_container_remove_from_parent (container); + PJ_container_free (container); + } +} + +#endif /* HAVE_TRACING */ diff --combined src/msg/msg_private.h index 165371c6f4,6899c15b7b..7edcb02124 --- a/src/msg/msg_private.h +++ b/src/msg/msg_private.h @@@ -91,13 -91,12 +91,13 @@@ typedef struct msg_comm msg_task_t *task_received; /* where the task will be received (NULL for the sender) */ msg_error_t status; /* status of the communication once finished */ } s_msg_comm_t; - +/* typedef enum { msg_vm_state_suspended, msg_vm_state_running, msg_vm_state_migrating } e_msg_vm_state_t; typedef struct msg_vm { + const char *name; s_xbt_swag_hookup_t all_vms_hookup; s_xbt_swag_hookup_t host_vms_hookup; xbt_dynar_t processes; @@@ -105,7 -104,7 +105,7 @@@ msg_host_t location; int coreAmount; } s_msg_vm_t; - +*/ /************************** Global variables ********************************/ typedef struct MSG_Global { xbt_fifo_t host; @@@ -155,5 -154,31 +155,44 @@@ void _MSG_action_exit(void) void MSG_post_create_environment(void); + /********** Tracing **********/ + /* declaration of instrumentation functions from msg_task_instr.c */ + void TRACE_msg_set_task_category(msg_task_t task, const char *category); + void TRACE_msg_task_create(msg_task_t task); + void TRACE_msg_task_execute_start(msg_task_t task); + void TRACE_msg_task_execute_end(msg_task_t task); + void TRACE_msg_task_destroy(msg_task_t task); + void TRACE_msg_task_get_start(void); + void TRACE_msg_task_get_end(double start_time, msg_task_t task); + int TRACE_msg_task_put_start(msg_task_t task); //returns TRUE if the task_put_end must be called + void TRACE_msg_task_put_end(void); + + /* declaration of instrumentation functions from msg_process_instr.c */ + char *instr_process_id (msg_process_t proc, char *str, int len); + char *instr_process_id_2 (const char *process_name, int process_pid, char *str, int len); + void TRACE_msg_process_change_host(msg_process_t process, msg_host_t old_host, + msg_host_t new_host); + void TRACE_msg_process_create (const char *process_name, int process_pid, msg_host_t host); + void TRACE_msg_process_destroy (const char *process_name, int process_pid, msg_host_t host); + void TRACE_msg_process_kill(msg_process_t process); + void TRACE_msg_process_suspend(msg_process_t process); + void TRACE_msg_process_resume(msg_process_t process); + void TRACE_msg_process_sleep_in(msg_process_t process); //called from msg/gos.c + void TRACE_msg_process_sleep_out(msg_process_t process); + void TRACE_msg_process_end(msg_process_t process); + ++/* declaration of instrumentation functions from instr_msg_vm.c */ ++char *instr_vm_id (msg_vm_t vm, char *str, int len); ++char *instr_vm_id_2 (const char *vm_name, char *str, int len); ++void TRACE_msg_vm_change_host(msg_vm_t vm, msg_host_t old_host, ++ msg_host_t new_host); ++void TRACE_msg_vm_create (const char *vm_name, msg_host_t host); ++void TRACE_msg_vm_kill(msg_vm_t process); ++void TRACE_msg_vm_suspend(msg_vm_t vm); ++void TRACE_msg_vm_resume(msg_vm_t vm); ++void TRACE_msg_vm_sleep_in(msg_vm_t vm); ++void TRACE_msg_vm_sleep_out(msg_vm_t vm); ++void TRACE_msg_vm_end(msg_vm_t vm); ++ SG_END_DECL() #endif diff --combined src/surf/instr_routing.c index 36ef196bc2,0b4b84dd86..c5fc21227f --- a/src/surf/instr_routing.c +++ b/src/surf/instr_routing.c @@@ -165,15 -165,10 +165,15 @@@ static void recursiveGraphExtraction (A container_t child1, child2; const char *child1_name, *child2_name; xbt_dict_foreach(container->children, cursor1, child1_name, child1) { - if (graph_extraction_filter_out (child1, NULL)) continue; + //if child1 is not a link, a smpi node, a msg process, a msg vm or a msg task + if (child1->kind == INSTR_LINK || child1->kind == INSTR_SMPI || child1->kind == INSTR_MSG_PROCESS || child1->kind == INSTR_MSG_VM || child1->kind == INSTR_MSG_TASK) continue; + xbt_dict_foreach(container->children, cursor2, child2_name, child2) { - if (graph_extraction_filter_out (child2, child1)) continue; - XBT_DEBUG ("get_route from %s to %s", child1_name, child2_name); + //if child2 is not a link, a smpi node, a msg process, a msg vm or a msg task + if (child2->kind == INSTR_LINK || child2->kind == INSTR_SMPI || child2->kind == INSTR_MSG_PROCESS || child2->kind == INSTR_MSG_VM || child2->kind == INSTR_MSG_TASK) continue; + + //if child1 is not child2 + if (strcmp (child1_name, child2_name) == 0) continue; //get the route sg_platf_route_cbarg_t route = xbt_new0(s_sg_platf_route_cbarg_t,1); @@@ -351,22 -346,6 +351,22 @@@ static void instr_routing_parse_start_h PJ_type_link_new ("MSG_PROCESS_TASK_LINK", PJ_type_get_root(), msg_process, msg_process); } } + + if (TRACE_msg_vm_is_enabled()) { + type_t msg_vm = PJ_type_get_or_null ("MSG_VM", new->type); + if (msg_vm == NULL){ + msg_vm = PJ_type_container_new("MSG_VM", new->type); + type_t state = PJ_type_state_new ("MSG_VM_STATE", msg_vm); + PJ_value_new ("suspend", "1 0 1", state); + PJ_value_new ("sleep", "1 1 0", state); + PJ_value_new ("receive", "1 0 0", state); + PJ_value_new ("send", "0 0 1", state); + PJ_value_new ("task_execute", "0 1 1", state); + PJ_type_link_new ("MSG_VM_LINK", PJ_type_get_root(), msg_vm, msg_vm); + PJ_type_link_new ("MSG_VM_PROCESS_LINK", PJ_type_get_root(), msg_vm, msg_vm); + } + } + } static void instr_routing_parse_start_router (sg_platf_router_cbarg_t router) @@@ -413,12 -392,7 +413,12 @@@ static void recursiveNewVariableType (c snprintf (tnstr, INSTR_DEFAULT_STR_SIZE, "p%s", new_typename); PJ_type_variable_new (tnstr, color, root); } - if (!strcmp (root->name, "LINK")){ + if (!strcmp (root->name, "MSG_VM")){ + char tnstr[INSTR_DEFAULT_STR_SIZE]; + snprintf (tnstr, INSTR_DEFAULT_STR_SIZE, "p%s", new_typename); + PJ_type_variable_new (tnstr, color, root); + } + if (!strcmp (root->name, "LINK")){ char tnstr[INSTR_DEFAULT_STR_SIZE]; snprintf (tnstr, INSTR_DEFAULT_STR_SIZE, "b%s", new_typename); PJ_type_variable_new (tnstr, color, root); @@@ -515,7 -489,7 +515,7 @@@ static xbt_edge_t new_xbt_graph_edge (x const char *sn = instr_node_name (s); const char *dn = instr_node_name (d); int len = strlen(sn)+strlen(dn)+1; - char *name = (char*)malloc(len * sizeof(char)); + char *name = (char*)xbt_malloc(len * sizeof(char)); snprintf (name, len, "%s%s", sn, dn); @@@ -552,12 -526,12 +552,12 @@@ static void recursiveXBTGraphExtractio container_t child1, child2; const char *child1_name, *child2_name; xbt_dict_foreach(container->children, cursor1, child1_name, child1) { - //if child1 is not a link, a smpi node, a msg process or a msg task - if (child1->kind == INSTR_LINK || child1->kind == INSTR_SMPI || child1->kind == INSTR_MSG_PROCESS || child1->kind == INSTR_MSG_TASK) continue; + //if child1 is not a link, a smpi node, a msg process, a msg vm or a msg task + if (child1->kind == INSTR_LINK || child1->kind == INSTR_SMPI || child1->kind == INSTR_MSG_PROCESS || child1->kind == INSTR_MSG_VM || child1->kind == INSTR_MSG_TASK) continue; xbt_dict_foreach(container->children, cursor2, child2_name, child2) { //if child2 is not a link, a smpi node, a msg process or a msg task - if (child2->kind == INSTR_LINK || child2->kind == INSTR_SMPI || child2->kind == INSTR_MSG_PROCESS || child2->kind == INSTR_MSG_TASK) continue; + if (child2->kind == INSTR_LINK || child2->kind == INSTR_SMPI || child2->kind == INSTR_MSG_PROCESS || child2->kind == INSTR_MSG_VM || child2->kind == INSTR_MSG_TASK) continue; //if child1 is not child2 if (strcmp (child1_name, child2_name) == 0) continue; diff --combined src/xbt/heap.c index f024b08e98,e124aab386..c795b76f8f --- a/src/xbt/heap.c +++ b/src/xbt/heap.c @@@ -11,7 -11,6 +11,7 @@@ #include "heap_private.h" #include +XBT_LOG_NEW_DEFAULT_SUBCATEGORY(xbt_heap, xbt, "Heap"); static void xbt_heap_max_heapify(xbt_heap_t H); static void xbt_heap_increase_key(xbt_heap_t H, int i); @@@ -96,7 -95,7 +96,7 @@@ void xbt_heap_push(xbt_heap_t H, void * if (count > size) { H->size = (size << 1) + 1; H->items = - (void *) realloc(H->items, + (void *) xbt_realloc(H->items, (H->size) * sizeof(struct xbt_heap_item)); } @@@ -104,7 -103,6 +104,7 @@@ item->key = key; item->content = content; xbt_heap_increase_key(H, count - 1); + XBT_DEBUG("Heap has now %d elements and max elem is %g",xbt_heap_size(H),xbt_heap_maxkey(H)); return; } @@@ -123,8 -121,6 +123,8 @@@ void *xbt_heap_pop(xbt_heap_t H int size = H->size; void *max; + XBT_DEBUG("Heap has %d elements before extraction and max elem was %g",xbt_heap_size(H),xbt_heap_maxkey(H)); + if (H->count == 0) return NULL; @@@ -136,7 -132,7 +136,7 @@@ if (H->count < size >> 2 && size > 16) { size = (size >> 1) + 1; H->items = - (void *) realloc(items, + (void *) xbt_realloc(items, size * sizeof(struct xbt_heap_item)); H->size = size; } @@@ -156,8 -152,6 +156,8 @@@ */ void *xbt_heap_remove(xbt_heap_t H, int i) { + XBT_DEBUG("Heap has %d elements: extracting element %d",xbt_heap_size(H),i); + if ((i < 0) || (i > H->count - 1)) return NULL; /* put element i at head */