<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css" style="display:none;"><!-- P {margin-top:0;margin-bottom:0;} --></style>
</head>
<body dir="ltr">
<div id="divtagdefaultwrapper" style="font-family: Calibri, Arial, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols;" dir="ltr">
<p style="font-size: 12pt; color: rgb(0, 0, 0);">Hi Toke,</p>
<p style="font-size: 12pt; color: rgb(0, 0, 0);"><br>
</p>
<p style="font-size: 12pt; color: rgb(0, 0, 0);">Thank you for your quick reply.</p>
<p style="font-size: 12pt; color: rgb(0, 0, 0);"><br>
</p>
<div>
<div style="font-size: 12pt; color: rgb(0, 0, 0);">
<div id="x_divRplyFwdMsg" dir="ltr">
<div dir="ltr" style="text-align: left;"><span style="font-size: 10pt; color: rgb(189, 19, 152);">"Mohan, Nitinder" <nitinder.mohan@helsinki.fi> writes:</span></div>
</div>
</div>
<font>
<div class="PlainText" style="font-size: 10pt; color: rgb(0, 0, 0);">
<div dir="ltr" ,="" style="text-align:left;"><span style="color: rgb(189, 19, 152);"></span><br>
</div>
<div dir="ltr" ,="" style="text-align:left;"><span style="color: rgb(189, 19, 152);">> Hi,</span><br>
</div>
<div dir="ltr" ,="" style="text-align:left;"><span style="color: rgb(189, 19, 152);">></span><br>
</div>
<div dir="ltr" ,="" style="text-align:left;"><span style="color: rgb(189, 19, 152);">> I am a
</span><span style="color: rgb(189, 19, 152);">Ph.D.</span><span style="color: rgb(189, 19, 152);"> student working on a
</span><span style="color: rgb(189, 19, 152);">bufferbloat</span><span style="color: rgb(189, 19, 152);"> resistant scheduler for</span><br>
</div>
<div dir="ltr" ,="" style="text-align:left;"><span style="color: rgb(189, 19, 152);">> Multi-Path TCP. I was unsure of which list my question would be more</span><br>
</div>
<div dir="ltr" ,="" style="text-align:left;"><span style="color: rgb(189, 19, 152);">> suitable
</span><span style="color: rgb(189, 19, 152);">in</span><span style="color: rgb(189, 19, 152);"> so I am sending this in both make-wifi-fast and bloat-dev</span><br>
</div>
<div dir="ltr" ,="" style="text-align:left;"><span style="color: rgb(189, 19, 152);">> list.</span><br>
</div>
<div dir="ltr" ,="" style="text-align:left;"><span style="color: rgb(189, 19, 152);"></span><br>
</div>
<div dir="ltr" ,="" style="text-align:left;"><span style="color: rgb(189, 19, 152);">Sounds interesting! What, exactly, is such a scheduler going to be</span><br>
</div>
<div dir="ltr" ,="" style="text-align:left;"><span style="color: rgb(189, 19, 152);">doing? :)</span><br>
</div>
<span style="color: rgb(189, 19, 152);"></span><br>
<span style="font-size: 12pt;"><span style="color: rgb(0, 0, 0);">The MPTCP scheduler takes into account lower layer buffer levels and schedules traffic over the interface to avoid HW bufferbloat. The simulation testing gave us quite good results. Now we wanted
 to implement the algorithm on linux kernel to evaluate our approach. As I am not very well-versed with linux kernel, I was having some problems implementing this.</span></span><br>
<br>
<span style="color: rgb(189, 19, 152);">> While implementing the scheduler in </span>
<span style="color: rgb(189, 19, 152);">linux</span><span style="color: rgb(189, 19, 152);"> kernel, I was unable to get</span><br>
<span style="color: rgb(189, 19, 152);">> the current number of bytes in hardware queue for
</span><span style="color: rgb(189, 19, 152);">wlan</span><span style="color: rgb(189, 19, 152);"> interface. As</span><br>
<span style="color: rgb(189, 19, 152);">> currently, </span><span style="color: rgb(189, 19, 152);">linux</span><span style="color: rgb(189, 19, 152);"> does not employ BQL for wifi devices, I could not get</span><br>
<span style="color: rgb(189, 19, 152);">> this value from dql->num_queued defined in dynamic_queue_limits.h. I</span><br>
<span style="color: rgb(189, 19, 152);">> also tried to get queue length from Queueing discipline structure i.e.</span><br>
<span style="color: rgb(189, 19, 152);">> qdisc->qstats.qlen defined in sch_generic.h yet it still gives me a</span><br>
<span style="color: rgb(189, 19, 152);">> zero value (I am getting zero values for other parameters in
</span><span style="color: rgb(189, 19, 152);">qstat</span><span style="color: rgb(189, 19, 152);"> as</span><br>
<span style="color: rgb(189, 19, 152);">> well so I am sure it is not because the queue length never becomes</span><br>
<span style="color: rgb(189, 19, 152);">> more than 0).</span><br>
<span style="color: rgb(189, 19, 152);">></span><br>
<span style="color: rgb(189, 19, 152);">> If you have any idea for getting queue length for wireless interfaces,</span><br>
<span style="color: rgb(189, 19, 152);">> please do reply. Any help would be highly appreciated.</span><br>
<span style="color: rgb(189, 19, 152);"></span><br>
<span style="color: rgb(189, 19, 152);">There's no general interface to get the queue length for WiFi</span><br>
<span style="color: rgb(189, 19, 152);">interfaces. If you're using a driver that is using the mac80211</span><br>
<span style="color: rgb(189, 19, 152);">intermediate queues (i.e., ath9k, ath10k or mt76), there are</span><br>
<span style="color: rgb(189, 19, 152);">fq->backlock and fq->memory_usage which live inside the struct
</span><span style="color: rgb(189, 19, 152);">fq</span><span style="color: rgb(189, 19, 152);">
</span><span style="color: rgb(189, 19, 152);">in</span><br>
<span style="color: rgb(189, 19, 152);">struct</span><span style="color: rgb(189, 19, 152);"> ieee80211_local. However, these are private state vars inside</span><br>
<span style="color: rgb(189, 19, 152);">mac80211, so not immediately accessible from other parts of the kernel.</span><br>
<span style="color: rgb(189, 19, 152);">You could add an access function to mac80211, though.</span></div>
<div class="PlainText" style="font-size: 10pt;"><font color="#bd1398"><br>
</font></div>
<div class="PlainText"><font color="#bd1398"><span style="color: rgb(0, 0, 0);"><span style="font-size: 10pt;"></span>I am using ath9k drivers so fq->backlog would work well for me. I was giving the mac80211 structure a look but cant seem to figure out an access
 point to it (say from netdevice.h). Do you have an idea of how to retrieve a struct in mac80211 that could point me to struct fq?</span><br>
</font><span style="font-size: 10pt; color: rgb(189, 19, 152);"></span><br>
<span style="font-size: 10pt; color: rgb(189, 19, 152);">Other drivers will have their own queueing implementations, that you</span><br>
<span style="font-size: 10pt; color: rgb(189, 19, 152);">probably can't get at. Some devices will even have most of their</span><br>
<span style="font-size: 10pt; color: rgb(189, 19, 152);">queueing in firmware.</span><br>
<span style="font-size: 10pt; color: rgb(189, 19, 152);"></span><br>
<span style="font-size: 10pt; color: rgb(189, 19, 152);">-Toke</span><br>
</div>
<div class="PlainText"><span style="font-size: 10pt; color: rgb(189, 19, 152);"><br>
</span></div>
<div class="PlainText"><span style="font-size: 10pt; color: rgb(189, 19, 152);"><span style="color: rgb(0, 0, 0);"><span style="font-size: 12pt;">Thank you for your help.</span></span><br>
</span></div>
<div class="PlainText"><span style="font-size: 10pt; color: rgb(189, 19, 152);"><span style="color: rgb(0, 0, 0);"><span style="font-size: 12pt;"><br>
</span></span></span></div>
<div class="PlainText">Best,</div>
<div class="PlainText"><br>
</div>
<div class="PlainText">Nitinder Mohan</div>
</font></div>
</div>
</body>
</html>