- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
The Data Plane SDK was announced last year (available 2Q2010) as Intel's solution for fast-path network processing. Previously, the only available solutions were proprietary via 3rd party vendors such as WindRiver. As far as I can tell, it is still not available. Does anyone have info regarding release dates for the SDK? We are interested in gaining knowledge on this subject for a future IPTV VOD-server project.
Thanks,
Steve
Link Copied
- « Previous
-
- 1
- 2
- Next »
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi jiexie, the DPDK team asked me to make you aware of the developer mailing lists at http://www.dpdk.org/ www.dpdk.org where you will find a bigger DPDK open source community there. They have discussions related to KNI happening there right now. Can you check it out and let me know what you think? LynnZ
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
By the way, jiexie, you need to register on the developer mailing lists to see those discussions at http://www.dpdk.org/ www.dpdk.org.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
OK,
I will visit http://www.dpdk.org/ www.dpdk.org. to check what can I get for my problem.
Thanks very much!
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I am using DPDK 1.5.0 and trying to use KNI interface to measure throughput through it
----------------------------------------------------------------------------------------------------------
I have machine with 2 lcores and 2 physical interface, and in running kni sample application --config parameter we are supposed to give1)port no, 2)lcore_rx,3)lcore_tx, right?so can it be possible to give same lcore no. for both ports, likekni -c 0x3 -n 4 -- -P -p 0x3 --config"(0,0,1),(1,0,1)"
As i have tried and after running this two interface vEth0 and vEth1 is created, but when i am giving ip with ifconfig to vEth1 then it is showing the below message ...SIOCSIFFLAGS: Timer expired, while i am able to bring up the the vEth0 interface successfully.-----------------------------------------------------------------------------------------------------i am pasting some details which prints while running the application ...
Checking link status
.....done
Port 0 Link Up - speed 1000 Mbps - full-duplex
Port 1 Link Up - speed 1000 Mbps - full-duplex
APP: Lcore 1 is writing to port 0
APP: Lcore 0 is reading from port 0 and here in last two line Lcore 1 and Lcore 0 is writting and reading for port 0 and may be therefore i am able to bring up the vEth0. and there is no core for port 1 so it is failing.---------------------------------------------------------------------------------------------------------
So my question is why can't we use same lcores for reading and writing for both ports, does DPDK restricts using same lcores for 2 ports (as it seems), and if so, then why??Thanks in advance
Chandra
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Dear customer.
Thank you for using Intel DPDK.
You are correct - the way kni sample example application is designed - is the way what you have specified here "Locre 1 and Lcore 0 writing and reading for port 0". In agreement with what you have described, Chapter 8.1 overview of http://www.intel.com/content/dam/www/public/us/en/documents/guides/intel-dpdk-sample-applications-user-guide.pdf http://www.intel.com/content/dam/www/public/us/en/documents/guides/intel-dpdk-sample-applications-user-guide.pdf indicates that "For a physical NIC port, one thread reads from the port and writes to the kni and another thread reads from KNI devices and writes the data unmodified to the port".
We had TUN / TAP implementation for communication between user space app to kernel space. The need was better performance. Hence we have KNI. So, performance point of view, we have one core dedicated per port.
Implementation [below] follow the design intent with kni_port_params having the mapping for 1 port ID.
kni_ingress(struct kni_port_params *p)
uint8_t i, port_id;
unsigned nb_rx, num;
uint32_t nb_kni;
struct rte_mbuf *pkts_burst[PKT_BURST_SZ];
if (p == NULL)
return;
nb_kni = p->nb_kni;
port_id = p->port_id;
for (i = 0; i < nb_kni; i++) {
/* Burst rx from eth */
Thank you,
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi Kumar,
1.) What i can see into code is that, for one KNI interface creation we require two dedicated lcores (i.e one for reading and one for writting , that is two lcores for one KNI interface), so if i have to create two interface then i need four dedicated lcores(according to present design of KNI application)???
2.) If it is so, then could you please write me why the designers had thought of using two dedicated lcores for one KNI interface, do the thread safety in mempool libraries and RX/TX in the PMD were their concern while design.
3.) i really need some pointers from you, what area (in KNI application) i have to target if i need to create two KNI interface from two lcores (b'coz i have only two cores in my system).
Thanks in advance,
Chandra
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Dear Chandra,
Acknowledging your mail.
Will get back to you
Thank you
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi,
the reason(s) why kni sample app uses a separate lcore for each port:
a) performance.
b) design simplicity.
There is nothing that prevents same logical core to handle both RX and TX for multiple ports.
It has best performance if a lcore in user space move packet descriptors from DPDK to KNI queue and another lcore in kernel space then COPY packet data to skb and then push skb to kernel stack.
It should have no thread safe issue no matter it is multiple lcores poll same queue or a lcore polls multiple queues. For the former case, lockless queue design leverage atomic instruction "cmpxchg"(BTW, but we did see performance drops significantly for this case); for the second case, no shared data among queues.
For the customer case of using same logical core to handle both RX and TX for multiple ports, basically the aggregated performance remains same while per port performance will be half of the one port case giving they have 2 ports to support
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Assuming you are using DPDK 1.5, and pls take a look at new command-line below on how to support multi-threaded KNI. Basically, it is ok to have single kernel thread(pin to a lcore) to handle multiple queues of multiple ports. But KNI application needs some changes as it assumes no overlapping of Rx/Tx lcore on multiple ports. The biggest change should be in main_loop() function as below, highlighted code snippet that need to change in YELLOW. ARE YOU ABLE to see the color in the advanced editor mode - "Use Advanced Editor"
static int
main_loop(__rte_unused void *arg)
{
uint8_t i, nb_ports = rte_eth_dev_count();
int32_t f_stop;
const unsigned lcore_id = rte_lcore_id();
enum lcore_rxtx {
LCORE_NONE,
LCORE_RX,
LCORE_TX,
LCORE_MAX
};
enum lcore_rxtx flag = LCORE_NONE;
nb_ports = (uint8_t)(nb_ports < RTE_MAX_ETHPORTS ?
nb_ports : RTE_MAX_ETHPORTS);
for (i = 0; i < nb_ports; i++) {
if (!kni_port_params_array[i])
continue;
if (kni_port_params_array[i]->lcore_rx == (uint8_t)lcore_id) {
flag = LCORE_RX;
break;
} else if (kni_port_params_array[i]->lcore_tx ==
(uint8_t)lcore_id) {
flag = LCORE_TX;
break;
}
}
/* code above get the port index and Rx/Tx direction, should get port mask if overlapping is allowed */
if (flag == LCORE_RX) {
RTE_LOG(INFO, APP, "Lcore %u is reading from port %d\n",
kni_port_params_array[i]->lcore_rx,
kni_port_params_array[i]->port_id);
while (1) {
f_stop = rte_atomic32_read(&kni_stop);
if (f_stop)
break;
kni_ingress(kni_port_params_array[i]);
/* code highlighted need to receive traffic from all ports specified in the port mask */
/* Note: suggest to have a lcore in charge of Rx for all ports. Having a lcore Rx port0 and Tx port1 would cause a lot more code change */
}
} else if (flag == LC...

- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page
- « Previous
-
- 1
- 2
- Next »