Arnaud Giersch [Wed, 8 Feb 2012 16:03:36 +0000 (17:03 +0100)]
Fix a race condition in _XBT_LOG_ISENABLEDV().
Without this change, catv.threshold can be initialized by another
thread, between the test for priority being great enough, and
that for catv.threshold being initialized, leading to a false
positive answer.
Hypothesis
==========
Initially, catv.threshold == xbt_log_priority_unititialized == -1
After initialization, priority < catv.threshold
Two threads running _XBT_LOG_ISENABLEDV() for the same
category, and the same priority.
Thread A Thread B
======== ========
priority >= cat.threshold
is TRUE
priority >= catv.threshold
is TRUE
catv.threshold != x.l.p._uninitialized
is FALSE
call xbt_log_cat_init(...)
returns FALSE
catv.threshold != x.l.p._uninitialized
is TRUE
=> _XBT_LOG_ISENABLEDV(...) => _XBT_LOG_ISENABLEDV(...)
is FALSE is TRUE
Martin Quinson [Wed, 8 Feb 2012 10:47:29 +0000 (11:47 +0100)]
Setup the framework allowing to add backtraces to the malloc meta-data
- implement a malloc-clean backtrace() function
- make some room to store the backtraces. Only for big blocks for now,
the memory consumption seem to be very high when doing so for
fragments. Possible solutions include:
- increasing the minimal fragment size to reduce the amount of
possible fragment per block. It will waste some blocks for very
small fragments, but it will save metadata that is paid for EVERY
block, including full blocks, through the union in the metadata
- Reduce the size of the saved backtraces. For now, we save up to 10
calls, 5 to 3 levels may be enough if space is scarce.
- use that framework to save the backtraces in one malloc execution
path. Other malloc execution paths, as well as realloc paths should
now be changed to store the backtrace too.
- Implement a mmalloc_backtrace_display() function that displays the
backtrace at which the block where malloc()ed. This is a bit crude
for now, as we reuse the internals of exceptions that where not
really done for that, but it works.
Martin Quinson [Wed, 8 Feb 2012 10:37:29 +0000 (11:37 +0100)]
Merge branch 'master' of scm.gforge.inria.fr:/gitroot/simgrid/simgrid
Martin Quinson [Wed, 8 Feb 2012 10:37:07 +0000 (11:37 +0100)]
Set xbt_binary_name so that the exception mechanism accepts to display backtraces
Arnaud Giersch [Wed, 8 Feb 2012 07:11:11 +0000 (08:11 +0100)]
Set network_maxmin_system->keep_track once for all.
Arnaud Giersch [Tue, 7 Feb 2012 20:47:23 +0000 (21:47 +0100)]
Remove global variable, and push it into lmm_system_t.
And give surf_solve a chance to run correctly in parallel.
Arnaud Giersch [Tue, 7 Feb 2012 14:11:00 +0000 (15:11 +0100)]
Guard against subas->to_index being NULL.
Arnaud Giersch [Mon, 6 Feb 2012 16:57:47 +0000 (17:57 +0100)]
Remove bogus inline declarations in private interface.
Arnaud Giersch [Mon, 6 Feb 2012 16:57:13 +0000 (17:57 +0100)]
Remove bogus inline declarations in public interface.
Martin Quinson [Mon, 6 Feb 2012 10:36:18 +0000 (11:36 +0100)]
Fixups in mrealloc
- make sure that it won't try to get a block smaller than what we are
willing to give (was a bug in previous implementation!!)
- update the requested size markers in meta-datas
Martin Quinson [Mon, 6 Feb 2012 10:04:38 +0000 (11:04 +0100)]
THROWF won't work in mmalloc: it needs to malloc stuff (I'm sure)
Martin Quinson [Mon, 6 Feb 2012 09:19:44 +0000 (10:19 +0100)]
split memory snapshooting and diffing functions out in their own file
Arnaud Giersch [Fri, 3 Feb 2012 22:00:38 +0000 (23:00 +0100)]
Useless casts.
What's the point compiling with -Werror if we use ugly casts
to silence the compiler???
Arnaud Giersch [Fri, 3 Feb 2012 21:51:26 +0000 (22:51 +0100)]
Reindent.
Arnaud Giersch [Sat, 4 Feb 2012 09:51:50 +0000 (10:51 +0100)]
bvprintf is now superfluous here.
Arnaud Giersch [Sat, 4 Feb 2012 09:54:29 +0000 (10:54 +0100)]
Kill more duplicate routes in platform files.
Arnaud Giersch [Sat, 4 Feb 2012 09:52:29 +0000 (10:52 +0100)]
Error message has changed, update tesh file.
Arnaud Giersch [Fri, 3 Feb 2012 14:21:20 +0000 (15:21 +0100)]
Fix compilation errors about multiple definition of `automaton'.
Martin Quinson [Fri, 3 Feb 2012 17:27:17 +0000 (18:27 +0100)]
Document one of midjy's changes (+cosmetics)
Martin Quinson [Fri, 3 Feb 2012 17:22:30 +0000 (18:22 +0100)]
document my ongoing changes. Not everything of it were implemented yet, but nothing writen in ChangeLog is really wrong. Even right now
Martin Quinson [Fri, 3 Feb 2012 17:18:03 +0000 (18:18 +0100)]
document Pierre's last changes
Martin Quinson [Fri, 3 Feb 2012 16:22:05 +0000 (17:22 +0100)]
I don't need an extra file just to define calloc when it can be inlined that easily
Martin Quinson [Fri, 3 Feb 2012 16:21:23 +0000 (17:21 +0100)]
and now with the right test so that not all our tests fail
Martin Quinson [Fri, 3 Feb 2012 16:02:09 +0000 (17:02 +0100)]
reindent only
Martin Quinson [Fri, 3 Feb 2012 15:57:23 +0000 (16:57 +0100)]
kill some dupplicate routes: now that we issue a warning, it breaks all tesh files
Martin Quinson [Fri, 3 Feb 2012 15:16:24 +0000 (16:16 +0100)]
Merge branch 'master' of scm.gforge.inria.fr:/gitroot/simgrid/simgrid
Martin Quinson [Fri, 3 Feb 2012 15:10:40 +0000 (16:10 +0100)]
catch a given possible misconfiguration, and give more informative messages
navarro [Fri, 3 Feb 2012 14:49:06 +0000 (15:49 +0100)]
Put #ifdef MSG_USE_DEPRECATED for all functions with channel mecanism.
Martin Quinson [Fri, 3 Feb 2012 14:43:13 +0000 (15:43 +0100)]
Merge branch 'master' of scm.gforge.inria.fr:/gitroot/simgrid/simgrid
Martin Quinson [Fri, 3 Feb 2012 14:42:59 +0000 (15:42 +0100)]
add a warning if a given route is redefined. It will hopefully help users understanding what's going wrong.
Martin Quinson [Fri, 3 Feb 2012 14:42:18 +0000 (15:42 +0100)]
kill now unused declaration
Martin Quinson [Fri, 3 Feb 2012 14:37:53 +0000 (15:37 +0100)]
add a surf_parse_warn and get surf_parse_error() accepting variable amount of parameters
Martin Quinson [Fri, 3 Feb 2012 14:23:51 +0000 (15:23 +0100)]
Also show the filename to locate parsing errors, not only the line number
Martin Quinson [Fri, 3 Feb 2012 14:17:14 +0000 (15:17 +0100)]
Further simplify the mmallocs, and improve its introspection abilities
- Ensure that the mmallocation code will never return NULL (but die
verbosely), and simplify the using code accordingly.
- Stop using THROWF in there, because these functions probably need
malloc to work, and that what broke when we want to issue a message.
Use printf/abort instead.
- Introduce a SMALLEST_POSSIBLE_MALLOC. It already existed (and were
defined to sizeof(struct list) to ensure that free fragments can be
enlisted, but I need this to declare the block metadata
- Add a frag_size information within the bloc info structure. It may
not perfectly be kept uptodate yet (in particular, by realloc)
Arnaud Giersch [Fri, 3 Feb 2012 13:53:53 +0000 (14:53 +0100)]
Don't use reserved keywords.
"or", "and", and "not" are reserved keywords in C++, and this line
breaks compilation of C++ code.
Since the literal constants defined here are never used, comment their
definition, and simply declare the field as an int.
Arnaud Giersch [Fri, 3 Feb 2012 10:27:49 +0000 (11:27 +0100)]
Correctly initialize simdata->comm when marked as isused.
I hope that it's now the good fix for the segfault I got when running
chord --cfg=contexts/stack_size:5 --log=msg_chord.thres:critical --cfg=network/model:Constant ./cluster_with_100000_hosts.xml ./chord100000.xml
(see the backtrace in the message for commit
1380f1a).
Arnaud Giersch [Fri, 3 Feb 2012 10:34:23 +0000 (11:34 +0100)]
Add missing dependency for smpi_traced_simple.
Arnaud Giersch [Thu, 2 Feb 2012 20:56:08 +0000 (21:56 +0100)]
Another %ld -> %zu fix.
Martin Quinson [Thu, 2 Feb 2012 20:44:21 +0000 (21:44 +0100)]
TODO--: the 'type' of each mmalloc block is granted to be uptodate at every point
Tomorrow, I'll add the fragment metadatas, and the backtraces.
For that, I'll waste a lot of space by adding a static tables to the
malloc_info structure, where the size of that table is the maximal
amount of fragments per block.
Something like BLOCKSIZE/sizeof(struct list) since mmalloc refuses to
allocate smaller blocks (to ensure that we can enlist free fragments).
This implementation of malloc will definitely not be something that
you want to use when not forced to do so to get the model-checking
working. But it will provide all the information that MC needs.
Martin Quinson [Thu, 2 Feb 2012 20:55:53 +0000 (21:55 +0100)]
Merge branch 'master' of scm.gforge.inria.fr:/gitroot/simgrid/simgrid into LLL
Martin Quinson [Thu, 2 Feb 2012 20:41:32 +0000 (21:41 +0100)]
also enforce that the freed block were marked as used before doing so. Theses stats should be trustable now
Martin Quinson [Thu, 2 Feb 2012 20:14:25 +0000 (21:14 +0100)]
there were no difference between __mmalloc_free and mfree anymore; merge them
Martin Quinson [Thu, 2 Feb 2012 20:08:51 +0000 (21:08 +0100)]
improve the doc to reflect recent changes (and we already have the actual size of blocks)
Martin Quinson [Thu, 2 Feb 2012 19:43:32 +0000 (20:43 +0100)]
ensure that free block are marked as such
Martin Quinson [Thu, 2 Feb 2012 16:45:21 +0000 (17:45 +0100)]
Simplify the malloc_info structure containing the metadata of a given block in mmalloc
* Less structures in union in structure in union inception madness
We're using a less portable anonymous union, but gcc handles that
since maybe 15 years, so that should be cool.
* We can now determine from looking at it whether the block is busy or
free, without having to search in which list the block is.
That was useles to other usages of mmalloc, but this is very
interesting when comparing heaps.
Moreover, it comes for free: it has exactly the same (memory) cost
when the block is busy, and we have a plenty of place in the block
to store that this it free when it is actually free.
Please note that this information is not updated when the block is
freed yet. (splitting the commit just in case someone tries to read it
later: this one is almost automatic refactoring)
Martin Quinson [Thu, 2 Feb 2012 16:20:50 +0000 (17:20 +0100)]
document one more function
unknown [Thu, 2 Feb 2012 15:57:19 +0000 (16:57 +0100)]
Add missing flag (X86 or AMD) to test windows functions
unknown [Wed, 25 Jan 2012 13:19:07 +0000 (14:19 +0100)]
Don't import smpi binaries on windows and set environment variables on current user
unknown [Wed, 25 Jan 2012 13:18:23 +0000 (14:18 +0100)]
Don't need to do a distrib on win32
Martin Quinson [Thu, 2 Feb 2012 15:55:50 +0000 (16:55 +0100)]
I think I understood how mmalloc works. Now, I'll do what we need in there
Martin Quinson [Thu, 2 Feb 2012 15:25:31 +0000 (16:25 +0100)]
simply reindent
Martin Quinson [Thu, 2 Feb 2012 15:24:04 +0000 (16:24 +0100)]
who needs aligned mallocs anyway?
Martin Quinson [Thu, 2 Feb 2012 15:20:32 +0000 (16:20 +0100)]
further little clarifications in mmalloc comments
Martin Quinson [Thu, 2 Feb 2012 14:41:34 +0000 (15:41 +0100)]
various cosmetics and comments improvements
Martin Quinson [Thu, 2 Feb 2012 14:12:20 +0000 (15:12 +0100)]
normalize the function names wrt to the rest of XBT
Martin Quinson [Thu, 2 Feb 2012 14:07:10 +0000 (15:07 +0100)]
inline a function used at only one location.
I'm not sure that the lisibility gain is very high, but at least it
makes clear that this functionnality is used only here.
Martin Quinson [Thu, 2 Feb 2012 14:00:15 +0000 (15:00 +0100)]
cosmetics and kill a now undeclared function prototype
Martin Quinson [Thu, 2 Feb 2012 13:53:54 +0000 (14:53 +0100)]
kill an unused/undocumented/un-understood function
Martin Quinson [Thu, 2 Feb 2012 13:23:23 +0000 (14:23 +0100)]
group together all functions speaking of module and objects init/fini
Martin Quinson [Thu, 2 Feb 2012 13:16:13 +0000 (14:16 +0100)]
merge two files (I'll ignore both of these functions anyway)
Arnaud Giersch [Wed, 1 Feb 2012 21:21:47 +0000 (22:21 +0100)]
Revert "Reset t_simdata->comm after comm is over."
This reverts commit
1380f1a22147312c119055320c6ca87d72837598.
Looking at cdash, it is clearly wrong... sorry for the noise.
Arnaud Giersch [Wed, 1 Feb 2012 16:41:51 +0000 (17:41 +0100)]
smpi_mpi_request_free expects an MPI_request*.
Arnaud Giersch [Wed, 1 Feb 2012 16:04:45 +0000 (17:04 +0100)]
These free's are buggy.
AFAICT, it's the responsibility of smpi_mpi_waitall to free the
requests.
Arnaud Giersch [Wed, 1 Feb 2012 15:41:03 +0000 (16:41 +0100)]
smpirun: report exit status.
Martin Quinson [Wed, 1 Feb 2012 17:01:00 +0000 (18:01 +0100)]
kill dupplicated code between legacy interface and actual implementations
Martin Quinson [Wed, 1 Feb 2012 16:36:58 +0000 (17:36 +0100)]
Merge branch 'master' of scm.gforge.inria.fr:/gitroot/simgrid/simgrid
Martin Quinson [Wed, 1 Feb 2012 16:30:58 +0000 (17:30 +0100)]
Simplify the mmalloc library further
* Stop playing with void* for the heap descriptors and introduce the
xbt_mheap_t datatype for that.
* Don't try to make it work when mmalloc and friends are called with
NULL as a first argument.
I added a pimple that mmalloc_preinit returns the default mhead after
creating it to simplify the code of the legacy functions that check
that this default mhead exist or create it before using it.
This extra check should be useless if mmalloc_preinit were called soon
enough since it's in the critical path, but the performance of
model-checking is not a concern yet: only getting something working
matters for now.
Martin Quinson [Wed, 1 Feb 2012 15:30:15 +0000 (16:30 +0100)]
I finally understood what this function is good for
Martin Quinson [Wed, 1 Feb 2012 15:20:45 +0000 (16:20 +0100)]
cosmetics and comment improvement
Martin Quinson [Wed, 1 Feb 2012 15:14:36 +0000 (16:14 +0100)]
we don't need any stats about the amount of free chunks and such
Martin Quinson [Wed, 1 Feb 2012 15:09:27 +0000 (16:09 +0100)]
errno were never updated anyway
Martin Quinson [Wed, 1 Feb 2012 15:03:54 +0000 (16:03 +0100)]
cosmetics and comment improvements
Martin Quinson [Wed, 1 Feb 2012 14:56:58 +0000 (15:56 +0100)]
rename sup-mmap.c into mmorecore.c and simplify the code since we want no more than one core provider
Martin Quinson [Wed, 1 Feb 2012 14:48:55 +0000 (15:48 +0100)]
kill the sbrk-based morecore: we'll never use less than two heaps when using mmalloc
Martin Quinson [Wed, 1 Feb 2012 14:47:45 +0000 (15:47 +0100)]
move a global definition so that we can kill the sbrk stuff: we'll never use it
Martin Quinson [Wed, 1 Feb 2012 14:40:07 +0000 (15:40 +0100)]
kill little useless things in mmalloc. Still searching how to do the Big Cleanup on that code
Martin Quinson [Wed, 1 Feb 2012 14:25:05 +0000 (15:25 +0100)]
kill the standard hooks of mmalloc: we will change the implementation directly, not declare hooks
Martin Quinson [Wed, 1 Feb 2012 14:17:52 +0000 (15:17 +0100)]
Merge branch 'master' of scm.gforge.inria.fr:/gitroot/simgrid/simgrid
Arnaud Giersch [Wed, 1 Feb 2012 14:11:55 +0000 (15:11 +0100)]
Reset t_simdata->comm after comm is over.
Fixes a segfault with chord on 100000 hosts, where the backtrace is:
Program received signal SIGSEGV, Segmentation fault.
0x00007ffff7b2bd2f in SIMIX_rdv_remove (comm=0x40bd4fd0, rdv=0x0) at ./src/simix/smx_network.c:117
117 xbt_fifo_remove(rdv->comm_fifo, comm);
(gdb) bt
#0 0x00007ffff7b2bd2f in SIMIX_rdv_remove (comm=0x40bd4fd0, rdv=0x0) at ./src/simix/smx_network.c:117
#1 SIMIX_comm_cancel (action=0x40bd4fd0) at ./src/simix/smx_network.c:754
#2 0x00007ffff7b4046e in SIMIX_simcall_pre (simcall=0x613c90, value=0) at ./src/simix/smx_smurf.c:126
#3 0x00007ffff7b407c6 in SIMIX_simcall_push (self=0x613c00) at ./src/simix/smx_smurf.c:26
#4 0x00007ffff7a83a8d in simcall_comm_cancel (comm=0x40bd4fd0) at ./src/simix/smx_user.c:830
#5 MSG_task_cancel (task=0x45ba4eb0) at ./src/msg/msg_task.c:223
#6 0x00007ffff7a83bc0 in MSG_task_destroy (task=0x45ba4eb0) at ./src/msg/msg_task.c:187
#7 0x00007ffff7ac3ebb in SIMIX_comm_destroy (action=0x42078370) at ./src/simix/smx_network.c:274
#8 0x00007ffff7a9603c in SIMIX_process_cleanup (process=0x1ce9da60) at ./src/simix/smx_process.c:87
#9 0x00007ffff7b40208 in SIMIX_simcall_pre (simcall=0x1ce9daf0, value=0) at ./src/simix/smx_smurf.c:323
#10 0x00007ffff7b2554e in SIMIX_run () at ./src/simix/smx_global.c:207
#11 0x00007ffff7b256e7 in MSG_main () at ./src/msg/msg_global.c:155
#12 0x000000000040180b in main (argc=3, argv=<optimized out>) at ./examples/msg/chord/chord.c:918
Git bisect identified commit
6dcde87 as culprit (Use isend
instead of send to set the simdata->comm so that get_remaining
can work.)
Arnaud Giersch [Wed, 1 Feb 2012 08:36:03 +0000 (09:36 +0100)]
Add more thorough tests for parmaps.
* all modes are tested;
* the "basic test" does some computations, and checks the results;
* the "extended test" tries to verify that all threads are working.
Arnaud Giersch [Wed, 1 Feb 2012 08:21:45 +0000 (09:21 +0100)]
Parmap review.
* synchronizations are made a bit simpler;
* helper functions are renamed for more clarity;
* synchronization at the end of xbt_parmap_new() is removed;
* the working loop is made faster by manually inlining xbt_parmap_next();
* finally, the posix mode is fixed.
Arnaud Giersch [Tue, 31 Jan 2012 18:11:23 +0000 (19:11 +0100)]
Add parmap_bench.c.
Arnaud Giersch [Wed, 1 Feb 2012 08:00:35 +0000 (09:00 +0100)]
Remove static function attribute.
Fixes build error:
./src/surf/network.c:376:12: error: static declaration of ‘net_get_link_latency_limited’ follows non-static declaration
./src/surf/surf_private.h:81:5: note: previous declaration of ‘net_get_link_latency_limited’ was here
navarro [Tue, 31 Jan 2012 20:51:09 +0000 (21:51 +0100)]
Use m_file_t instead of m_file_t*
Arnaud Giersch [Tue, 31 Jan 2012 21:07:41 +0000 (22:07 +0100)]
Remove duplicate declaration for smx_file_t.
Arnaud Giersch [Tue, 31 Jan 2012 21:01:25 +0000 (22:01 +0100)]
Remove extern declaration for gras_opt_trp_nomoredata_on_close.
Arnaud Giersch [Tue, 31 Jan 2012 17:59:27 +0000 (18:59 +0100)]
Fix depency information for ddt_parse.yy.c (maintainer mode).
Arnaud Giersch [Tue, 31 Jan 2012 17:08:26 +0000 (18:08 +0100)]
Fix source for generated files.
Arnaud Giersch [Tue, 31 Jan 2012 17:07:25 +0000 (18:07 +0100)]
memcheck_tests: user_variables.tesh now exists.
Martin Quinson [Tue, 31 Jan 2012 16:42:36 +0000 (17:42 +0100)]
Merge branch 'master' of scm.gforge.inria.fr:/gitroot/simgrid/simgrid
Christophe Thiéry [Tue, 31 Jan 2012 16:01:30 +0000 (17:01 +0100)]
Move datadesc and TCP sockets from GRAS to XBT.
XBT supports sockets with explicit choice of the transport plugin.
XBT provides only one transport plugin: TCP (i.e. real sockets) and
allows other layers to write their custom plugins.
GRAS implements such custom plugins: simulated sockets and file sockets.
TCP sockets only existed in GRAS RL mode. They can now also be used in
GRAS SG mode.
More pieces of GRAS remain to be moved to XBT before TCP sockets can
also be used outside GRAS (e.g. in SIMIX 3, one day, to distribute the
simulation).
Lucas Schnorr [Tue, 31 Jan 2012 16:03:57 +0000 (17:03 +0100)]
[trace] add missing tesh to test user variables tracing
Arnaud Giersch [Tue, 31 Jan 2012 15:48:14 +0000 (16:48 +0100)]
memcheck_tests: regenerate.
Arnaud Giersch [Tue, 31 Jan 2012 15:46:01 +0000 (16:46 +0100)]
generate_memcheck_tests.pl: don't fail if tesh file doesn't exist.
Martin Quinson [Tue, 31 Jan 2012 15:27:49 +0000 (16:27 +0100)]
Kill some unused features of mmalloc
- keys, which allow to store data directly in the malloc descriptor
- tracing, which displays what happends using the hooks. In addition
of being useless to us, it contained a FIXME indicating that this
implementation was partial.
Arnaud Giersch [Tue, 31 Jan 2012 15:44:49 +0000 (16:44 +0100)]
generate_memcheck_tests.pl: correctly skip commented lines.
Arnaud Giersch [Tue, 31 Jan 2012 15:07:02 +0000 (16:07 +0100)]
Fix default value for contexts/nthreads (only the help message is affected).
Arnaud Giersch [Thu, 26 Jan 2012 15:16:28 +0000 (16:16 +0100)]
Use simpler names for tests on dicts.
Make them easier to select when running testall.
Arnaud Giersch [Tue, 24 Jan 2012 15:27:56 +0000 (16:27 +0100)]
Reinitialize pointer after free.
Fixes test tesh-simdag-reinit-costs.
Arnaud Giersch [Mon, 23 Jan 2012 21:06:43 +0000 (22:06 +0100)]
Update timings for 32bits too.