loba
loba-dev
loba-stable
-simple_async
-
-*_dev.xml
simgrid-dev
simgrid-git
simgrid-stable
-*/
+
Ordonne les voisins du moins chargé au plus chargé.
Trouve ensuite, en les prenant dans ce ordre, le nombre maximal de
voisins tels que tous ont une charge inférieure à la moyenne des
-charges des voisins sélectionnes, et de soi-même.
+charges des voisins sélectionnés, et de soi-même.
Les transferts de charge sont ensuite fait en visant cette moyenne pour
tous les voisins sélectionnés. On envoie une quantité de charge égale
[Ginette 1932.076243] [comm/DEBUG] received LOAD: 282.074 from Fafard
[Ginette 1940.343540] [comm/DEBUG] received LOAD: 6.19507 from Fafard
-Par un bug dans SG 3.5 ?
+Probablement par un bug dans SG 3.5.
========================================================================
Il semblerait qu'il y ait un bug dans SG 3.5, et qu'on ne puisse pas
404a8d5 Do not call flush automatically in communcator::send...
========================================================================
+Valgrind détecte une fuite de mémoire liée à un appel à backtrace.
+
+Le problème semble être indépendant de SimGrid et peut être reproduit
+avec le code suivant (NB: l'équivalent, compilé avec gcc ne génère pas
+d'erreur).
+,----
+| #include <execinfo.h>
+| #include <iostream>
+| int main()
+| {
+| void *buffer[64];
+| int size = -1;
+| size = backtrace(buffer, sizeof buffer / sizeof buffer[0]);
+| std::cerr << "backtrace() returned " << size << "\n";
+| }
+`----
+==532== HEAP SUMMARY:
+==532== in use at exit: 56 bytes in 1 blocks
+==532== ...
+==532== LEAK SUMMARY:
+==532== ...
+==532== still reachable: 56 bytes in 1 blocks
+
+========================================================================
--- /dev/null
+#!/bin/bash
+
+set -e
+#set -x
+
+usage() {
+ cat >&2 <<EOF
+Usage: $0 [-c] <parameters file>
+Options:
+ -h print this help
+ -n dry-run mode (for debugging)
+ -c (continue) do not overwrite previous results
+EOF
+ exit $1
+}
+
+log() {
+ echo "-#- $@" >&2
+}
+
+die() {
+ echo "ERROR: $@" >&2
+ exit 2
+}
+
+variable_check() {
+ eval test -n "\${$1}" || die "undefined $1"
+}
+
+array_check() {
+ eval test "\${#$1}" -gt 0 || die "undefined $1"
+}
+
+# read args
+overwrite=1
+debug=0
+while getopts "chn" c; do
+ case "$c" in
+ 'c') overwrite=0 ;;
+ 'h') usage 0 ;;
+ 'n') debug=1 ;;
+ '?') usage 1 ;;
+ esac
+done
+shift $((OPTIND - 1))
+[ $# -eq 1 ] || usage 1
+parameters="$1"
+
+log "Running: $0 $@"
+log "Hostname: $(hostname -f)"
+
+declare -a TOPOLOGIES ALGORITHMS PLATFORMS COMMON_OPTS
+
+# read parameters
+log "Reading parameters from \"$1\"."
+source "$parameters" || die "cannot read parameters file: \"$parameters\""
+
+array_check TOPOLOGIES
+array_check ALGORITHMS
+array_check PLATFORMS
+variable_check NHOSTS
+variable_check LOAD
+variable_check DEADLINE
+
+# default values
+: ${RESULTS:=$PWD/results}
+: ${LOBA:=$PWD/loba}
+
+COMMON_OPTS=(
+ --cfg=contexts/factory:raw
+)
+
+log "Results put in: \"$RESULTS\"."
+
+[ $debug = 1 ] && log "Running in dry-run mode"
+
+outfile() {
+ echo "$*" | sed 's,[^ ]*/,,g;s/\.xml//;y/ /_/'
+}
+
+for plat in "${PLATFORMS[@]}"; do
+ tmp=$(basename "$plat" ".xml")
+ plat_output="$RESULTS/plat_$tmp"
+ for topo in "${TOPOLOGIES[@]}"; do
+ topo_output="$plat_output/topo_$topo"
+ for algo in "${ALGORITHMS[@]}"; do
+ algo_output="$topo_output/algo_$algo"
+ [ $debug = 0 ] && mkdir -p "$algo_output"
+ args=(
+ -T"$topo"
+ -a"$algo"
+ -N"$NHOSTS"
+ -L"$LOAD"
+ -t"$DEADLINE"
+ "$plat"
+ )
+ for bk in "" "-b"; do
+ tmp=$(outfile "loba" $bk "${args[@]}")
+ out="$algo_output/$tmp.out"
+ cmd=( "$LOBA" "${COMMON_OPTS[@]}" $bk "${args[@]}" )
+ log "Run: ${cmd[@]}"$'\n'"... &> $out"
+ if [ $overwrite = 0 -a -e "$out" ]; then
+ log "already run !"
+ tail -n4 "$out"
+ continue
+ fi
+ if [ $debug = 1 ]; then
+ log "skipped (dry-run)"
+ else
+ echo "# ${cmd[@]}" > "$out"
+ "${cmd[@]}" >> "$out" 2>&1
+ tail -n4 "$out"
+ fi
+ done
+ done
+ done
+done
--- /dev/null
+
+# define the topologies
+TOPOLOGIES=(
+ btree
+ clique
+ hcube
+ line
+ ring
+ star
+ torus
+)
+
+# define the algorithms
+ALGORITHMS=(
+ besteffort
+ makhoul
+ simple
+)
+
+# the different platform files
+PLATFORMS=(
+ ../platform.xml
+)
+
+# number of hosts
+NHOSTS=0
+
+# total load
+LOAD=1000
+
+# time limit for the simulation
+DEADLINE=10000
+
+# optional: path to binary (default: ./loba)
+#LOBA=./loba
+
+# optional: path to results (default: ./results)
+#RESULTS=./results
diffusing to neighbors.
* Without bookkeeping, it equals real_load
minus pending sends.
- * With bookkeeping, it corresponds to the "virtual
- load".
+ * With bookkeeping, it corresponds to the
+ "virtual load".
#include "neighbor.h"
neighbor::neighbor(const char* hostname)
- : host(static_cast<hostdata*>(MSG_host_get_data(MSG_get_host_by_name(hostname))))
+ : host(static_cast<hostdata*>
+ (MSG_host_get_data(MSG_get_host_by_name(hostname))))
, load(std::numeric_limits<double>::infinity())
, debt(0.0)
, to_send(0.0)
{
- Memory leak in libc?
+ Memory leak in glibc/backtrace
Memcheck:Leak
fun:malloc
fun:_dl_map_object_deps
fun:dlerror_run
fun:__libc_dlopen_mode
fun:init
- fun:pthread_once
- fun:backtrace
+ ...
+ fun:*backtrace*
+ ...
}