Commit Graph

467 Commits

Author SHA1 Message Date
Matthew Parkinson
cae3317964 Update to use clangformat9
With clangformat9 the AfterCaseLabel is introduced.
And this defaults to false, but our code is formatted
implicitly with this set to true.

PRs to Verona and Snmalloc are being formatted with clangformat9,
and this is causing complexity. Let's move forward to clangformat9
in CI.
2020-02-06 09:09:32 +00:00
Matthew Parkinson
1d72024a9f Merge pull request #124 from microsoft/alignment
Make Large allocations naturally aligned
2020-02-05 14:40:13 +00:00
Matthew Parkinson
de64a8c0c2 CF and Add checks to CI. 2020-02-05 13:41:49 +00:00
Matthew Parkinson
28658a47f0 Code review feedback. 2020-02-05 12:47:24 +00:00
Matthew Parkinson
f2c22ceed6 Merge pull request #123 from microsoft/low-memory-fix
Issue with low-memory notification
2020-02-04 15:09:32 +00:00
Matthew Parkinson
02427f98f0 Clangformat. 2020-02-04 14:12:28 +00:00
Matthew Parkinson
9d6bf750f7 Clang format. 2020-02-04 13:22:56 +00:00
Matthew Parkinson
5d85c203c3 Fixes to test for CI. 2020-02-04 13:22:56 +00:00
Matthew Parkinson
a0e6c66af0 Remove test from 32bit Windows
Windows is only sending low-memory notifications when the machine
is reaching low-memory. So running a 32bit process on 64bit machine
can easily exhaust address space before machine gets close to
low-memory.
2020-02-04 13:22:55 +00:00
Matthew Parkinson
9e1c12636c Issue with low-memory notification
The low-memory notification was getting into an infinite loop.  This
fixes the loop termination, and provides a test for platforms which
support low-memory notification.
2020-02-04 13:22:55 +00:00
Matthew Parkinson
bad94e80d3 Clangformat 2020-02-04 10:24:57 +00:00
Matthew Parkinson
4b175fceeb Make Posix platforms check Commit in Debug
By turning page access on and off, we can simulate the Windows
Commit/Decommit states on Posix platforms.

This is just enabled in Debug for now.
2020-02-04 10:19:23 +00:00
Matthew Parkinson
350df5d13d New strategy for producing aligned blocks of memory
On platforms that do not support aligned mmap/VirtualAlloc,
we need to produce heavily aligned blocks to guarantee we can meet
all possible alignment requests.

This commit grabs a block much larger than requested, and then produces
"offcuts" before and after the block of smaller/same "large_classes".  This
enables one mmap/virtual alloc request to services many other requests
for aligned memory.
2020-02-04 10:19:22 +00:00
Matthew Parkinson
4fea7b8bb1 Make Pals only return amount of memory requested
The PAL API previously allowed for returning more memory than asked for.
This was when the PAL performed the alignment work, now this is done in
large alloc, so removing from the PAL.
2020-02-04 10:19:22 +00:00
Matthew Parkinson
6e8edefc99 Make all large allocations naturally aligned
This makes any large allocation naturally aligned to its size. This
means all alignment requests can be handled without checks.
2020-02-04 10:19:22 +00:00
David Chisnall
a90c060708 Merge pull request #120 from microsoft/decommit_perf
Improvements to Decommit Strategies
2020-02-04 01:41:04 -08:00
Matthew Parkinson
afc77d9a0a Some improvements to CI (#121)
* Removing option as not supported by CI

Will migrate CI forward and readd.

* Made failure for clang-format errors.

* Improved handling of errors during CI.

* Prevent failures escaping.

* Clang-format fix

* Remove stderr

* Update azure-pipelines.yml

Co-Authored-By: Paul Liétar <plietar@users.noreply.github.com>

Co-authored-by: Paul Liétar <plietar@users.noreply.github.com>
2020-02-03 21:01:06 +00:00
Paul Liétar
7e22d302ad Don't use our own loop to find clang-format
find_program can do that for us. Additionally that loop was resetting
the CLANG_FORMAT every time ninja was run, making it impossible to
pass a specific -DCLANG_FORMAT=... to cmake.

I've tried version 6 to 8 and formatting remains stable. clang 9 is
when it breaks down because of AfterCaseLabel.
2020-01-31 08:04:36 +00:00
Matthew Parkinson
053b5a30ef Minor code tidying. 2020-01-29 16:37:46 +00:00
Matthew Parkinson
2e289573c8 Move all decommit strategy into LargeAllocator
The code for decommit was distribured in the code base.
Removing Decommit All means that it can logically reside in
lthe arge allocator.
2020-01-29 12:29:32 +00:00
Matthew Parkinson
2e4b289991 Removed DecommitAll strategy
The DecommitAll strategy performs badly.  We are not
functionally testing it, and it does not seem investing in it due to its
performance.
2020-01-29 11:58:57 +00:00
Matthew Parkinson
a2b56f9740 Remove a notify_using that regressed perf
The performance on Windows was significantly regressed by the
notify_using during the bump allocation.  This change removes that.
It appears that the pages are already committed by
the large allocator.
2020-01-29 11:25:13 +00:00
Matthew Parkinson
0affc069cf Make snmalloc build on Windows with Clang
Fixes a few places where Clang complains about Windows specific code,
and also uses macros supported by Clang on Windows.  A few places
separating platform and compiler specific code, as MSVC and WIN32 were
used interchangably previously.
2020-01-26 19:46:18 +00:00
Theo Butler
eaeb2aa53d clang-format: Add break after case label 2020-01-24 15:30:46 +00:00
SchrodingerZhu
8304dedd17 add rust support (#113)
* add rust support

* move aligned_size to sizeclass.h

* add static qualifier

* adjust CMakeLists.txt, may broke CI tests

* fix msvc's complaining on c++17

* use SNMALLOC_FAST_PATH as the decorator of aligned_size

* adapt new alignment algorithm and add related test

Co-authored-by: mjp41 <mattpark@microsoft.com>

* fix test cases for msvc

* add extra test for size == 0

* treat memory block of same sizeclass as the same

* fix formatting problem

* remove extra declarations

Co-authored-by: Matthew Parkinson <mjp41@users.noreply.github.com>
2020-01-23 07:08:18 +00:00
Matthew Parkinson
4212ac8e4e Improve codegen for sized free. (#115)
For languages like Verona or Rust, the deallocation calls know the
size of the object originally requested.  This change optimises that
code path to create a much better fast path.
2020-01-22 17:41:08 +00:00
Matthew Parkinson
dbfb645732 Merge pull request #112 from microsoft/plietar-patch-1
Remove upper case letter from middle of sentence
2020-01-14 07:06:13 +00:00
Paul Liétar
bb33406fe2 Remove upper case letter from middle of sentence 2020-01-14 02:23:23 +00:00
Matthew Parkinson
49667c9893 Merge pull request #111 from microsoft/align
Small refactoring of code for finding a sizeclass for an alignment
2020-01-10 07:11:08 +00:00
Matthew Parkinson
5786ecc3cf Made aligned_alloc produce aligned values.
Previous implementation of aligned_alloc met the specification, but was
not particularly useful.  This uses the same implementation for
alligned_alloc and memalign.
2020-01-09 16:54:50 +00:00
Matthew Parkinson
1fd4ddd23e Factor alignment code, so it can be reused. 2020-01-09 16:54:50 +00:00
Matthew Parkinson
e8e0f60ccf Fix GCC 9 error. 2020-01-07 11:06:12 +00:00
Matthew Parkinson
19e8518bbe Merge pull request #107 from CTSRD-CHERI/upstream-aal-features
Introduce AAL feature flags
2019-12-07 08:24:36 +00:00
Nathaniel Filardo
2fa60c719f POISON only integer pointers
For architectures that can't manipulate pointers like integers, don't
try XORing them like this.  It's not ideal -- perhaps we should have
"else" branches to these tests.
2019-12-05 11:19:48 +00:00
Nathaniel Filardo
0d6f708166 AAL: feature flags 2019-12-05 11:19:48 +00:00
Nathaniel Filardo
ef40f1cf1d Replace "AAL" type with "Aal" to parallel "Pal" 2019-12-04 16:56:28 +00:00
Nathaniel Filardo
4d6759aca4 Make "pal_supports" not a function
But rather a template vardecl, as per C++14
2019-12-04 16:54:41 +00:00
Matthew Parkinson
2567e8e4f3 Merge pull request #106 from devnexen/atomic_swap_16_build_fix
atomic swap 16 flag missing fix.
2019-11-28 10:28:46 +00:00
David Carlier
9da3261a22 atomic swap 16 flag missing fix.
In some platforms, it is rather amd64 than the more common x86_64,
thus missing to rightfully set this flag.
2019-11-28 09:30:43 +00:00
Matthew Parkinson
7f465f9a5d Merge pull request #104 from CTSRD-CHERI/for-upstream-cheri-prep
Further CHERI prep
2019-11-27 13:52:46 +00:00
Nathaniel Filardo
7afc6da566 pagemap: cast to size_t then do bit manip
Makes the CHERI compiler happier
2019-11-27 10:17:31 +00:00
Nathaniel Filardo
5ae8ecedee metaslab: further use of pointer align funcs 2019-11-27 10:17:31 +00:00
Nathaniel Filardo
f8115a81b1 pagemap: cast uintptr_t to size_t before bit math
Not strictly necessary, but makes the CHERI compiler happier to see that
we're using a decidedly integral type rather than a possibly tagged
quantity.
2019-11-27 10:17:31 +00:00
Nathaniel Filardo
d13d810b66 Explicitly compute the size of two pointers
Don't use bits::is64() when setting MIN_ALLOC_BITS
2019-11-27 10:17:31 +00:00
Matthew Parkinson
f70191fb1e Merge pull request #103 from CTSRD-CHERI/for-upstream-cheri-prep-tidy
CHERI prep work that's just tidying
2019-11-26 16:42:03 +00:00
Nathaniel Filardo
997ebc5065 ds/aba: rename ::load to ::ptr
`load` does not load (`read` and `compare_exchange` do) so give it a
different name.  For the cases where `ptr` was previously the pointer we
were guarding, rename it to `raw`.
2019-11-26 15:50:22 +00:00
Nathaniel Filardo
c7d509e418 test/func/malloc: align check as size_t
If the test happens as uintptr_t on CHERI, then we attempt to construct
a capability and use a capability-based test rather than an
integer-based one, and things go south.
2019-11-26 15:50:22 +00:00
Nathaniel Filardo
0b47145526 test/func/malloc: posix_memalign vs. size_t
posix_memalign requires that the alignment parameter be a multiple of
sizeof(uintptr_t), but the test begins with alignments as small as
sizeof(size_t).  While those are very likely the same value out in the
wild right now, they're not on CHERI.

Begin the test loop at sizeof(uintptr_t) and add a test that a request
for a reasonable amount of memory but with an alignment of
sizeof(uintptr_t)/2 fails with EINVAL.
2019-11-26 15:50:22 +00:00
Nathaniel Filardo
44f80c00fc pal_open_enclave: use pointers, not uintptr_t 2019-11-26 15:50:22 +00:00
Nathaniel Filardo
263d735d0c ds/address: add dynamic pointer_align_up 2019-11-26 15:50:22 +00:00