X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=doc%2Fguides%2Fsample_app_ug%2Fmulti_process.rst;h=b84e9a748c84852d496ab9c90658e2a465965d18;hb=2808423a9ce42a748aed77a4b487be27d2b6acfa;hp=ffe7ee682b33ec8efb4474c253a44f92313c2f37;hpb=513b07238abf86c796c55d697bc40558583793ef;p=dpdk.git diff --git a/doc/guides/sample_app_ug/multi_process.rst b/doc/guides/sample_app_ug/multi_process.rst index ffe7ee682b..b84e9a748c 100644 --- a/doc/guides/sample_app_ug/multi_process.rst +++ b/doc/guides/sample_app_ug/multi_process.rst @@ -1,32 +1,5 @@ -.. BSD LICENSE - Copyright(c) 2010-2014 Intel Corporation. All rights reserved. - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - * Neither the name of Intel Corporation nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.. SPDX-License-Identifier: BSD-3-Clause + Copyright(c) 2010-2014 Intel Corporation. .. _multi_process_app: @@ -40,31 +13,13 @@ Example Applications Building the Sample Applications ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - The multi-process example applications are built in the same way as other sample applications, and as documented in the *DPDK Getting Started Guide*. -To build all the example applications: - -#. Set RTE_SDK and go to the example directory: - - .. code-block:: console - - export RTE_SDK=/path/to/rte_sdk - cd ${RTE_SDK}/examples/multi_process - -#. Set the target (a default target will be used if not specified). For example: - - .. code-block:: console - - export RTE_TARGET=x86_64-native-linuxapp-gcc - - See the *DPDK Getting Started Guide* for possible RTE_TARGET values. -#. Build the applications: - .. code-block:: console +To compile the sample application see :doc:`compiling`. - make +The applications are located in the ``multi_process`` sub-directory. .. note:: @@ -82,11 +37,11 @@ Running the Application ^^^^^^^^^^^^^^^^^^^^^^^ To run the application, start one copy of the simple_mp binary in one terminal, -passing at least two cores in the coremask, as follows: +passing at least two cores in the coremask/corelist, as follows: .. code-block:: console - ./build/simple_mp -c 3 -n 4 --proc-type=primary + ./build/simple_mp -l 0-1 -n 4 --proc-type=primary For the first DPDK process run, the proc-type flag can be omitted or set to auto, since all DPDK processes will default to being a primary instance, @@ -95,7 +50,7 @@ The process should start successfully and display a command prompt as follows: .. code-block:: console - $ ./build/simple_mp -c 3 -n 4 --proc-type=primary + $ ./build/simple_mp -l 0-1 -n 4 --proc-type=primary EAL: coremask set to 3 EAL: Detected lcore 0 on socket 0 EAL: Detected lcore 1 on socket 0 @@ -119,11 +74,11 @@ The process should start successfully and display a command prompt as follows: simple_mp > To run the secondary process to communicate with the primary process, -again run the same binary setting at least two cores in the coremask: +again run the same binary setting at least two cores in the coremask/corelist: .. code-block:: console - ./build/simple_mp -c C -n 4 --proc-type=secondary + ./build/simple_mp -l 2-3 -n 4 --proc-type=secondary When running a secondary process such as that shown above, the proc-type parameter can again be specified as auto. However, omitting the parameter altogether will cause the process to try and start as a primary rather than secondary process. @@ -229,10 +184,10 @@ the following commands can be used (assuming run as root): .. code-block:: console - # ./build/symmetric_mp -c 2 -n 4 --proc-type=auto -- -p 3 --num-procs=4 --proc-id=0 - # ./build/symmetric_mp -c 4 -n 4 --proc-type=auto -- -p 3 --num-procs=4 --proc-id=1 - # ./build/symmetric_mp -c 8 -n 4 --proc-type=auto -- -p 3 --num-procs=4 --proc-id=2 - # ./build/symmetric_mp -c 10 -n 4 --proc-type=auto -- -p 3 --num-procs=4 --proc-id=3 + # ./build/symmetric_mp -l 1 -n 4 --proc-type=auto -- -p 3 --num-procs=4 --proc-id=0 + # ./build/symmetric_mp -l 2 -n 4 --proc-type=auto -- -p 3 --num-procs=4 --proc-id=1 + # ./build/symmetric_mp -l 3 -n 4 --proc-type=auto -- -p 3 --num-procs=4 --proc-id=2 + # ./build/symmetric_mp -l 4 -n 4 --proc-type=auto -- -p 3 --num-procs=4 --proc-id=3 .. note:: @@ -254,7 +209,7 @@ How the Application Works ^^^^^^^^^^^^^^^^^^^^^^^^^ The initialization calls in both the primary and secondary instances are the same for the most part, -calling the rte_eal_init(), 1 G and 10 G driver initialization and then rte_eal_pci_probe() functions. +calling the rte_eal_init(), 1 G and 10 G driver initialization and then rte_pci_probe() functions. Thereafter, the initialization done depends on whether the process is configured as a primary or secondary instance. In the primary instance, a memory pool is created for the packet mbufs and the network ports to be used are initialized - @@ -318,8 +273,8 @@ In addition to the EAL parameters, the application- specific parameters are: .. note:: - In the server process, a single thread, the master thread, that is, the lowest numbered lcore in the coremask, performs all packet I/O. - If a coremask is specified with more than a single lcore bit set in it, + In the server process, a single thread, the master thread, that is, the lowest numbered lcore in the coremask/corelist, performs all packet I/O. + If a coremask/corelist is specified with more than a single lcore bit set in it, an additional lcore will be used for a thread to periodically print packet count statistics. Since the server application stores configuration data in shared memory, including the network ports to be used, @@ -329,9 +284,9 @@ the following commands could be used: .. code-block:: console - # ./mp_server/build/mp_server -c 6 -n 4 -- -p 3 -n 2 - # ./mp_client/build/mp_client -c 8 -n 4 --proc-type=auto -- -n 0 - # ./mp_client/build/mp_client -c 10 -n 4 --proc-type=auto -- -n 1 + # ./mp_server/build/mp_server -l 1-2 -n 4 -- -p 3 -n 2 + # ./mp_client/build/mp_client -l 3 -n 4 --proc-type=auto -- -n 0 + # ./mp_client/build/mp_client -l 4 -n 4 --proc-type=auto -- -n 1 .. note:: @@ -495,7 +450,7 @@ For threads/processes not created in that way, either pinned to a core or not, t rte_lcore_id() function will not work in the correct way. However, sometimes these threads/processes still need the unique ID mechanism to do easy access on structures or resources. For example, the DPDK mempool library provides a local cache mechanism -(refer to *DPDK Programmer's Guide* , Section 6.4, "Local Cache") +(refer to :ref:`mempool_local_cache`) for fast element allocation and freeing. If using a non-unique ID or a fake one, a race condition occurs if two or more threads/ processes with the same core ID try to use the local cache. @@ -524,7 +479,7 @@ The command is as follows: .. code-block:: console - #./build/l2fwd_fork -c 1c -n 4 -- -p 3 -f + #./build/l2fwd_fork -l 2-4 -n 4 -- -p 3 -f This example provides another -f option to specify the use of floating process. If not specified, the example will use a pinned process to perform the L2 forwarding task.