-
Notifications
You must be signed in to change notification settings - Fork 39
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
IX won't TX #31
Comments
Regarding DPDK: You say that you installed it following the guides. What exactly do you mean? IX and Zygos automatically compile and use a compatible version of DPDK as part of their Makefile. I suggest that you use the following repository to build and use IX and Zygos: https://github.com/ix-project/zygos-bench Keep in mind that Zygos doesn't support multiple NICs unlike IX. Regarding the 40GbE, is it IX or Zygos that doesn't work? Or both? Can you give the ix.conf and the command line used? |
Dear @prekageo , Thanks for your response.
|
I guess you have 2 different problems:
|
Dear @prekageo , I've wired two machines directly with cable during the test. Correct. As in 1., ICMP ping and TCP connection. |
Regarding point 1. ICMP always uses the first NIC. TCP should use the same NIC for Tx as Rx. How do connect 2 servers together via cable if one of them has multiple NICs? I don't understand your network topology. |
Dear @prekageo I'll explain how I tested TCP connection with multiple NIC.
Both machines have two Intel 10G NICs. (for 40GbE I've replaced one of NICs to 40GbE). [machine0] [machine1]
1.1 Server (IX) 1.2 Client (Linux) p3p1 (directly connected with "05:00.0")
[Server] [Client] # ifconfig p5p1 down and # ifconfig p3p1 down
If I modify "devices" line in [ix.conf] to ["07:00.0", "05:00.0"], now p5p1 (which is connected to 07:00.0) can receive packets from IX while p3p1 (which is connected to 05:00.0) won't. |
Unfortunately, this is an invalid network configuration. Unless you modify the MAC addresses of your devices, this setup will not work. Moreover, I am not really sure what you are trying to achieve with this setup. If you want to understand how to properly setup a bond read the following: https://www.kernel.org/doc/Documentation/networking/bonding.txt |
Dear @prekageo ,
P.S. Does IX tries to send packets with the MAC address of first NIC port? |
Use tcpdump on Linux side to verify. Your setup is not valid. Even Linux will not work with this setup. You have to setup a proper bond interface and first make sure that Linux works with it. |
Dear @prekageo , Connectivity on both NIC is verified with Linux stacks on both sides. Could you clarify why bonding NIC is so important? |
Are you using bonding or not with Linux? There is a single way to setup bonding under Linux. You have to follow the document I pointed out earlier. If you don't using bonding under Linux, how do you expect IX to work under your setup when you specifically ask from IX to operate in bond mode? You have to read and understand better what is a bond and how to set it up. Hint: There is a single MAC for all the adapters in a bond. |
Dear @prekageo Okay now I understand. I was thinking that you asked me to setup bonding in client-side. BTW, shouldn't the IX use DPDK bonding driver internally, if it's designed around it? |
I assume that you are no longer interested in this issue. If that's not the case, please re-open it. |
I have the same problem as @ssps. IX using a 40Gb Intel XL710 NIC is able to RX packets but cannot transmit anything on the wire. Setup: |
Hi Kostis, Please describe your networking setup and what you have tried so far. |
Thanks George! We have two Intel Xeon E5-2620 servers with Intel XL710 40Gb NICs connected through a Barefoot switch. Initially, I successfully pinged between the two machines: Then, I ran the IX echoserver on Server 2 using the following config:
and the client on server 1:
which never returns. I also tried pinging without any success. After I added print messages, I found out that packets were received and processed at server2. Replies were generated, added to the TX queue, I40E_PCI_REG_WRITE was called but nothing was sent out to the wire. |
|
|
|
Since the DPDK app is working, the problem must be in the i40e IX/ZygOS driver. Have you tested it recently in your setup? Thanks again for your help! |
I don't have access anymore to hardware to test it. I would suggest that you dump all the bytes transmitted by IX/ZygOS and verify that they are the same with the bytes transmitted by your custom DPDK application. For example, is the source and destination MAC correct? |
Thank you George. I will continue to work on this and submit a pull request once I find and fix the issue. |
After a lot of digging and basically reimplementing the i40e driver from scratch I found out that the TX problem is fixed by changing this line: Line 286 in 550bf28
to
Since I do not know what side-effects this might cause to other systems, let me know if it is OK to submit a PR. |
First of all, thanks for finding this! Actually, 0 or 1 just happen to work depending on how the device is configured. The appropriate way to fix this issue would be to replace this: Lines 280 to 287 in b4825cc
with a code sequence that does the following:
Then, you let the existing code modify I will be more than happy to merge such a pull request. Please, test it before submitting it, as I cannot test anymore this code. |
No problem! I tried what you suggested but it seems like log_info("txq->len = %u\n", txq->len);
ret = i40e_get_lan_tx_queue_context(hw, pf_q, &tx_ctx);
if (ret != I40E_SUCCESS) {
log_err("Failed to get LAN TX queue context.\n");
return ret;
}
tx_ctx.base = txq->ring_physaddr / I40E_QUEUE_BASE_ADDR_UNIT;
tx_ctx.qlen = txq->len;
ret = i40e_set_lan_tx_queue_context(hw, pf_q, &tx_ctx);
if (ret != I40E_SUCCESS) {
log_err("Failed to get LAN TX queue context.\n");
return ret;
}
ret = i40e_get_lan_tx_queue_context(hw, pf_q, &tx_ctx);
if (ret != I40E_SUCCESS) {
log_err("Failed to get LAN TX queue context.\n");
return ret;
}
log_info("tx_ctx.qlen = %u\n", tx_ctx.qlen); prints
The same also happens for the other fields, e.g., |
Given my lack of access to the hardware, I can only provide you with high level instructions on how to figure out what's going on:
|
Dear IX developers,
I'd like to reproduce experiments from IX and Zygos paper in my own environment, but I've encountered following issues.
Here are some details about the environment and problems.
General environment
CPU: Intel Xeon E5-2690
RAM: 120GB
Kernel: 4.4.0-104-generic
DPDK version: 16.04 (installed following the guides)
10GbE NIC: Intel 82599ES
40GbE NIC: Intel XL710
10GbE Multi-port TX
Regards,
Ilwoo
The text was updated successfully, but these errors were encountered: