Commit Graph

1521 Commits

Author SHA1 Message Date
Evan Tschannen 1f6c6a886b Merge branch 'release-5.1' into release-5.2 2018-05-08 13:08:11 -07:00
A.J. Beamon 56f705682f
Merge pull request #325 from alecgrieser/fix-typos-and-formattign
Fix typos and formatting errors
2018-05-08 12:02:40 -07:00
A.J. Beamon 011a2c3977
Merge pull request #336 from etschannen/release-5.1
re-added dev_null option as deprecated
2018-05-08 12:01:36 -07:00
Evan Tschannen 24a8c104b4 re-added dev_null option as deprecated to prevent breaking client code which may have called the option. 2018-05-08 11:59:31 -07:00
Alex Miller 1b112fc2c2
Merge pull request #326 from AlvinMooreSr/release-5.1-tlsplugin
TLS Artifact Name Change
2018-05-07 23:25:23 -07:00
Alvin Moore 9aa94e87a3 Renamed the default TLS search plugin 2018-05-07 17:01:14 -07:00
Alvin Moore 05c1a887f2 Changed the name of the TLS artifact to fdb-libressl-plugin.so 2018-05-07 16:47:46 -07:00
Alec Grieser 752deb07a1
fix fdbmonitor help message output ; fix spelling error Ratekeeper.actor.cpp 2018-05-07 16:19:50 -07:00
Evan Tschannen 2e41cea6dc
Merge pull request #303 from ajbeamon/read-bytes-and-keys-in-status
Add read bytes and read keys info to status.
2018-05-04 13:18:39 -07:00
A.J. Beamon 432a295bc2 Add read bytes and read keys info to status. Collect this information directly from StorageMetrics rather than through ratekeeper. 2018-05-04 12:01:40 -07:00
Alec Grieser 2c9f49d713
Merge pull request #299 from ajbeamon/release-5.1
fdb_c test fixes
2018-05-04 09:33:30 -07:00
A.J. Beamon 6502d790b9 Remove extra call to create transaction. Cleanup created transactions. 2018-05-04 09:06:47 -07:00
A.J. Beamon d5f69ff596
Merge pull request #296 from apple/release-5.1
Merge Release 5.1 Into Release 5.2
2018-05-03 12:05:35 -07:00
Steve Atherton dadbc26929
Merge pull request #295 from yichic/abort-backup-get-tag
Abort backup get tag
2018-05-03 11:48:59 -07:00
Yichi Chiang c37b48308e Fix the way to get tagName 2018-05-03 11:11:44 -07:00
Alec Grieser 0cb5791e28
Merge pull request #293 from brownleej/fdb-c-download-fix
Fixes the links to download the client libraries in our documentation and packages.
2018-05-02 13:50:00 -07:00
John Brownlee 1739c82c1b Fixes the links to download the client libraries in our documentation and packages. 2018-05-01 16:10:51 -07:00
Steve Atherton e5320fa237
Merge pull request #292 from ajbeamon/printable-encode-backup-beginfile
Encode BeginFile TraceEvent detail with printable
2018-05-01 15:53:48 -07:00
Alec Grieser 8c47e0a086
Merge pull request #278 from vmg/vmg/tuple
bindings/go: Reduce memory allocations when packing tuples
2018-05-01 15:46:20 -07:00
Evan Tschannen 6aba95356e
Merge pull request #291 from yichic/abort-5.1-backup
Abort 5.1 backup for 5.2 upgrade
2018-05-01 15:36:02 -07:00
A.J. Beamon f848c68b73 TraceEvents in FileBackupAgent that include BeginFile should be encoding them with printable because of the possible inclusion of the null byte. This causes the detail to terminate prematurely. 2018-05-01 15:35:48 -07:00
Yichi Chiang 52cc592d5e Abort 5.1 backup for 5.2 upgrade 2018-05-01 14:49:14 -07:00
Alec Grieser 1eea57c5fa
Merge pull request #288 from ajbeamon/release-5.2
Add comment explaining synchronization behavior in high contention allocator
2018-05-01 11:15:14 -07:00
A.J. Beamon 060b655257
Add another line of description to synchronization comment. 2018-05-01 10:00:49 -07:00
Alec Grieser 90069f25f8
Merge pull request #289 from ajbeamon/release-5.1
cherry pick: Fix `undefined: e` in a code snippet
2018-05-01 09:58:49 -07:00
Hiroshi Saito 5ff2d73f84 Fix `undefined: e` in a code snippet 2018-05-01 09:34:51 -07:00
A.J. Beamon a8c083509c Add a note about why the high-contention allocator synchronizes on HighContentionAllocator.class rather than Transaction. 2018-05-01 09:31:40 -07:00
Vicent Marti a19af9921e bindings/go: Reduce memory allocations when packing tuples
Memory profiling a FoundationDB layer implemented in Go shows high
memory pressure and increased GC times when performing highly-concurrent
multi-key transactions on the database. Further digging displays that
the source of the memory pressure happens when packing the keys for the
transaction into byte slices: the most salient issue is that memory
during the packing process is allocated based on the number of elements
to pack and not on the total size of the resulting byte slice.

This commit attempts to reduce the amount of memory allocated when
calling `Tuple.Pack` for most (all?) usage patterns, both in number of
allocations and in total allocated size.

The following optimizations have been implemented:

- Remove `bytes.Buffer` usage in `encodeTuple`: the `Buffer` struct is
quite expensive for the key sizes we're looking to generate, both
allocation and performance-wise. A `packer` struct has been implemented
that builds the keys "naively" by using `append` on a slice. Slice
growth in Go is also amortized just like in `bytes.Buffer`.

- Do not use `bytes.Replace` in `encodeBytes`: this function is
particularly expensive because it always allocates a copy of the byte
slice, even when it doesn't contain nil bytes. Instead, the replacement
step has been implemented manually in `packer.putbytesNil`, where it can
perform the replacement optimally into the output byte slice without
allocating memory. By having this local function we also allow the
compiler to not duplicate any input `string`s when casting them to
`[]byte`; previously, a copy of every string to pack was always being
allocated because the compiler couldn't prove that `bytes.Replace`
wouldn't modify the slice.

- Use stack space in `encode[Float|Double|Int]`: all the numerical
packing functions were allocating huge amounts of memory because of the
usage of temporary `bytes.Buffer` objects and `binary.Write` calls. The
sizes for all the packed data are always known (either 4 or 8 bytes
depending on type), so the big endian packing can be performed directly
on the stack with `binary.BigEndian.PutUint[32|64]`, which doesn't
require the `interface{}` conversion for the `binary.Write` API and in
x64 compiles to a `mov + bswap` instruction pair.

As a result of these optimizations, the "average" case of key packing
can now create a key with a single allocation.  More complex key packing
operations, even those that contain strings/byte slices with nil bytes,
now allocate memory in a constant way (i.e. amortized based on the
amount of growth of the output buffer and not the number of Tuple
elements to pack).

Additionally, the reduction of memory allocations and the better usage
of the `binary` APIs produce a very significant reduction in runtime for
key packing: between 2x and 6x faster for all packing operations.

Before/after benchmarks are as follows:

benchmark                                  old ns/op     new ns/op     delta
BenchmarkTuplePacking/Simple-4             310           76.4          -75.35%
BenchmarkTuplePacking/Namespaces-4         495           137           -72.32%
BenchmarkTuplePacking/ManyStrings-4        960           255           -73.44%
BenchmarkTuplePacking/ManyStringsNil-4     1090          392           -64.04%
BenchmarkTuplePacking/ManyBytes-4          1409          399           -71.68%
BenchmarkTuplePacking/ManyBytesNil-4       1364          533           -60.92%
BenchmarkTuplePacking/LargeBytes-4         319           107           -66.46%
BenchmarkTuplePacking/LargeBytesNil-4      638           306           -52.04%
BenchmarkTuplePacking/Integers-4           2764          455           -83.54%
BenchmarkTuplePacking/Floats-4             3478          482           -86.14%
BenchmarkTuplePacking/Doubles-4            3654          575           -84.26%
BenchmarkTuplePacking/UUIDs-4              366           211           -42.35%

benchmark                                  old allocs     new allocs     delta
BenchmarkTuplePacking/Simple-4             6              1              -83.33%
BenchmarkTuplePacking/Namespaces-4         11             1              -90.91%
BenchmarkTuplePacking/ManyStrings-4        18             2              -88.89%
BenchmarkTuplePacking/ManyStringsNil-4     18             2              -88.89%
BenchmarkTuplePacking/ManyBytes-4          23             3              -86.96%
BenchmarkTuplePacking/ManyBytesNil-4       22             2              -90.91%
BenchmarkTuplePacking/LargeBytes-4         3              2              -33.33%
BenchmarkTuplePacking/LargeBytesNil-4      3              2              -33.33%
BenchmarkTuplePacking/Integers-4           63             3              -95.24%
BenchmarkTuplePacking/Floats-4             62             2              -96.77%
BenchmarkTuplePacking/Doubles-4            63             3              -95.24%
BenchmarkTuplePacking/UUIDs-4              2              2              +0.00%

benchmark                                  old bytes     new bytes     delta
BenchmarkTuplePacking/Simple-4             272           64            -76.47%
BenchmarkTuplePacking/Namespaces-4         208           64            -69.23%
BenchmarkTuplePacking/ManyStrings-4        512           192           -62.50%
BenchmarkTuplePacking/ManyStringsNil-4     512           192           -62.50%
BenchmarkTuplePacking/ManyBytes-4          864           448           -48.15%
BenchmarkTuplePacking/ManyBytesNil-4       336           192           -42.86%
BenchmarkTuplePacking/LargeBytes-4         400           192           -52.00%
BenchmarkTuplePacking/LargeBytesNil-4      400           192           -52.00%
BenchmarkTuplePacking/Integers-4           3104          448           -85.57%
BenchmarkTuplePacking/Floats-4             2656          192           -92.77%
BenchmarkTuplePacking/Doubles-4            3104          448           -85.57%
BenchmarkTuplePacking/UUIDs-4              256           192           -25.00%
2018-05-01 10:52:08 +02:00
Vicent Marti 5bab1e8e4e bindings/go: Add tuple packing tests and benchmark
Although the Go bindings to FoundationDB are thoroughly tested as part
of the `bindingtester` operation, this commit implements a more-or-less
complete test case using golden files for the serialized output of
`Tuple.Pack` operations. This will make implementing optimizations and
refactoring the packing operation much simpler.

The same test cases used to verify correctness are also used as a
benchmark suite to measure the amount of memory allocated in the
different operations.
2018-05-01 10:51:57 +02:00
Alec Grieser 8c8e6f86f5
Merge pull request #283 from ajbeamon/release-5.1
(cherry picked from master) java binding: remove unnecessary collection wrapper
2018-04-30 10:10:54 -07:00
Iuri Sitinschi d52f8eb255 java binding: remove unnecessary collection wrapper 2018-04-30 10:05:53 -07:00
Evan Tschannen 18f345487e
Merge pull request #272 from alecgrieser/merge-release-5.1
Merge release 5.1 into release 5.2
2018-04-27 22:38:17 -07:00
Alex Miller 6008fbb39a
Merge pull request #271 from AlvinMooreSr/release-5.1-buildtls
Added target for building TLS plugin
2018-04-27 17:43:56 -07:00
Alec Grieser a1faaafca3
Merge remote-tracking branch 'upstream/release-5.1' into merge-release-5.1 2018-04-27 16:38:18 -07:00
Alec Grieser 5fbfd1eb39
Merge pull request #261 from etschannen/release-5.1
removed binding tester references to dev_null_is_web_scale
2018-04-27 16:36:40 -07:00
Evan Tschannen 9fb31b3e47 updated generated.go 2018-04-27 16:33:57 -07:00
Evan Tschannen 434d896627 removed dev null is web scale from flow tester 2018-04-27 16:14:26 -07:00
Evan Tschannen 9060e6d82b merged in 5.1 2018-04-27 16:13:35 -07:00
Evan Tschannen 0c6ceac762
Merge pull request #265 from yichic/upgrade-dr-to-5.2
Upgrade DR from 5.1 to 5.2
2018-04-27 13:58:01 -07:00
Yichi Chiang c721ab6854 Fix review comments 2018-04-27 13:54:34 -07:00
Alvin Moore f023db182c Added target for building TLS plugin
Added TLS target to packages target
2018-04-27 13:44:51 -07:00
John Brownlee b2c7290b1e
Merge pull request #270 from alecgrieser/cherrypick-docs-and-formatting-fixes
Cherrypick updates to class scheduling tutorial
2018-04-27 13:01:43 -07:00
Steve M 6a8f1ae2c1
Fixups for python tutorial documentation
The available_classes function is using Subspace.unpack to
obtain the tuple, not fdb.tuple so update the description to
reflect this.

The limited seat tutorial section was missing the code and
text describing the update of the drop function.
2018-04-27 12:54:35 -07:00
Steve Malmskog b1440e5a70
Remove redundant drop function doc section
Drop function description was moved up adjacent to the other
functions to provide better document flow making this section
redundant, hence its removal.
2018-04-27 12:52:33 -07:00
Alec Grieser 61666fc5b0
Merge pull request #269 from brownleej/docs-footer-update
Cherry-pick a docs change onto release-5.1
2018-04-27 12:27:32 -07:00
Dave Lester caee57b50c Updates documentation config / theme footer to reflect project copyright information. 2018-04-27 12:24:52 -07:00
Evan Tschannen d2a684363b remove more dev null is web scale options in the binding testers 2018-04-27 12:22:38 -07:00
John Brownlee 816cceae09
Merge pull request #257 from alecgrieser/cherrypick-docs-and-go-install-fixes
Cherrypick docs and go install fixes
2018-04-27 11:11:54 -07:00
Yichi Chiang 6bddf8aefa Upgrade DR from 5.1 to 5.2 2018-04-26 17:24:40 -07:00
Alec Grieser 117c28287b
Merge pull request #263 from alexmiller-apple/bindings-build-fixes-5.1
Fix "std::istream::ignore(long)" linking errors for bindings
2018-04-26 16:20:16 -07:00