-
Notifications
You must be signed in to change notification settings - Fork 4
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
Obtaining congestion window measurements #5
Comments
Hm, that's very strange, there's definitely no reason that the algorithm should stop receiving callbacks after any amount of time. The only reason you should stop receiving callbacks is if the traffic stops. (We've also used slog as-is in the repo for all of our experiments and haven't run into any issues with it, so I don't think you should need to change anything there. If slog is unable to keep up, it will print a warning message saying so.) The script you linked to runs a comparison between algorithms on ccp and their in-kernel implementation. We are only using Technically there are a few places in the kernel (or more generally any datapath) where it updates the snd_cwnd on its own outside of CCP's control (e.g. here), but CCP is overwriting it so that shouldn't really matter. |
Sure, my experiments are comparing streaming adaptation mechanisms with respect to various congestion control algorithms. I did see some warning messages from That makes sense - it's good to know I should be able to simply print the congestion window from the algorithm. I'll continue to investigate why exactly I'm unable to see the expected output, I'm reasonably sure CCP doesn't unexpectedly terminate since I monitor the pid of the process and I can see from logging on the client side that data continues to be received. Interestingly, the bitrate received by the client ceases to show any variation from around the same time in the experiment that logging stops - it may be CCP no longer modifies the congestion window after this point in time. I will re-run my experiments using an unmodified version of this library and re-examine the client logs to see if the same behaviour occurs. |
Having re-examined the client logs generated when re-running my experiments with this library at commit Looking at |
Another update - I believe I have identified the cause of the lack of variance in requested bitrate as a problem with my experimental set up. My only remaining issue is the lack of logs which I believe is possibly related to the issue I linked to in my previous comment. Let me know if there is anything else I can do to try and help identify the root cause, I'd be happy to contribute to a solution. |
Hi @darArch, |
I am currently using CCP as part of a research project but I am encountering problems in logging congestion control information correctly, specifically, no logs are produced after around 30 seconds from starting the userspace agent. I am using the
reno
binary generated from this project, details of modifications to support obtaining measurements are given below.In
impl GenericCongAvoidAlg for Reno
insrc/reno.rs
, a reference to theDatapathInfo
struct is passed and additional information about the flow is stored to be logged out later:In
impl GenericCongAvoidFlow for Reno
insrc/reno.rs
the following log statement is added in each of the implemented functions in order to provide information about the congestion state of the flow:In addition, the trait declaration for
GenericCongAvoidAlg
insrc/lib.rs
is modified mirroring the implementation detail above:Some minor modifications were made to
src/cubic.rs
in order to comply with the modified trait declaration, but these compile successfully and the cubic binary has not been used.Initially I used the default logging set up which is initialised in
src/bin/reno.rs
as:I redirected the standard out and standard error streams to a file and observed the problem with logs stopping after around 30 seconds. I then added the following to
src/bin_helper.rs
to instead log directly to a file, thechan_size
of2048
was arrived at through trial and error, this figure results in no messages advising of message loss appearing in the resulting file:So far as I can tell, the main userspace agent is running correctly since the data flows measured at the client side show an approximately equal share of bandwidth being assigned to each but for some reason the log output stops after around 30 seconds. In an attempt to eliminate the
slog
library as a cause I replaced the above statements with simpleprintln!(...)
andeprintln!(...)
lines but the same behaviour was observed.Given this doesn't seem to be a problem with the logging method, is there some behaviour (either here or in portus) that causes the four functions in
impl GenericCongAvoidFlow for Reno
to no longer be called after a certain point in time?Additionally, given the example script in the eval-scripts repository uses
tcpprobe
to measure the congestion window, is there a reason you chose not to instrument the userspace code to obtain this measurement?I've previously been using the
tcp_probe
tracepoint to obtain measurements of the congestion window for the kernel datapath using the in-kernel implementations of Reno & Cubic. I'd like to include the QUIC datapath as part of my research and I intended to use the instrumentation detailed above as a single solution for obtaining necessary measurements.In summary:
impl GenericCongAvoidFlow for Reno
block insrc/reno.rs
deliberate?The text was updated successfully, but these errors were encountered: