You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mnemonic.apache.org by ga...@apache.org on 2017/07/08 16:49:08 UTC

[5/5] incubator-mnemonic-site git commit: MNEMONIC-295: Migrate the content of readme.md to site

MNEMONIC-295: Migrate the content of readme.md to site


Project: http://git-wip-us.apache.org/repos/asf/incubator-mnemonic-site/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-mnemonic-site/commit/bf616e05
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mnemonic-site/tree/bf616e05
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mnemonic-site/diff/bf616e05

Branch: refs/heads/master
Commit: bf616e05c3eef58e285146e7120551f8ddc6a68f
Parents: 5753892
Author: Wang, Gang(Gary) <ga...@intel.com>
Authored: Sat Jul 8 09:39:18 2017 -0700
Committer: Wang, Gang(Gary) <ga...@intel.com>
Committed: Sat Jul 8 09:47:33 2017 -0700

----------------------------------------------------------------------
 _config.yml              |   3 +
 src/_data/docs.yml       |  11 ++-
 src/_docs/arch.md        |   7 +-
 src/_docs/benchmark.md   |  18 +++++
 src/_docs/build.md       |  90 +++++++++++++++++++++
 src/_docs/codeusage.md   | 184 ++++++++++++++++++++++++++++++++++++++++++
 src/_docs/docker.md      |  77 ++++++++++++++++++
 src/_docs/features.md    |  24 ++++++
 src/_docs/gcdata.md      |   9 +++
 src/_docs/integration.md |  12 +++
 src/_docs/memsrvcmp.md   |  22 +++++
 src/_docs/modes.md       |   8 ++
 src/_docs/runtest.md     |  36 +++++++++
 src/css/screen.scss      |   4 +-
 src/img/archcmp.png      | Bin 0 -> 109555 bytes
 src/img/gcdata.png       | Bin 0 -> 24467 bytes
 src/img/modes.png        | Bin 0 -> 7469 bytes
 17 files changed, 501 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-mnemonic-site/blob/bf616e05/_config.yml
----------------------------------------------------------------------
diff --git a/_config.yml b/_config.yml
index 74f40f8..4ef5f03 100644
--- a/_config.yml
+++ b/_config.yml
@@ -10,6 +10,9 @@ exclude: [docker, BUILD.md, Gemfile*]
 keep_files: [.git]
 highlight_color: "#199acf"
 
+sass:
+  style: compressed
+
 collections:
   docs:
     output: true

http://git-wip-us.apache.org/repos/asf/incubator-mnemonic-site/blob/bf616e05/src/_data/docs.yml
----------------------------------------------------------------------
diff --git a/src/_data/docs.yml b/src/_data/docs.yml
index a647f23..f33b2a2 100644
--- a/src/_data/docs.yml
+++ b/src/_data/docs.yml
@@ -1,7 +1,16 @@
 - title: Overview
   docs:
   - arch
+  - features
+  - gcdata
+  - modes
+  - memsrvcmp
+  - integration
+
 
 - title: Usage
   docs:
-  - ui-usage
+  - build
+  - usage
+  - runtest
+  - docker

http://git-wip-us.apache.org/repos/asf/incubator-mnemonic-site/blob/bf616e05/src/_docs/arch.md
----------------------------------------------------------------------
diff --git a/src/_docs/arch.md b/src/_docs/arch.md
index 9b3687e..0b1f630 100644
--- a/src/_docs/arch.md
+++ b/src/_docs/arch.md
@@ -1,5 +1,10 @@
 ---
-layout: page
+layout: docs
 title: Mnemonic Architecture
 permalink: /docs/arch.html
 ---
+
+### Mnemonic
+
+![Mnemonic_Way](/img/archcmp.png)
+

http://git-wip-us.apache.org/repos/asf/incubator-mnemonic-site/blob/bf616e05/src/_docs/benchmark.md
----------------------------------------------------------------------
diff --git a/src/_docs/benchmark.md b/src/_docs/benchmark.md
new file mode 100644
index 0000000..af983a3
--- /dev/null
+++ b/src/_docs/benchmark.md
@@ -0,0 +1,18 @@
+---
+layout: docs
+title: Run Benchmark
+permalink: /docs/benchmark.html
+---
+
+
+### How to benchmark ?
+To run sort bench workloads.
+```bash
+  $ # generate some input data files with a count parameter that indicates how many random numbers to be generated
+  $ mnemonic-benches/mnemonic-sort-bench/bin/gen_data.py 20000
+  $ # create a configure file that contains all the absolute paths of generated input data files to work on in a batch
+  $ # call the run.py to run the bench workloads with the configure file
+  $ mnemonic-benches/mnemonic-sort-bench/bin/run.py ./sort-files.conf
+  $ # after finished, you can find the result data from the sort_bench_result.log
+  $ less mnemonic-benches/mnemonic-sort-bench/sort_bench_result.log
+```

http://git-wip-us.apache.org/repos/asf/incubator-mnemonic-site/blob/bf616e05/src/_docs/build.md
----------------------------------------------------------------------
diff --git a/src/_docs/build.md b/src/_docs/build.md
new file mode 100644
index 0000000..7c1b6b8
--- /dev/null
+++ b/src/_docs/build.md
@@ -0,0 +1,90 @@
+---
+layout: docs
+title: Project Build
+permalink: /docs/build.html
+---
+
+### How to build it ?
+
+Please see the file LICENSE for information on how this library is licensed.
+
+
+* **mnemonic-core** -- the submodule project for core
+* **mnemonic-collections** -- the submodule project for generic collections
+* **mnemonic-examples** -- the submodule project for examples, Please refer to the testcases of respective module as complete examples.
+* **mnemonic-memory-services/mnemonic-pmalloc-service** -- the submodule project for pmalloc memory service
+* **mnemonic-memory-services/mnemonic-nvml-vmem-service** -- the submodule project for vmem memory service
+* **mnemonic-memory-services/mnemonic-nvml-pmem-service** -- the submodule project for pmem memory service
+* **mnemonic-memory-services/mnemonic-sys-vmem-service** -- the submodule project for system vmem memory service
+* **mnemonic-memory-services/service-dist** -- the location of extensive memory services (auto-generated)
+* **mnemonic-computing-services/mnemonic-utilities-service** -- the submodule project for utilities computing service
+* **mnemonic-computing-services/service-dist** -- the location of extensive computing services (auto-generated)
+* **mnemonic-hadoop/mnemonic-hadoop-mapreduce** -- the submodule project for Apache Hadoop mapreduce computing
+* **mnemonic-spark/mnemonic-spark-core** -- the submodule project for Apache Spark durable computing
+
+To build this library, you may need to install some required packages on the build system:
+
+* **Maven** -- the building tool v3.2.1 or above [Required]
+* **NVML** -- the NVM library (Please compile this library that was revised with 630862e82f) (http://pmem.io) [Optional if mnemonic-nvml-vmem-service/mnemonic-nvml-pmem-service are excluded, e.g. on MacOSX]
+* **JDK** -- the Java Develop Kit 1.6 or above (please properly configure JAVA_HOME) [Required]
+* **PMFS** -- the PMFS should be properly installed and configured on Linux system if you want to simulate read latency [Optional]
+* **PMalloc** -- a supported durable memory native library(Latest) at https://github.com/NonVolatileComputing/pmalloc.git [Optional if mnemonic-pmalloc-service is excluded]
+
+
+Once the build system is setup, this Library is built using this command at the top level:
+```bash
+  $ git clean -xdf # if pull from a git repo.
+  $ mvn clean package install
+```
+
+
+To exclude a customized memory service for your platform e.g. OSX, note that if you excluded one or both memory services, some or all testcases/examples will fail since their dependent memory services are unavailable.
+```bash
+  $ git clean -xdf # if pull from a git repo.
+  $ mvn -pl '!mnemonic-memory-services/mnemonic-nvml-vmem-service' clean package install
+```
+
+
+To install this package to local repository (required to run examples and testcases):
+```bash
+  $ mvn clean install
+```
+
+
+To run an example:
+```bash
+  $ # requires 'vmem' memory service to run, please refer to the code of test cases for more examples.
+  $ mvn exec:exec -Pexample -pl mnemonic-examples
+```
+
+
+To run several test cases:
+```bash
+  $ # a testcase for module "mnemonic-core" that requires 'pmalloc' memory service to pass
+  $ mvn -Dtest=DurablePersonNGTest test -pl mnemonic-core -DskipTests=false
+  
+  $ # a testcase for module "mnemonic-core" that requires 'pmalloc' memory service to pass
+  $ mvn -Dtest=NonVolatileMemAllocatorNGTest test -pl mnemonic-core -DskipTests=false
+  
+  $ # a testcase for module "mnemonic-core" that requires 'vmem' memory service to pass
+  $ mvn -Dtest=VolatileMemAllocatorNGTest test -pl mnemonic-core -DskipTests=false
+  
+  $ # a testcase for module "mnemonic-core" that requires 'vmem memory service to pass
+  $ mvn -Dtest=MemClusteringNGTest test -pl mnemonic-core -DskipTests=false
+  
+  $ # a testcase for module "mnemonic-collection" that requires 'pmalloc' memory service to pass
+  $ mvn -Dtest=DurableSinglyLinkedListNGTest  test -pl mnemonic-collections -DskipTests=false
+  
+  $ # a testcase for module "mnemonic-collection" that requires 'pmalloc' memory service to pass
+  $ mvn -Dtest=DurablePersonNGTest  test -pl mnemonic-collections -DskipTests=false
+  
+  $ # a testcase for module "mnemonic-computing-services/mnemonic-utilities-service" that requires 'pmalloc' memory service to pass
+  $ mvn -Dtest=DurableSinglyLinkedListNGPrintTest test -pl mnemonic-computing-services/mnemonic-utilities-service -DskipTests=false
+  
+  $ # a testcase for module "mnemonic-computing-services/mnemonic-utilities-service" that requires 'pmalloc' memory service to pass
+  $ mvn -Dtest=DurableSinglyLinkedListNGSortTest test -pl mnemonic-computing-services/mnemonic-utilities-service -DskipTests=false
+  
+  $ # a testcase for module "mnemonic-hadoop/mnemonic-hadoop-mapreduce" that requires 'pmalloc' memory service to pass
+  $ mvn -Dtest=MneMapreducePersonDataTest test -pl mnemonic-hadoop/mnemonic-hadoop-mapreduce -DskipTests=false
+```
+

http://git-wip-us.apache.org/repos/asf/incubator-mnemonic-site/blob/bf616e05/src/_docs/codeusage.md
----------------------------------------------------------------------
diff --git a/src/_docs/codeusage.md b/src/_docs/codeusage.md
new file mode 100644
index 0000000..be91a27
--- /dev/null
+++ b/src/_docs/codeusage.md
@@ -0,0 +1,184 @@
+---
+layout: docs
+title: Code Usage
+permalink: /docs/codeusage.html
+---
+
+{% raw %}
+
+### How to use it ?
+
+#### Define a Non-Volatile class:
+
+```java
+/**
+ * a durable class should be abstract, implement Durable interface and marked with @DurableEntity annotation
+ */
+@DurableEntity
+public abstract class Person<E> implements Durable, Comparable<Person<E>> {
+        E element; // Generic Type
+
+        /**
+         * callback for this durable object creation
+         */
+        @Override
+        public void initializeAfterCreate() { 
+                System.out.println("Initializing After Created");
+        }
+        
+        /**
+         * callback for this durable object recovery
+         */
+        @Override
+        public void initializeAfterRestore() { 
+                System.out.println("Initializing After Restored");
+        }
+
+        /**
+         * setup generic info manually to avoid performance penalty
+         */
+        @Override
+        public void setupGenericInfo(EntityFactoryProxy[] efproxies, GenericField.GType[] gftypes) {
+
+        }
+
+        @Test
+        public void testOutput() throws RetrieveDurableEntityError {
+                System.out.printf("Person %s, Age: %d ( %s ) \n", getName(), getAge(),
+                                null == getMother()? "No Recorded Mother" : "Has Recorded Mother");
+        }
+
+        public int compareTo(Person<E> anotherPerson) {
+                int ret = 0;
+                if (0 == ret) ret = getAge().compareTo(anotherPerson.getAge());
+                if (0 == ret) ret = getName().compareTo(anotherPerson.getName());
+                return ret;
+        }
+
+        /**
+         * Getters and Setters for non-volatile fields marked with @DurableGetter and @DurableSetter
+         */
+        @DurableGetter(Id = 1L)
+        abstract public Short getAge();
+        @DurableSetter
+        abstract public void setAge(Short age);
+
+        @DurableGetter(Id = 2L)
+        abstract public String getName() throws RetrieveDurableEntityError;
+        @DurableSetter
+        abstract public void setName(String name, boolean destroy) throws OutOfPersistentMemory, RetrieveDurableEntityError;
+
+        @DurableGetter(Id = 3L)
+        abstract public Person<E> getMother() throws RetrieveDurableEntityError;
+        @DurableSetter
+        abstract public void setMother(Person<E> mother, boolean destroy) throws RetrieveDurableEntityError;
+
+        @DurableGetter(Id = 4L)
+        abstract public Person<E> getFather() throws RetrieveDurableEntityError;
+        @DurableSetter
+        abstract public void setFather(Person<E> mother, boolean destroy) throws RetrieveDurableEntityError;
+}
+
+```
+
+#### Use a non-volatile class:
+
+##### Setup an allocator for non-volatile object graphs.
+
+
+```java
+        // create an allocator instance
+        NonVolatileMemAllocator act = new NonVolatileMemAllocator(1024 * 1024 * 8, "./pobj_person.dat", true);
+        
+        // fetch handler store capacity from this non-volatile storage managed by this allocator
+        KEYCAPACITY = act.handlerCapacity();
+        ....
+        // close it after use
+        act.close();
+```
+
+##### Generate structured non-volatile objects.
+```java
+        // create a new non-volatile person object from this specific allocator
+        person = PersonFactory.create(act);
+        
+        // set attributes
+        person.setAge((short)rand.nextInt(50));
+        person.setName(String.format("Name: [%s]", UUID.randomUUID().toString()), true);
+
+        // keep this person on non-volatile handler store
+        act.setHandler(keyidx, person.getHandler());
+
+        for (int deep = 0; deep < rand.nextInt(100); ++deep) {
+        
+                // create another person as mother
+                mother = PersonFactory.create(act);
+                mother.setAge((short)(50 + rand.nextInt(50)));
+                mother.setName(String.format("Name: [%s]", UUID.randomUUID().toString()), true);
+                
+                // set the person's mother
+                person.setMother(mother, true);
+
+                person = mother;
+        }
+
+```
+
+
+##### Use the non-volatile objects
+
+
+```java
+        for (long i = 0; i < KEYCAPACITY; ++i) {
+        
+                System.out.printf("----------Key %d--------------\n", i);
+                // iterate non-volatile handlers from handler store of this specific allocator
+                val = act.getHandler(i);
+                if (0L == val) {
+                        break;
+                }
+                
+                // restore person objects from this specific allocator
+                Person<Integer> person = PersonFactory.restore(act, val, true);
+                
+                while (null != person) {
+                        person.testOutput();
+                        // iterate all mother's ancestors
+                        person = person.getMother();
+                }
+        }
+
+```
+
+
+##### Perform the durable native computing (e.g. printing) w/o packing/unpacking massive object graphs
+
+
+
+```java
+         // fetch print service
+         GeneralComputingService gcsvr = Utils.getGeneralComputingService("print");
+         // instantiate a value info for a value matrix
+         ValueInfo vinfo = new ValueInfo();
+         // instantiate a object stack
+         List<long[][]> objstack = new ArrayList<long[][]>();
+         // fill up with all durable object info in order
+         objstack.add(firstnv.getNativeFieldInfo());
+         objstack.add(person.getNativeFieldInfo());
+         // configure the Id stack for each level of durable objects
+         long[][] fidinfostack = {{2L, 1L}, {0L, 1L}};
+         // configure the handler of a value matrix
+         vinfo.handler = handler;
+         // set translate table from handler's allocator
+         vinfo.transtable = m_act.getTranslateTable();
+         // specify the durable type of value
+         vinfo.dtype = DurableType.SHORT;
+         // generate frames for this value matri from both stacks
+         vinfo.frames = Utils.genNativeParamForm(objstack, fidinfostack);
+         // form an array of value infos
+         ValueInfo[] vinfos = {vinfo};
+         // perform the print operation
+         gcsvr.perform(vinfos);
+```
+
+{% endraw %}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-mnemonic-site/blob/bf616e05/src/_docs/docker.md
----------------------------------------------------------------------
diff --git a/src/_docs/docker.md b/src/_docs/docker.md
new file mode 100644
index 0000000..eba3beb
--- /dev/null
+++ b/src/_docs/docker.md
@@ -0,0 +1,77 @@
+---
+layout: docs
+title: Docker usage
+permalink: /docs/docker.html
+---
+
+This is the "Dockerfiles" that will automatically build the CentOS/Ubuntu environment of this project. 
+
+--------------
+### Features:
+
+*What does the Dockerfile do?* 
+
+- 1. Build from centos/ubuntu.
+- 2. Default is not using proxy. Please see instruction below to set up http/https proxy.
+- 3. Install dependency packages.
+- 4. Set up environment variables of paths.
+- 5. Create /ws folder.
+- 6. Install pmalloc in /ws
+- 7. Install nvml in /ws.
+- 8. Set up maven proxy mvn.sh.
+- 9. Clone mnemonic code then build/install.  
+- 10. Go to /ws fold and start bash.  
+
+#### How to set up proxy? 
+
+Set the argument "http_proxy" for the docker option "--build-arg" as follows
+```bash
+  $ docker build -t NAME[:TAG] --build-arg proxy_host="<proxy_host>" proxy_port="<proxy_port>" .
+```
+
+For old version docker v1.10 below, Please replace ARG with ENV and set its value as proxy strings in Dockerfile instead
+
+### How to build the docker image from Dockerfile in host OS?
+Build from git repository
+
+```bash
+  $ docker build -t NAME[:TAG] https://github.com/apache/incubator-mnemonic.git#:docker/docker-CentOS
+  $ docker build -t NAME[:TAG] https://github.com/apache/incubator-mnemonic.git#:docker/docker-Ubuntu
+```
+
+-- OR --
+
+In the folder of Dockerfile, run: 
+
+```bash
+  $ docker build -t NAME[:TAG] .
+```
+
+* More detials please refer to [Docker build reference](https://docs.docker.com/engine/reference/commandline/build/)
+
+#### Optional: After build, push image to dockerhub: 
+
+```bash
+  $ docker login [OPTIONS] [SERVER]  
+  $ docker push [OPTIONS] NAME[:TAG]
+```
+
+* More detials please refer to [Docker login reference](https://docs.docker.com/engine/reference/commandline/login/)
+ and [Docker push reference](https://docs.docker.com/engine/reference/commandline/push/)
+
+### How to run image after build
+
+Run image:
+
+```bash
+  $ docker run --name CONTAINER_NAME -it NAME[:TAG]
+```
+
+### Sharing host project folder to Dock container for IDEs e.g. Eclipse, Intellij IDEA
+
+```bash
+  $ docker run -v <hostdir>/incubator-mnemonic:/ws/incubator-mnemonic -it NAME[:TAG]
+```
+Note: this command will override the container's project folder, you can use another name to avoid it.
+
+ * More details please refer to [Docker run reference](https://docs.docker.com/engine/reference/run/)

http://git-wip-us.apache.org/repos/asf/incubator-mnemonic-site/blob/bf616e05/src/_docs/features.md
----------------------------------------------------------------------
diff --git a/src/_docs/features.md b/src/_docs/features.md
new file mode 100644
index 0000000..8917eca
--- /dev/null
+++ b/src/_docs/features.md
@@ -0,0 +1,24 @@
+---
+layout: docs
+title: Features
+permalink: /docs/features.html
+---
+
+Apache Mnemonic is an advanced hybrid memory storages oriented library, it proposed a non-volatile/durable Java object model and durable computing service that bring several advantages to significantly improve the performance of massive real-time data processing/analytics. developers are able to use this library to design their cache-less and SerDe-less high performance applications.
+
+### Features:
+
+* In-place data storage on local non-volatile memory
+* Durable Object Model (DOM)
+* Durable Native Computing Model (DNCM)
+* Object graphs lazy loading & sharing
+* Auto-reclaim memory resources and Mnemonic objects
+* Hierarchical cache pool for massive data caching
+* Extensible memory services for new device adoption and allocation optimization
+* Durable data structure collection(WIP)
+* Durable computing service
+* Minimize memory footprint of on-heap
+* Reduce GC Overheads as the following chart shown (collected from Apache Spark experiments)
+* Drop-in Hadoop MapReduce support
+* DurableRDD for Apache Spark
+

http://git-wip-us.apache.org/repos/asf/incubator-mnemonic-site/blob/bf616e05/src/_docs/gcdata.md
----------------------------------------------------------------------
diff --git a/src/_docs/gcdata.md b/src/_docs/gcdata.md
new file mode 100644
index 0000000..c60761b
--- /dev/null
+++ b/src/_docs/gcdata.md
@@ -0,0 +1,9 @@
+---
+layout: docs
+title: Java GC data
+permalink: /docs/gcdata.html
+---
+
+
+![Mnemonic_GC_stats](/img/gcdata.png)
+

http://git-wip-us.apache.org/repos/asf/incubator-mnemonic-site/blob/bf616e05/src/_docs/integration.md
----------------------------------------------------------------------
diff --git a/src/_docs/integration.md b/src/_docs/integration.md
new file mode 100644
index 0000000..0a33648
--- /dev/null
+++ b/src/_docs/integration.md
@@ -0,0 +1,12 @@
+---
+layout: docs
+title: Mnemonic Integration with other projects
+permalink: /docs/integration.html
+---
+
+
+### How to apply it for other projects ?
+ * [Apache Spark Integration Demo](https://github.com/NonVolatileComputing/spark)
+ * [Apache Arrow Integration Demo](https://github.com/NonVolatileComputing/arrow)
+ 
+ 
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-mnemonic-site/blob/bf616e05/src/_docs/memsrvcmp.md
----------------------------------------------------------------------
diff --git a/src/_docs/memsrvcmp.md b/src/_docs/memsrvcmp.md
new file mode 100644
index 0000000..d174d84
--- /dev/null
+++ b/src/_docs/memsrvcmp.md
@@ -0,0 +1,22 @@
+---
+layout: docs
+title: Durable Memory Service Comparison
+permalink: /docs/memsrvcmp.html
+---
+
+#### Durable Memory Service Comparison Table
+
+
+|    Features                     |    NVML-VMEM    |    PMALLOC    |    NVML-PMEM    |     SYS-VMEM    |
+|---------------------------------|:---------------:|:-------------:|:---------------:|:---------------:|
+|    Fixed   Durable K-V Store    |        NA       |       O       |        O        |        NA       |
+|    Support DOM                  |        O        |       O       |        O        |        O        |
+|    Support DNCM                 |        O        |       O       |        O        |        O        |
+|    Support OS X                 |        NA       |       O       |        NA       |        O        |
+|    Memory Map Sync.             |        NA       |       O       |        O        |        NA       |
+|    PM Flush                     |        NA       |       NA      |        O        |        NA       |
+|    PM Drain                     |        NA       |       NA      |        O        |        NA       |
+|    PM Persist                   |        NA       |       NA      |        O        |        NA       |
+|    PM Atomic Ops.               |        NA       |       NA      |        O        |        NA       |
+|    Expected Performance         |       Average   |     Average   |  Slow(on Disk)  |       Fast      |
+

http://git-wip-us.apache.org/repos/asf/incubator-mnemonic-site/blob/bf616e05/src/_docs/modes.md
----------------------------------------------------------------------
diff --git a/src/_docs/modes.md b/src/_docs/modes.md
new file mode 100644
index 0000000..8de5dab
--- /dev/null
+++ b/src/_docs/modes.md
@@ -0,0 +1,8 @@
+---
+layout: docs
+title: Mnemonic Modes
+permalink: /docs/modes.html
+---
+
+
+![Mnemonic_Modes](/img/modes.png)

http://git-wip-us.apache.org/repos/asf/incubator-mnemonic-site/blob/bf616e05/src/_docs/runtest.md
----------------------------------------------------------------------
diff --git a/src/_docs/runtest.md b/src/_docs/runtest.md
new file mode 100644
index 0000000..7d12260
--- /dev/null
+++ b/src/_docs/runtest.md
@@ -0,0 +1,36 @@
+---
+layout: docs
+title: Run tests
+permalink: /docs/runtest.html
+---
+
+To run several test cases:
+```bash
+  $ # a testcase for module "mnemonic-core" that requires 'pmalloc' memory service to pass
+  $ mvn -Dtest=DurablePersonNGTest test -pl mnemonic-core -DskipTests=false
+  
+  $ # a testcase for module "mnemonic-core" that requires 'pmalloc' memory service to pass
+  $ mvn -Dtest=NonVolatileMemAllocatorNGTest test -pl mnemonic-core -DskipTests=false
+  
+  $ # a testcase for module "mnemonic-core" that requires 'vmem' memory service to pass
+  $ mvn -Dtest=VolatileMemAllocatorNGTest test -pl mnemonic-core -DskipTests=false
+  
+  $ # a testcase for module "mnemonic-core" that requires 'vmem memory service to pass
+  $ mvn -Dtest=MemClusteringNGTest test -pl mnemonic-core -DskipTests=false
+  
+  $ # a testcase for module "mnemonic-collection" that requires 'pmalloc' memory service to pass
+  $ mvn -Dtest=DurableSinglyLinkedListNGTest  test -pl mnemonic-collections -DskipTests=false
+  
+  $ # a testcase for module "mnemonic-collection" that requires 'pmalloc' memory service to pass
+  $ mvn -Dtest=DurablePersonNGTest  test -pl mnemonic-collections -DskipTests=false
+  
+  $ # a testcase for module "mnemonic-computing-services/mnemonic-utilities-service" that requires 'pmalloc' memory service to pass
+  $ mvn -Dtest=DurableSinglyLinkedListNGPrintTest test -pl mnemonic-computing-services/mnemonic-utilities-service -DskipTests=false
+  
+  $ # a testcase for module "mnemonic-computing-services/mnemonic-utilities-service" that requires 'pmalloc' memory service to pass
+  $ mvn -Dtest=DurableSinglyLinkedListNGSortTest test -pl mnemonic-computing-services/mnemonic-utilities-service -DskipTests=false
+  
+  $ # a testcase for module "mnemonic-hadoop/mnemonic-hadoop-mapreduce" that requires 'pmalloc' memory service to pass
+  $ mvn -Dtest=MneMapreducePersonDataTest test -pl mnemonic-hadoop/mnemonic-hadoop-mapreduce -DskipTests=false
+```
+

http://git-wip-us.apache.org/repos/asf/incubator-mnemonic-site/blob/bf616e05/src/css/screen.scss
----------------------------------------------------------------------
diff --git a/src/css/screen.scss b/src/css/screen.scss
index 4b286ff..6ebf376 100644
--- a/src/css/screen.scss
+++ b/src/css/screen.scss
@@ -552,7 +552,7 @@ aside {
   text-align: center;
   padding-top: 40px;
   position: relative;
-  background: url(../img/article-footer.png) top center no-repeat;
+//  background: url(../img/article-footer.png) top center no-repeat;
   margin: 40px -20px 10px;
 
   > div { width: 49.5%; }
@@ -778,7 +778,7 @@ article {
 
   h2, h3, h4, h5, h6 { margin: 1em 0; }
 
-  h4 { color: #fff; }
+  h4 { color: #000; }
 
   ul li {
 

http://git-wip-us.apache.org/repos/asf/incubator-mnemonic-site/blob/bf616e05/src/img/archcmp.png
----------------------------------------------------------------------
diff --git a/src/img/archcmp.png b/src/img/archcmp.png
new file mode 100644
index 0000000..bb0411b
Binary files /dev/null and b/src/img/archcmp.png differ

http://git-wip-us.apache.org/repos/asf/incubator-mnemonic-site/blob/bf616e05/src/img/gcdata.png
----------------------------------------------------------------------
diff --git a/src/img/gcdata.png b/src/img/gcdata.png
new file mode 100644
index 0000000..07f3fbd
Binary files /dev/null and b/src/img/gcdata.png differ

http://git-wip-us.apache.org/repos/asf/incubator-mnemonic-site/blob/bf616e05/src/img/modes.png
----------------------------------------------------------------------
diff --git a/src/img/modes.png b/src/img/modes.png
new file mode 100644
index 0000000..cc66a70
Binary files /dev/null and b/src/img/modes.png differ