Mark Probst [Sat, 4 Oct 2014 23:42:27 +0000 (16:42 -0700)]
[sgen] Unify scanning code a bit.
We still have two separate implementations of the scanning code: The optimized
one and the old one. The old one is still needed because it supports the concurrent
collector. For the non-concurrent collector we can now use the optimized
implementation, however.
Mark Probst [Sat, 4 Oct 2014 23:03:34 +0000 (16:03 -0700)]
[sgen] Add/fix some assertions.
Mark Probst [Sat, 4 Oct 2014 23:02:41 +0000 (16:02 -0700)]
[sgen] Add some missing binary protocol invocations.
Mark Probst [Sat, 4 Oct 2014 22:53:27 +0000 (15:53 -0700)]
[sgen] New protocol entry for processing of individual reference.
Mark Probst [Sat, 4 Oct 2014 22:44:27 +0000 (15:44 -0700)]
[sgen] In binary protocol grep, gray en-/dequeue must not always match.
Mark Probst [Sat, 4 Oct 2014 22:43:48 +0000 (15:43 -0700)]
[sgen] Remove binary protocol entry for null dequeue.
Mark Probst [Sat, 4 Oct 2014 22:43:00 +0000 (15:43 -0700)]
[sgen] Fix build on highest debug level.
Mark Probst [Thu, 2 Oct 2014 23:56:00 +0000 (16:56 -0700)]
[sgen] Handle copy object failure.
This is just a verbatim copy of the old code. It's unlikely it's ever
been tested, though.
Mark Probst [Thu, 2 Oct 2014 23:55:39 +0000 (16:55 -0700)]
[sgen] Increase debug level of assertions in inner loops.
Mark Probst [Thu, 2 Oct 2014 23:47:05 +0000 (16:47 -0700)]
[sgen] Remove dead code.
This was still left from the parallel collector.
Mark Probst [Thu, 25 Sep 2014 21:56:30 +0000 (14:56 -0700)]
[sgen] Fix build with prefetch queue enabled.
Mark Probst [Tue, 23 Sep 2014 23:45:44 +0000 (16:45 -0700)]
[sgen] Make new M&S parameters fastenable.
Fasten is a small tool for optimizing compile-time options:
https://github.com/evincarofautumn/fasten
It does that by parsing source files for numbers that have been marked
as "fastenable", and fiddling around with them. We do this for all
the new optimizations.
Mark Probst [Tue, 16 Sep 2014 09:25:52 +0000 (11:25 +0200)]
[sgen] Support evacuation in the optimized mark/scan loop.
We actually implement two separate mark/scan loops: One that doesn't
support evacuation and one that does. We dynamically choose which one
to use. The evacuation-less loop is faster, so we use it whenever we can.
Mark Probst [Tue, 16 Sep 2014 09:07:09 +0000 (11:07 +0200)]
[sgen] Move drain_gray_stack() to copy/mark header file, too.
This inlines the scan/copy functions, so if we duplicate them we need
to duplicate this, too.
Mark Probst [Tue, 16 Sep 2014 08:23:20 +0000 (10:23 +0200)]
[sgen] Remove old copy/mark function.
The new, optimized function can now do everything the old one did, so
let's get rid of it.
Mark Probst [Sun, 5 Oct 2014 00:10:21 +0000 (17:10 -0700)]
[sgen] Move copy/mark function into separate header file.
So we can later include them twice, once with support for evacuation
and once without.
Mark Probst [Tue, 16 Sep 2014 08:02:56 +0000 (10:02 +0200)]
[sgen] Support evacuation again.
The performance impact of this is significant, so we will later make
two separate scan functions: one with evacuation and one without.
Mark Probst [Tue, 16 Sep 2014 08:01:05 +0000 (10:01 +0200)]
[sgen] Support split nursery again.
This might degrade performance, in which case we'll special-case it
later on.
Mark Probst [Mon, 15 Sep 2014 09:07:56 +0000 (11:07 +0200)]
[sgen] Unify the two small object mark cases again.
The only difference between these two cases was that we used to
different heavy statistics counters. We can do that within a single
case.
Mark Probst [Mon, 15 Sep 2014 09:05:00 +0000 (11:05 +0200)]
[sgen] Use MS_MARK_OBJECT_AND_ENQUEUE where we expanded it previously.
It's still the same code, so use the macro directly.
Mark Probst [Thu, 11 Sep 2014 10:36:12 +0000 (12:36 +0200)]
[sgen] Always inline the optimized copy function.
This is a huge win for some benchmarks.
Mark Probst [Thu, 11 Sep 2014 10:35:29 +0000 (12:35 +0200)]
[sgen] Never fall back to the old copy function.
Mark Probst [Wed, 10 Sep 2014 10:16:06 +0000 (12:16 +0200)]
[sgen] Use scanning macro in optimized loop.
We expanded this macro previously, but it's still the same code, so
use the macro directly.
Mark Probst [Wed, 10 Sep 2014 10:08:08 +0000 (12:08 +0200)]
[sgen] New SMALL_PTRFREE descriptor type for faster has_references checking.
We use 3 to denote SMALL_PTRFREE, and 7 for COMPLEX_PTRFREE, so we can
check for both simply with ((desc & 3) == 3).
Mark Probst [Wed, 10 Sep 2014 09:45:39 +0000 (11:45 +0200)]
[sgen] Only enqueue objects with references.
Mark Probst [Wed, 10 Sep 2014 09:27:59 +0000 (11:27 +0200)]
[sgen] Look at descriptor, not block, to see whether object has references.
Mark Probst [Mon, 8 Sep 2014 12:26:57 +0000 (14:26 +0200)]
[sgen] Special descriptor encoding for strings.
The complex pointer-free type carries no additional information. We use its
data to mark strings so we can determine object size quicker.
Mark Probst [Mon, 8 Sep 2014 12:23:00 +0000 (14:23 +0200)]
[sgen] Faster generic large bitmap scanning if CTZ builtin is available.
Mark Probst [Mon, 8 Sep 2014 10:40:10 +0000 (12:40 +0200)]
[sgen] Remove small bitmap descriptor type.
The reason for having a small bitmap was that we could encode the object
size in the descriptor. The main attraction for having object size handy is that
we can quickly check whether an object is in the small object major heap or
in the LOS. We solve this problem by always using complex descriptor types
for large objects, so now we can tell whether an object is small just by looking
at the descriptor type.
Mark Probst [Sun, 7 Sep 2014 16:41:39 +0000 (18:41 +0200)]
[sgen] Heavy statistics on copied object descriptors.
Mark Probst [Sun, 7 Sep 2014 13:06:15 +0000 (15:06 +0200)]
[sgen] Heavy statistic counter for scanning of no-ref objects.
Mark Probst [Sun, 7 Sep 2014 12:59:32 +0000 (14:59 +0200)]
[sgen] Use HANDLE_PTR in the fast-path, too.
We had just expanded the macro verbatim and never changed it, so
there's no point in not using it directly.
Mark Probst [Fri, 5 Sep 2014 19:11:02 +0000 (21:11 +0200)]
[sgen] Optional scanning without the small bitmap fast path.
To experiment with different optimization combinations.
Mark Probst [Fri, 5 Sep 2014 18:59:37 +0000 (20:59 +0200)]
[sgen] Fix heavy statistics in mark-scan loop.
Mark Probst [Fri, 5 Sep 2014 18:57:04 +0000 (20:57 +0200)]
[sgen] Limit run-length descriptors to small object size, too.
To identify more small objects quicker.
Since we now use the runl-length descriptor types to indicate object
size as well, and strings can have any size, we can't use that type
for strings anymore, so we use the complex type which forces us to
look up its size to determine whether it's a small or large object.
Mark Probst [Fri, 5 Sep 2014 09:46:18 +0000 (11:46 +0200)]
[sgen] Make mark on enqueue vs dequeue configurable.
So we can experiment with a variety of optimization configurations.
Mark Probst [Wed, 3 Sep 2014 02:36:07 +0000 (19:36 -0700)]
[sgen] Make block info in header optional.
So we can experiment with a variety of optimization configurations.
Mark Probst [Wed, 3 Sep 2014 02:20:53 +0000 (19:20 -0700)]
[sgen] Tag cemented objects so we don't have to go through the hash.
We can do the cemented check faster by using the third vtable bit to
tag cemented objects (in addition to the pinned bit). In workloads
that are heavy on cementing (like `lcscbench` or `perimeter`) this
significantly increases performance.
Mark Probst [Fri, 29 Aug 2014 23:48:04 +0000 (16:48 -0700)]
[sgen] Prefetch mark bits, not block start.
When prefetching, we calculate which mark bits we need and prefetch
those for writing. The object itself we prefetch for reading.
Mark Probst [Fri, 29 Aug 2014 23:28:49 +0000 (16:28 -0700)]
[sgen] Put block info into blocks.
Another experiment: What if we put the whole block info into the block
itself, not just a pointer to it. There's one less indirection we
need to do. On the other hand, many of them will share the same cache
lines. So do the pointers to the block infos, though.
Mark Probst [Fri, 29 Aug 2014 23:27:49 +0000 (16:27 -0700)]
[sgen] Bring mark-scan loop stats up to date.
Mark Probst [Fri, 29 Aug 2014 21:58:12 +0000 (14:58 -0700)]
[sgen] Also prefetch the (potential) block header.
When we scan a small object in the major heap we have to read the
block header of its block. It makes sense to prefetch that as well,
in addition to the object itself.
Mark Probst [Thu, 14 Aug 2014 19:26:10 +0000 (12:26 -0700)]
[sgen] Count scanned objects.
Mark Probst [Thu, 14 Aug 2014 22:33:40 +0000 (15:33 -0700)]
[sgen] Mark on dequeue, not enqueue.
This is another experiment.
When marking on enqueue, what we need to do is look at the object
we're about to enqueue, to check whether it's a small or large object.
Then, when we dequeue to scan, we look at the object again, so we
essentially fetch each live object header twice.
With mark on dequeue, when we encounter a pointer we always enqueue
it, without even looking at the object. Only when we dequeue do we
figure out whether it's marked yet, and thus whether we need to scan
it.
Mark Probst [Fri, 29 Aug 2014 00:22:50 +0000 (17:22 -0700)]
[sgen] Make enqueuing descriptors compile-time optional.
We want to test this in combination with other changes, so we make
each of them configurable.
Mark Probst [Thu, 28 Aug 2014 23:47:45 +0000 (16:47 -0700)]
[sgen] Make prefetch queue compile-time optional.
We want to benchmark the prefetch queue in combination with other
changes, so we make each of them configurable.
Mark Probst [Thu, 28 Aug 2014 23:38:51 +0000 (16:38 -0700)]
[sgen] Prefetch queue for optimized mark/scan loop.
We put a short FIFO between the gray stack and the actual scanning, to
be able to prefetch objects ahead of time, with an adjustable delay.
Mark Probst [Wed, 27 Aug 2014 23:23:22 +0000 (16:23 -0700)]
[sgen] Optimized mark/scan loop for major collections.
The basic idea here is to make a loop that combines dequeuing from the
gray queue, scanning and marking/copying/enqueuing, with redundancies
removed and special-casing of the common case.
We make the small bitmap type descriptor only apply to small (as
opposed to LOS) objects so that we can quickly check in that case
whether an object is in the LOS or not without actually looking up its
size.
We disable evacuation and the split nursery because the code doesn't
support them yet.
Mark Probst [Wed, 27 Aug 2014 21:35:06 +0000 (14:35 -0700)]
[gc] Remove the `new object count` counter, because it's useless.
Without heavy statistics it counts almost no objects, and even with
heavy statistics turned on, it doesn't count everything. SGen has an
accurate counter when heavy statistics are turned on.
Mark Probst [Wed, 1 Oct 2014 20:25:42 +0000 (13:25 -0700)]
[sgen] Fix build with binary protocol.
Miguel de Icaza [Wed, 26 Nov 2014 18:06:24 +0000 (13:06 -0500)]
Merge pull request #1426 from ignacionr/webclient-delay-file-creation
Webclient delay file creation
Marek Safar [Wed, 26 Nov 2014 17:47:32 +0000 (18:47 +0100)]
[corlib] Implement ExecutionContext flow for async infrastructure. Fixes #24757
Miguel de Icaza [Wed, 26 Nov 2014 18:02:16 +0000 (13:02 -0500)]
Merge pull request #1398 from jwestfall69/dgv-first_row_index
[MWF] DataGridView: ensure first_row_index will be valid after row removal
Miguel de Icaza [Wed, 26 Nov 2014 18:01:51 +0000 (13:01 -0500)]
Merge pull request #1396 from jwestfall69/dgvrc-clear-speedup
[MWF] DataGridViewRowCollection Clear() speed up
Rodrigo Kumpera [Wed, 26 Nov 2014 16:20:45 +0000 (11:20 -0500)]
Bump the version.
Marek Safar [Wed, 26 Nov 2014 12:43:20 +0000 (13:43 +0100)]
Merge pull request #1429 from mono/fixProcessStartInfo2
Fix ProcessStartInfo null checking and replace with Length checks.
Ungureanu Marius [Wed, 26 Nov 2014 12:18:12 +0000 (14:18 +0200)]
Fix ProcessStartInfo null checking and replace with Length checks.
Jo Shields [Wed, 26 Nov 2014 10:46:17 +0000 (10:46 +0000)]
Marek Safar [Wed, 26 Nov 2014 11:40:01 +0000 (12:40 +0100)]
Merge pull request #1428 from mono/fixProcessStartinfo
Update ProcessStartInfo to fix some inconsistency
Ungureanu Marius [Wed, 26 Nov 2014 11:04:40 +0000 (13:04 +0200)]
Shortcircuit ProcessStartInfo Verbs logic.
Let's not do IO operations except if needed.
Marius Ungureanu [Tue, 25 Nov 2014 14:03:34 +0000 (16:03 +0200)]
Update ProcessStartInfo to fix some inconsistency
Ungureanu Marius [Wed, 26 Nov 2014 10:59:32 +0000 (12:59 +0200)]
Introduce failing ProcessStartInfo tests.
Marcos Henrich [Wed, 26 Nov 2014 09:44:25 +0000 (09:44 +0000)]
ConsoleUi no longer breaks when the test runner returns null.
In case the test runner returns null we will no longer suffer a NullArgumentException and the collector exceptions will be printed.
The test runner was returning null because of an IOException "Too many open files" on NUnit side.
Zoltan Varga [Wed, 26 Nov 2014 05:39:58 +0000 (06:39 +0100)]
[jit] Resurrect the precise stack marking code.
Rodrigo Kumpera [Tue, 25 Nov 2014 23:31:05 +0000 (18:31 -0500)]
[corlib] Improve a test failure to be more actionable.
Rolf Bjarne Kvinge [Tue, 25 Nov 2014 14:46:07 +0000 (15:46 +0100)]
[mono-api-html] Colorize html output.
* Add support for colorizing the HTML output. This can be turned off if desired.
* Some changes are now reported inline (using colors/underline/strikeout)
instead of generating an removed/added pair. This makes the diff
a lot easier to read.
Marek Safar [Tue, 25 Nov 2014 13:44:04 +0000 (14:44 +0100)]
[corlib] Replace few threading types from reference sources
Jo Shields [Tue, 25 Nov 2014 12:49:26 +0000 (12:49 +0000)]
[msvc] Allow cygwin "make" to be called after winsetup.bat
As-is, winsetup.bat replaces config.h with winconfig.h, which is needed for the MSVC compilation - but breaks all further use of cygwin's make (e.g. to build the class library, or run "make install").
This patch introduces a new cygconfig.h as a backup prior to squashing config.h (if it exists, so the runtime can still be built without cygwin ever being used), and makes winconfig.h use it on non-MSVC compilers (i.e. cygwin)
Jo Shields [Tue, 25 Nov 2014 12:23:20 +0000 (12:23 +0000)]
[msvc] Fix MONO_INTERNAL undefined in Boehm
Jo Shields [Tue, 25 Nov 2014 10:13:03 +0000 (10:13 +0000)]
Fix "make dist" issue from MS.NET regex switchover
Marek Safar [Tue, 25 Nov 2014 09:25:02 +0000 (10:25 +0100)]
[corlib] Add check for collection modification during ForEach. Fixes #24775
Rolf Bjarne Kvinge [Tue, 25 Nov 2014 08:38:06 +0000 (09:38 +0100)]
Revert "[System] Ignore two tests which are failing due to external factors changing."
This reverts commit
597183658e04260ba493495bcff2da28222b48b8.
According to the comments on the commit [1], this has already been fixed.
[1] https://github.com/mono/mono/commit/
597183658e04260ba493495bcff2da28222b48b8
Rodrigo Kumpera [Mon, 24 Nov 2014 22:10:21 +0000 (17:10 -0500)]
Revert my last change to a submodule. ALL MY LOVE TO THOSE THAT INVENTED GIT SUBMODULES. <3
Rodrigo Kumpera [Mon, 24 Nov 2014 22:08:02 +0000 (17:08 -0500)]
[System.Core] Make one test much less likely to fail.
Zoltan Varga [Mon, 24 Nov 2014 21:40:01 +0000 (16:40 -0500)]
[Microsoft.Build.Tasks] Fix a net 2.0 failure.
Marek Safar [Mon, 24 Nov 2014 19:34:18 +0000 (20:34 +0100)]
[System.ComponentModel.DataAnnotations] Replace with .net implementation
Marek Safar [Mon, 24 Nov 2014 17:25:06 +0000 (18:25 +0100)]
Fixes build
irodriguez [Mon, 24 Nov 2014 17:07:51 +0000 (00:07 +0700)]
[Fix] WebClient to delay downloaded file creation
Fixed unwanted spaces, changed for tabs.
irodriguez [Mon, 24 Nov 2014 16:49:13 +0000 (23:49 +0700)]
WebClient delay file creation until a response is obtained
Marcos Henrich [Mon, 24 Nov 2014 16:26:55 +0000 (16:26 +0000)]
Update .csproj files to include .NET System.Text.RegularExpressions
Marek Safar [Mon, 24 Nov 2014 16:20:15 +0000 (17:20 +0100)]
Bring .NET implementation of concurrent collections
Marek Safar [Mon, 24 Nov 2014 15:48:52 +0000 (16:48 +0100)]
[mcs] Add special-cased HostProtectionAttribute handling
Miguel de Icaza [Mon, 24 Nov 2014 15:09:06 +0000 (10:09 -0500)]
Remove Mono's previous System.Text.RegularExpressions
Marek Safar [Mon, 24 Nov 2014 11:14:59 +0000 (12:14 +0100)]
Remove 2.0 profile csproj files
Marek Safar [Mon, 24 Nov 2014 11:13:45 +0000 (12:13 +0100)]
[System.Core] Switch to common SR class
Marek Safar [Mon, 24 Nov 2014 11:13:03 +0000 (12:13 +0100)]
Simplify System.Data makefile
Jo Shields [Mon, 24 Nov 2014 10:59:40 +0000 (10:59 +0000)]
Add SR.cs (for Reference Source regex implementation) to EXTRA_DIST
Jo Shields [Mon, 24 Nov 2014 09:51:35 +0000 (09:51 +0000)]
Fix case error causing build failure on case-sensitive filesystems
Zoltan Varga [Mon, 24 Nov 2014 07:15:28 +0000 (02:15 -0500)]
Remove net_2_0 reference from make dist.
Miguel de Icaza [Mon, 24 Nov 2014 04:16:39 +0000 (23:16 -0500)]
[System] Bring tests for open bugs on RegularExpressions that have now been fixed
Miguel de Icaza [Mon, 24 Nov 2014 02:39:53 +0000 (21:39 -0500)]
Add newline
Miguel de Icaza [Mon, 24 Nov 2014 02:37:26 +0000 (21:37 -0500)]
[System] Bring .NET implementation of System.Text.RegularExpressions
This patch brings .NET's implementation of the RegularExpressions
stack and brings some of the supporting infrastructure required to
build without resource files.
The build commands have been updated with two new defines to assist in
bringing .NET code: MONO (to indicate that the code is being compiled
as part of Mono) and a more granular DISABLE_CAS_USE that is used to
mark regions where Code Access Security is being used in the source
code, as Mono does not actually ship with a working CAS implementation.
Zoltan Varga [Mon, 24 Nov 2014 02:17:49 +0000 (21:17 -0500)]
[jit] Move the SHARED_EXT define to mono-dl.h, rename it to MONO_SOLIB_EXT.
Zoltan Varga [Mon, 24 Nov 2014 01:49:10 +0000 (20:49 -0500)]
[runtime] Remove conditional logic from LL_SO_OPEN() macro.
Zoltan Varga [Thu, 20 Nov 2014 17:53:39 +0000 (12:53 -0500)]
Fix the mcs-compileall test target.
Zoltan Varga [Thu, 20 Nov 2014 09:34:07 +0000 (04:34 -0500)]
Remove net 2.0 dependencies from mcs tests.
Zoltan Varga [Thu, 20 Nov 2014 09:18:02 +0000 (04:18 -0500)]
Remove build system support for the net 2.0/3.5 profiles.
Zoltan Varga [Sun, 23 Nov 2014 07:31:23 +0000 (02:31 -0500)]
Revert "[android] Add a workaround for ndk r10c defining RTLD_DEFAULT as 0 on 64 bit platforms."
This reverts commit
5ee92ecb768b73263f258a0d0fa1c8c676d12f88.
Revert this. There was already some android specific code in LL_SO_OPEN ().
Alexander Köplinger [Sun, 23 Nov 2014 02:14:25 +0000 (03:14 +0100)]
Remove --enable-nunit-tests option from build system
It isn't used anymore as the classlib tests are always enabled now during 'make check'.
Alexander Köplinger [Sat, 22 Nov 2014 14:41:37 +0000 (15:41 +0100)]
Added missing newline to net_4_0_System.Core.dll.sources (fixes Linux build)