You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by cl...@apache.org on 2017/03/16 14:24:35 UTC
[1/2] activemq-artemis git commit: ARTEMIS-1037 Doc for the MAPPED
journalType
Repository: activemq-artemis
Updated Branches:
refs/heads/master dca124f9a -> 4936291ae
ARTEMIS-1037 Doc for the MAPPED journalType
Project: http://git-wip-us.apache.org/repos/asf/activemq-artemis/repo
Commit: http://git-wip-us.apache.org/repos/asf/activemq-artemis/commit/14d07ba7
Tree: http://git-wip-us.apache.org/repos/asf/activemq-artemis/tree/14d07ba7
Diff: http://git-wip-us.apache.org/repos/asf/activemq-artemis/diff/14d07ba7
Branch: refs/heads/master
Commit: 14d07ba7d14b0b50ad056d85e97ece173a966f75
Parents: dca124f
Author: Francesco Nigro <ni...@gmail.com>
Authored: Tue Mar 14 13:09:21 2017 +0100
Committer: Clebert Suconic <cl...@apache.org>
Committed: Thu Mar 16 10:24:26 2017 -0400
----------------------------------------------------------------------
docs/user-manual/en/configuration-index.md | 4 +--
docs/user-manual/en/perf-tuning.md | 5 ++++
docs/user-manual/en/persistence.md | 35 ++++++++++++++++++++++++-
3 files changed, 41 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/14d07ba7/docs/user-manual/en/configuration-index.md
----------------------------------------------------------------------
diff --git a/docs/user-manual/en/configuration-index.md b/docs/user-manual/en/configuration-index.md
index 955c87b..d66b8b0 100644
--- a/docs/user-manual/en/configuration-index.md
+++ b/docs/user-manual/en/configuration-index.md
@@ -74,13 +74,13 @@ Name | Description
[journal-compact-percentage](persistence.md) | The percentage of live data on which we consider compacting the journal. Default=30
[journal-directory](persistence.md) | the directory to store the journal files in. Default=data/journal
[journal-file-size](persistence.md) | the size (in bytes) of each journal file. Default=10485760 (10 MB)
-[journal-max-io](persistence.md#configuring.message.journal.journal-max-io) | the maximum number of write requests that can be in the AIO queue at any one time. Default is 500 for AIO and 1 for NIO.
+[journal-max-io](persistence.md#configuring.message.journal.journal-max-io) | the maximum number of write requests that can be in the AIO queue at any one time. Default is 500 for AIO and 1 for NIO, ignored for MAPPED.
[journal-min-files](persistence.md#configuring.message.journal.journal-min-files) | how many journal files to pre-create. Default=2
[journal-pool-files](persistence.md#configuring.message.journal.journal-pool-files) | The upper theshold of the journal file pool,-1 (default) means no Limit. The system will create as many files as needed however when reclaiming files it will shrink back to the `journal-pool-files`
[journal-sync-non-transactional](persistence.md) | if true wait for non transaction data to be synced to the journal before returning response to client. Default=true
[journal-sync-transactional](persistence.md) | if true wait for transaction data to be synchronized to the journal before returning response to client. Default=true
[journal-type](persistence.md) | the type of journal to use. Default=ASYNCIO
-[journal-datasync](persistence.md) | It will use fsync on journal operations. Default=true.
+[journal-datasync](persistence.md) | It will use msync/fsync on journal operations. Default=true.
[large-messages-directory](large-messages.md "Configuring the server") | the directory to store large messages. Default=data/largemessages
[management-address](management.md "Configuring Core Management") | the name of the management address to send management messages to. It is prefixed with "jms.queue" so that JMS clients can send messages to it. Default=jms.queue.activemq.management
[management-notification-address](management.md "Configuring The Core Management Notification Address") | the name of the address that consumers bind to receive management notifications. Default=activemq.notifications
http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/14d07ba7/docs/user-manual/en/perf-tuning.md
----------------------------------------------------------------------
diff --git a/docs/user-manual/en/perf-tuning.md b/docs/user-manual/en/perf-tuning.md
index e5266f6..e05578d 100644
--- a/docs/user-manual/en/perf-tuning.md
+++ b/docs/user-manual/en/perf-tuning.md
@@ -47,6 +47,11 @@ performance.
- If you're running AIO you might be able to get some better
performance by increasing `journal-max-io`. DO NOT change this
parameter if you are running NIO.
+
+- If you are 100% sure you don't need power failure durability guarantees,
+ disable `journal-data-sync` and use `NIO` or `MAPPED` journal:
+ you'll benefit a huge performance boost on writes
+ with process failure durability guarantees.
## Tuning JMS
http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/14d07ba7/docs/user-manual/en/persistence.md
----------------------------------------------------------------------
diff --git a/docs/user-manual/en/persistence.md b/docs/user-manual/en/persistence.md
index 50d9dc9..323f458 100644
--- a/docs/user-manual/en/persistence.md
+++ b/docs/user-manual/en/persistence.md
@@ -74,6 +74,22 @@ implementations. Apache ActiveMQ Artemis ships with two implementations:
For more information on libaio please see [lib AIO](libaio.md).
libaio is part of the kernel project.
+
+- [Memory mapped](https://en.wikipedia.org/wiki/Memory-mapped_file).
+
+ The third implementation uses a file-backed [READ_WRITE](https://docs.oracle.com/javase/6/docs/api/java/nio/channels/FileChannel.MapMode.html#READ_WRITE)
+ memory mapping against the OS page cache to interface with the file system.
+
+ This provides extremely good performance (especially under strictly process failure durability requirements),
+ almost zero copy (actually *is* the kernel page cache) and zero garbage (from the Java HEAP perspective) operations and runs
+ on any platform where there's a Java 4+ runtime.
+
+ Under power failure durability requirements it will perform at least on par with the NIO journal with the only
+ exception of Linux OS with kernel less or equals 2.6, in which the [*msync*](https://docs.oracle.com/javase/6/docs/api/java/nio/MappedByteBuffer.html#force()) implementation necessary to ensure
+ durable writes was different (and slower) from the [*fsync*](https://docs.oracle.com/javase/6/docs/api/java/nio/channels/FileChannel.html#force(boolean)) used is case of NIO journal.
+
+ It benefits by the configuration of OS [huge pages](https://en.wikipedia.org/wiki/Page_(computer_memory)#Huge_pages),
+ in particular when is used a big number of journal files and sizing them as multiple of the OS page size in bytes.
The standard Apache ActiveMQ Artemis core server uses two instances of the journal:
@@ -180,12 +196,13 @@ The message journal is configured using the following attributes in
- `journal-type`
- Valid values are `NIO` or `ASYNCIO`.
+ Valid values are `NIO`, `ASYNCIO` or `MAPPED`.
Choosing `NIO` chooses the Java NIO journal. Choosing `ASYNCIO` chooses
the Linux asynchronous IO journal. If you choose `ASYNCIO` but are not
running Linux or you do not have libaio installed then Apache ActiveMQ Artemis will
detect this and automatically fall back to using `NIO`.
+ Choosing `MAPPED` chooses the Java Memory Mapped journal.
- `journal-sync-transactional`
@@ -302,6 +319,22 @@ The message journal is configured using the following attributes in
- `journal-datasync` (default: true)
This will disable the use of fdatasync on journal writes.
+ When enabled it ensures full power failure durability, otherwise
+ process failure durability on journal writes (OS guaranteed).
+ This is particular effective for `NIO` and `MAPPED` journals, which rely on
+ *fsync*/*msync* to force write changes to disk.
+
+### An important note on disabling `journal-datasync`.
+
+> Any modern OS guarantees that on process failures (i.e. crash) all the uncommitted changes
+> to the page cache will be flushed to the file system, maintaining coherence between
+> subsequent operations against the same pages and ensuring that no data will be lost.
+> The predictability of the timing of such flushes, in case of a disabled *journal-datasync*,
+> depends on the OS configuration, but without compromising (or relaxing) the process
+> failure durability semantics as described above.
+> Rely on the OS page cache sacrifice the power failure protection, while increasing the
+> effectiveness of the journal operations, capable of exploiting
+> the read caching and write combining features provided by the OS's kernel page cache subsystem.
### An important note on disabling disk write cache.
[2/2] activemq-artemis git commit: This closes #1097
Posted by cl...@apache.org.
This closes #1097
Project: http://git-wip-us.apache.org/repos/asf/activemq-artemis/repo
Commit: http://git-wip-us.apache.org/repos/asf/activemq-artemis/commit/4936291a
Tree: http://git-wip-us.apache.org/repos/asf/activemq-artemis/tree/4936291a
Diff: http://git-wip-us.apache.org/repos/asf/activemq-artemis/diff/4936291a
Branch: refs/heads/master
Commit: 4936291aec85c018c0edc260fe23862a7dec967b
Parents: dca124f 14d07ba
Author: Clebert Suconic <cl...@apache.org>
Authored: Thu Mar 16 10:24:27 2017 -0400
Committer: Clebert Suconic <cl...@apache.org>
Committed: Thu Mar 16 10:24:27 2017 -0400
----------------------------------------------------------------------
docs/user-manual/en/configuration-index.md | 4 +--
docs/user-manual/en/perf-tuning.md | 5 ++++
docs/user-manual/en/persistence.md | 35 ++++++++++++++++++++++++-
3 files changed, 41 insertions(+), 3 deletions(-)
----------------------------------------------------------------------