multipath-tcp / mptcp

⚠️⚠️⚠️ Deprecated 🚫 Out-of-tree Linux Kernel implementation of MultiPath TCP. 👉 Use https://github.com/multipath-tcp/mptcp_net-next repo instead ⚠️⚠️⚠️
https://github.com/multipath-tcp/mptcp_net-next
Other
889 stars 335 forks source link

num_subflows on ndiffports? #434

Open bluechip016 opened 3 years ago

bluechip016 commented 3 years ago

Hello

My mptcp environment: Scheduler: ndiffports

2 problems: 1.) I tried to download a file from multipath-tcp.org/snapshots Initially 2 MP_CAPABLE was sent through 2 ports- 56778 & 56780. But the whole download was done using 56778. The second subflow- 56780 wasn't used at all. Why/Why not? Wireshark pcap: https://drive.google.com/file/d/1bQMRhhtqOChkBzJDhmtn9cbJHjqsyNBY/view?usp=sharing

2.) I'm trying to play with the number of subflows available in ndiffports path manager. I see in /sys/module/mptcp_ndiffports/parameters/num_subflows the default value is 2. Even if I set it to 8, I still only see 2 ports in play (as described in point 1). Why is that so?

Questions: 1.) What is the highest value that can be given to num_subflows? 2.) Will mptcp path manager (ndiffports) always create those many subflows as the value given in /sys/module/mptcp_ndiffports/parameters/num_subflows? If no, why not? On what factors is the number of paths dependent on?

Thanks in advance! -Arshi.

matttbe commented 3 years ago

Hello,

Scheduler: ndiffports

Path manager I guess, right? How did you configure it? What is the output of sysctl net.mptcp?

Initially 2 MP_CAPABLE was sent through 2 ports- 56778 & 56780.

I guess your browser (or anything else) initiated two connections to the end server. MP_CAPABLE is the flag used to initiate new MPTCP connections. To add more subflows to an MPTCP connection, MP_JOIN are used. If you don't see any SYN with MP_JOIN, it means your client didn't try to create additional subflows. Either a configuration issue (wrong Path Manager?) or network issue (routing rules are OK?)

(PS: you can strip the payload (data) from a packet capture and compress it to reduce the size ;) )

2.) I'm trying to play with the number of subflows available in ndiffports path manager. I see in /sys/module/mptcp_ndiffports/parameters/num_subflows the default value is 2.

How is this path manager compiled? Is it compiled as a module? If not, I don't think you can change this parameter but you need to set it at startup by modifying the kernel command line.

Even if I set it to 8, I still only see 2 ports in play (as described in point 1).

How did you set it to 8? Can you see after that the value has been updated? (again, not sure what is the behaviour when it is not compiled as a module)

1.) What is the highest value that can be given to num_subflows?

I think you might be limited to 64 if I remember well but I'm not sure it makes sense to have more than 8 subflows except if you can have that many different "physical" paths between your client and server.

2.) Will mptcp path manager (ndiffports) always create those many subflows as the value given in /sys/module/mptcp_ndiffports/parameters/num_subflows? If no, why not?

It should I think (if ndiffports is built as a module or the parameter is set in the kernel cmdline). To be tested.

On what factors is the number of paths dependent on?

The kernel has to be able to create new subflow using the same source IP, dest IP, dest port but a different source port. You can have usual errors: no route, not enough port available, etc.