From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-qk0-f179.google.com (mail-qk0-f179.google.com [209.85.220.179]) by dpdk.org (Postfix) with ESMTP id 23F9E2965 for ; Fri, 11 Mar 2016 23:20:05 +0100 (CET) Received: by mail-qk0-f179.google.com with SMTP id s68so53717612qkh.3 for ; Fri, 11 Mar 2016 14:20:05 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=cq3FZ984W3UKfZWnZM5STGH6UmYcCRad+9vHQemaSuU=; b=dA5NdWlCMUP9K7gbQNVbeVPEfF59Y5cdOv62uN19egbmasP1sAQBJx64fKNrKdks8c rSuu9xBgvlf3r3S1KgUqWor5BiLN8QyhwKBoNc3ec6bMRfeTdSUadQ69LCE7qdmGPK11 cM0fqXPk+LNGiqZpPHYHfdXH1v9zwXBPyEaBAx+dZWdOM8h89XgjcheWOyEYc8VmObDy SD7PfytySB/hGXNtPo+3+4eZk1iyBbpg2eVt8w8GrufSo3prIeQ+TKLHHuuX6G9QOuxC 5de/q1tS3oopvdx7RkMm4TEKU/D5fhLfwfjkkKkIEI/PBaSfj5Zz1RY474CoakjIzoAy khNQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=cq3FZ984W3UKfZWnZM5STGH6UmYcCRad+9vHQemaSuU=; b=a/63b32j+a+NYzsWcKkxTsmw9A/+6/HxiI9DpPJEXJvmMMTV+QCBxxofpzCYcOge2w cKXwj0YO41zkCB3pnaZx1b5HZMQjqyEbtRkoyDTR964/JbhPepujFnXIld2FVD1QWBrv kztuYFrhhbUDCmR9XDYdIU10a3My49wtIkqn8qkKRKVI6PzS2Q7Em4EhsWOlZkF89ntD vfWfkz48Tb44UITPHrqu2glGGr0EwX1V2Tz+zvlGOpBgmvDD2Pe0RYcYlpshfEvy2tyb 263FLqNCiBCb7+bHhGip9aYvyv04O57vpjK5xvbz/Fns/C4b3QvmTpf8he1ue2qArXTa QR4g== X-Gm-Message-State: AD7BkJLJwTcIxImpmN2jG0C1XxO8SAGzkNOVKk2YFKk5v/+OZZhTbrx7ZW4N+KPz5vSUCG4fv4FvylmO2RCNhQ== X-Received: by 10.55.200.215 with SMTP id t84mr15184966qkl.55.1457734804615; Fri, 11 Mar 2016 14:20:04 -0800 (PST) MIME-Version: 1.0 Received: by 10.140.94.215 with HTTP; Fri, 11 Mar 2016 14:19:25 -0800 (PST) In-Reply-To: References: From: Mahdi Moradmand Badie Date: Fri, 11 Mar 2016 17:19:25 -0500 Message-ID: To: Kyle Larose Content-Type: text/plain; charset=UTF-8 X-Content-Filtered-By: Mailman/MimeDel 2.1.15 Cc: users@dpdk.org Subject: Re: [dpdk-users] Send and Receive packets to/from specific core X-BeenThere: users@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: usage discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 11 Mar 2016 22:20:05 -0000 So you mean, each core works with its thread as a worker, and in the ring as a share memory, all cores(via their threads) could write and read in each part of the ring (but it is better each core access to its threads). My questions: 1) How I could access to cache/register/etc of each core if so? 2) How could I consider ring as share cache (L3), because here we use ring as a share memory but if I wanna use share cache how I could do it, is there any availability in DPDK? 3) Is there any possibility to use ring as real memory, I mean ,Can I ask the core to write the message in the specific part of ring (from this address to this address)? 4) I wanna have a share memory (ring or whatever) with for example the size 4 (4 free place for read and write) which filled at first with 1, 7, 3, 4. Then each core (0, 1, 2, 3 and I have totally 4 cores in my machine) read the slot and add 1 to it and again write it in share memory so the result should be (2, 8, 4, 5), this is possible do with ring? if so how? and each core just could access to its specific part (or better in order to prevent bad design)? Sorry because I am new in DPDK and with not enough knowledge of C maybe my questions seems crazy :) Thanks, On 11 March 2016 at 16:50, Kyle Larose wrote: > On Fri, Mar 11, 2016 at 4:01 PM, Mahdi Moradmand Badie > wrote: > > Yes, I found it before :), its a little ambiguous for me, I don't know > how I > > could write the specific data(message or packet) into specific core, then > > change it and then read with the other core. > > Well, when one process writes to the other, it moves between threads. > Each thread is pinned to a specific core (i.e. processor affinity). > You can see that this is happening by looking at the output from the > example. It mentions on the page I linked something like "Starting > core 9" or "core 9: Received...". This means that the application has > started its worker thread and associated it with core 9. It will only > ever run on that core. Thus, in order for it to actually process the > message, the contents of the message must be copied into the > cache/registers/etc. of that core. > > To control which cores are used, you use the "-c" argument, and give > the "core mask" in hex. For example, -c 3 would use cores 0 and 1. > > The key things to take away from this are that threads are constrained > by the scheduler to only run on specific cores using processor > affinity, and that message queues in the form of rings can be used to > pass messages between these cores. A message processed on a thread > assigned to core X will be modified/accessed locally on that core. > This doesn't mean other cores couldn't access it. But, that should be > prevented by good design. > > > > > > On 11 March 2016 at 15:54, Kyle Larose wrote: > >> > >> On Fri, Mar 11, 2016 at 3:47 PM, Mahdi Moradmand Badie > >> wrote: > >> > My big challenge is having a tested code (run able with right > >> > functionality), then run and change it in order to have my task. > >> > I wanna use the share memory btw cores in order to write/read to/from > >> > and > >> > knowing how do that :), all available code which I found are based on > >> > NIC :( > >> > or maybe I am wrong!!! > >> > Thanks in advance, > >> > >> Take a look at this example: > >> > >> > >> > http://dpdk.org/doc/guides/sample_app_ug/multi_process.html#basic-multi-process-example > >> > >> IIRC, it uses rings to send messages back and forth between the cores. > >> The code is available with the dpdk source, so it should serve as a > >> good starting point to see how to set up the shared memory and use it. > >> > >> Does that help? > >> > >> > > >> > On 11 March 2016 at 15:43, Kyle Larose wrote: > >> >> > >> >> On Fri, Mar 11, 2016 at 3:22 PM, Mahdi Moradmand Badie > >> >> wrote: > >> >> > Dear All, > >> >> > > >> >> > I wanna Send(write) a Packet(s) with specific data (for example x = > >> >> > 10) > >> >> > from core 0 to share memory and Receive (Read) it with another Core > >> >> > (for > >> >> > example Core 1), change it in Core 1 (for example X = X + 1) and > >> >> > write > >> >> > again in share memory. > >> >> > I really don't know How I could do it, I wanna do this without > using > >> >> > NIC > >> >> > ot > >> >> > rte_eth at all, so simple and easy but I confused. > >> >> > Please help me. > >> >> > > >> >> > PS. I know there are many example do more complex than this small > >> >> > exercise > >> >> > but all did it via NIC. > >> >> > >> >> What is your biggest challenge? Is it moving information between > >> >> cores, or getting information into your application? > >> >> > >> >> Consider that most of the multiprocess examples in DPDK do two > things: > >> >> 1) Send/Receive packets to/from a NIC > >> >> 2) Send packets between cores > >> >> > >> >> You obviously want to do #2, and looking at those examples should > make > >> >> how to do it fairly obvious. Is your challenge replacing #1 with > >> >> something other than a NIC? If so, you *could* consider using a pcap > >> >> PMD to just read packets from a file. In the past, I have used ring > >> >> PMDs in conjunction with a secondary process which generates packets > >> >> to inject arbitrarily formatted packets into my program. > >> >> > >> >> > > >> >> > -- > >> >> > M@hdi Mor@dm@nd B@die > >> > > >> > > >> > > >> > > >> > -- > >> > M@hdi Mor@dm@nd B@die > > > > > > > > > > -- > > M@hdi Mor@dm@nd B@die > -- M@hdi Mor@dm@nd B@die