Commit Graph

204 Commits

Author SHA1 Message Date
Matthew Flatt
5c45588573 cs: provide hint to GC about places
The collector tries to use roughly the same amount of parallelism as
the number of active threads, but make sure that it doesn't fall back
to an ownership-mangling non-parallel collection if all but one place
happens to be stalled.
2020-10-12 19:24:24 -06:00
Matthew Flatt
3566536cfe cs: more OpenIndiana repairs 2020-10-12 09:17:47 -06:00
Matthew Flatt
f1f4959b66 Chez Scheme: separate allocation and thread mutexes
Instead of one big lock, have one big lock and one small lock for just
manipulating allocation state. This separation better reflects the
locking needs of parallel collection, where the main collecting thread
holds the one big lock, and helper threads need to take a different
lock while changing allocation state.

This commit also includes changes to cooperate better with LLVM's
thread sanitizer. It doesn't work for parallel collection, but it
seems to work otherwise and helped expose a missing lock and a
questionable use of a global variable.
2020-10-09 17:45:48 -06:00
Matthew Flatt
c34b28a214 sync pb with Chez Scheme changes 2020-10-08 07:43:09 -06:00
Matthew Flatt
0fe8d2aeec makefile: fix PB_REPO propoagation 2020-10-05 11:19:29 -06:00
Matthew Flatt
19fc04ae0e makefiles: clean out unused Git submodule targets and hooks 2020-10-02 11:17:34 -06:00
Matthew Flatt
075048409b bump version 2020-09-27 15:36:40 -06:00
Matthew Flatt
16d71ac249 Chez Scheme GC: refactor thread and allocation organization
Move per-thread allocation information to a separate object, so the
needs of the collector are better separated from the thread
representation. This refactoring sets up a change in the collector to
detangle sweeper threads from Scheme threads.
2020-09-27 15:36:40 -06:00
Matthew Flatt
c46e4f91c1 Chez Scheme GC: internal parallelism by messages instead of locks
Change the internal parallelism strategy for the GC to record an owner
for each allocated segment of memory, and have the owner be solely
responsible for copying or marking objects of the segment. When
sweeping, a collecting thread handles references to objects that it
owns or that have been copied or marked already, and it asks another
collecting thread to resweep an object that refers to objects owned by
that that thread. At worst, an object ends up being swept by all
collecting threads, one at a time, but that's unlikely for a given
object.

The approach seems likely to scale better than a lock-based approach,
even the one that used a lightweight, CAS-based lock and retries on
lock failure.
2020-09-27 15:36:40 -06:00
Matthew Flatt
fa3b0699d3 Chez Scheme: sync pb
Also, improve internal timing instrumentation for parallel GC.
2020-09-19 11:36:56 -06:00
Matthew Flatt
8305e5eaef Chez Scheme: parallel garbage collection
All allocation is now thread-local, which recovers a small bit of
performance that was lost when adding thread-local allocation
alongside global allocation.

Parallelism uses thread contexts created by Chez Scheme threads (which
correspond to Racket places and future-running threads), but it
creates its own OS-level threads to perform collection. The number of
collection-helper threads is limited to the number of active Chez
Scheme threads. Only the main "sweep" pass runs in parallel --- that
is, after roots have been traversed, and before weak references and
finalization are handled --- but that's the bulk of collection work.
Also, memory-accounting collections always run as single-threaded.
2020-09-15 07:40:13 -06:00
Matthew Flatt
78b7cc3fc9 cs: use thread-local allocation while sweeping in collector
This is a second step toward parallel collection.
2020-09-05 17:22:12 -06:00
Matthew Flatt
3f3cf5ab83 cs: more thread-local allocation
Improved support for thread-location allocation (and using more
fine-grained locks in fasl reading) may provide a small direct
benefit, but the change is mainly intended as setup for more
parallelism in the collector.
2020-09-05 08:47:07 -06:00
Matthew Flatt
5894550833 makefile: adjust pb fetch for older git clients
Use `git fetch -q origin $(PB_BRANCH):remotes/origin/$(PB_BRANCH)` to
make sure a `remotes` branch is added locally.
2020-08-15 07:46:11 -06:00
Matthew Flatt
9619205a9d cs: update Rumble layer for incremental promotion in GC 2020-08-14 17:43:54 -06:00
Matthew Flatt
983601f611 makefile: update for distro-build cooperation 2020-08-10 06:37:09 -06:00
Matthew Flatt
52ca857796 makefile: repair BC cross build 2020-08-06 16:52:56 -06:00
Matthew Flatt
744e69c0c1 add flsingle
The `flsingle` function takes a flonum and discards precision that
wouldn't fit in a single-flonum. If single-precision arithmetic is
somehow useful, then combine flonum operations with `flsingle` to
discard precision on the result; even on Racket BC, that's likely to
perform better than using generic arithmetic on single flonums.
2020-08-05 05:55:28 -06:00
Alexis King
6683e17fdc makefile: Add a PKG_UPDATE_OPTIONS config variable
This is analogous to PLT_SETUP_OPTIONS, but for the `raco pkg update`
step. This is useful for adding an option like `--pull try` to ignore
failures to update local clones.
2020-08-03 15:29:33 -05:00
Matthew Flatt
9b5dd35adc makefile: fix cross builds 2020-08-02 14:28:45 -06:00
Matthew Flatt
093fcd1bc7 makefile: make Racket CS the default
The top-level makefile now builds Racket CS as `racket` by default.

Use `racket bc` to build Racket BC as `racket`. Use `make both` to
build both CS and BC (the latter with the `bc` suffix) overlayed in a
single build. By using `make both` insted of `make cs` plus `make bc`,
you can avoid redundant package downloads and documentation rendering.

To build Racket BC as `racket`, use `racket bc RACKETBC_SUFFIX=`, but
you must consistently use `RACKETBC_SUFFIX=` with `make` every time.
2020-08-01 17:33:53 -06:00
Matthew Flatt
2ae4ee4163 makefiles: build Chez Scheme in the "build" area
Instead of leaving Chez Scheme build artifacts in in the ChezScheme
source directory, keep them in a "build" directory like everything
else.
2020-07-31 16:33:07 -06:00
Matthew Flatt
6886dc2143 make bc and cs configure scripts more symmetric
The `--enable-cs` and `--enable-csdefault` flags now enabled just the
CS build, as long as pb boot files are present or
`--enable-racket=...` is supplied.
2020-07-31 11:08:42 -06:00
Matthew Flatt
ed415a3795 move "racket/src/racket" -> "racket/src/bc"
Also, move "racket/src/gracket" and "racket/src/foreign" to
subdirectories of "racket/src/bc".
2020-07-31 06:40:26 -06:00
Matthew Flatt
cde197125c support Racket BC build and installation with a "bc" suffix 2020-07-30 20:14:34 -06:00
Matthew Flatt
1d9db6eec3 makefile: make bc and cs rules more symmetic
Currently, `make` is the same as `make bc`, but the idea is that
`make` can become the same as `make cs` when some other pieces are in
place.

The source of the top-level makefile is now ".makefile", and it's
turned into "Makefile" using "racket/src/makemake.rkt". The
transformation makes non-GNU `make` variants and `nmake` act like GNU
make to propagate variables, which makes abstraction through targets
plus variables (admitedly an abuse of `make`) more reliable and
consistent.

Why abuse `make` this way? Because `make` variants and `nmake` are
similar enough that to constitute a portable scripting language, and
one that conveniently provides a large number of entry points.
2020-07-30 13:29:02 -06:00
Matthew Flatt
7d7b8fb1e9 makefile: fix cs targets to not break non-cs targets 2020-07-29 13:37:39 -06:00
Matthew Flatt
7c256a051d replace "traditional Racket" references with "Racket BC" 2020-07-29 08:27:58 -06:00
Matthew Flatt
62a3f6ec91 change CS build to use a subtree Chez Scheme and a bootstrapped pb
Also, schemified "thread", "io", "regexp", "schemify", and "expander"
layers are checked in. Overall, building Racket CS no longer requires
first building Racket BC.
2020-07-28 12:56:42 -06:00
Matthew Flatt
efc95c2e19 remove "cs-bootstrap" package
The "cs-bootstrap" package is now in the `racket/ChezScheme` repo,
because it needs to track the Chez Scheme implementation instead of
the Racket implementation.
2020-07-25 16:32:05 -06:00
Matthew Flatt
e496805f82 makefile: add win32-also-cs, etc. 2020-06-02 08:28:10 -06:00
Matthew Flatt
6feb9c1095 makefile: add SERVER_URL_SCHEME to support https 2020-05-03 16:09:55 -06:00
Matthew Flatt
17a5711dbb makefile: fix addition of --disable-lib
When potentially adding the `--disable-lib` flag, don't drop existing
extra configure flags. Specifically, the `--enable-crossany` flag
from distro-build could get lost, which breaks a soutrce distribution
with built packages.
2020-05-03 09:40:36 -06:00
Matthew Flatt
ba59d87ac4 makefile: add an advice-giving clean target
Implementing a thorough `clean` target for a repo-based is tedious and
error-prone. Instead, make the `clean` target suggest `git clean -d -x
-f .`, which is more effective in most situations (but seems too
dangerous to run automatically).
2020-03-21 15:09:58 -06:00
Matthew Flatt
fab04633f3 makefile: add DISABLE_STATIC_LIBS 2020-03-07 14:24:50 -07:00
Matthew Flatt
e63433c4fd makefile: change INSTALLER_OPTIONS_q to INSTALLER_OPTIONS
Trying to support multiple command-line arguments doesn't work so
easily with nmake, so avoid that.
2020-02-15 08:54:56 -08:00
Matthew Flatt
6738c4e9e2 makefile: add INSTALLER_OPTIONS_q for installer-building options
This change makes it easier for `distro-build` to define new options
that get communicated from "site.rkt" to `distro-build/installer`.
2020-02-14 08:02:49 -08:00
Matthew Flatt
7eb0b8534d improve makefile's bundle target
Use `--no-user` for the `raco setup` that is supposed to finish a
bundle. Otherwise, things installed in user scope for the same Racket
version (i.e., the one being bundled) can interfere with the bundling
process.
2020-02-06 12:40:05 -07:00
Brian Wignall
738d2b7a81 Fix typos (#3005) 2020-01-14 11:49:23 +01:00
Matthew Flatt
16cbb5be30 makefile: add pre-processing step for distribution creation 2020-01-01 07:13:53 -07:00
Matthew Flatt
8ef11a9b06 makefile: use --recurse-submodules for initial ChezScheme checkout
Related to #2945
2019-12-27 05:12:05 -06:00
Brian Wignall
9474b1a1e8 Fix spelling typos 2019-11-28 07:51:39 -07:00
Reuben Thomas
7e3a8c9a3b In-place build: cope with default setting of prefix
configure scripts look for and read a local configuration file given by the
environment variable CONFIG_SITE. This can set variables such as prefix.

Racket’s build system was assuming that prefix would be set to NONE unless a
--prefix command line argument was given. But it could be set by a
CONFIG_SITE configuration file instead.

Hence, for in-place build add an explicit --disable-useprefix option, to
cause any prefix setting to be ignored, and use that in the top-level
Makefile.

Regenerate the configure scripts to get the updated code.
2019-11-18 18:25:37 +01:00
Matthew Flatt
1442c1860a makefile: avoid redundant CPUS parsing for some targets 2019-11-12 14:29:06 -07:00
Matthew Flatt
2a530b4c88 makefile: avoid git submodule update in cs-as-is 2019-06-22 08:01:12 -06:00
Matthew Flatt
85a9bdaaee unbreak Windows non-CS build 2019-06-12 07:32:51 -06:00
Matthew Flatt
e51c44fa3d Use 3m to build CS on Windows
The extra time to build 3m via CGC seems worth it, especially when
building Chez Scheme's boot files.
2019-06-11 20:01:41 -06:00
Matthew Flatt
a45115398c makefile: remove incorrect cross-build dependency 2019-05-25 07:36:06 -06:00
Matthew Flatt
a56c984db0 avoid incorrect unix-style inference
Closes #2659 by both recognizing `lib64` as a default path and by
having `--enable-origtree` override inference and specified when
running `configure` through the root makefile.
2019-05-18 07:56:02 -04:00
Matthew Flatt
59d5300f77 makefile: fix configure dependencies
Reconfigure if "cfg-racket" changes without "configure" changing.
2019-05-10 21:21:54 -06:00