Dynamic radio power scaling in RIOT

Hello,

For a small research project as a part of my study, I did some research on the effectiveness of dynamic radio output scaling. The general idea is that to save power, the radio has to transmit at only the power required to reach the destination. For the research I wanted to build a practical setup instead of a simulation as one of the research goals.

The setup I've build works by estimating the minimum required powered and using layer 2 acks (or the lack thereof) as feedback. At this point I have a mostly working power scaling proof of concept implemented in RIOT. For an example measurement: https://bergzand.net/misc/etx5.svg which is a measurement of a number of packets. The blue dots is an ETX estimation measured based on the feedback from the radio module. The Red line is the power configured for that packet. As visible, power is scaled down until a stable level is reached. Power keeps oscillating around this level until a lot of interference is noticed, then the power sweeps back up.

The merit of this whole idea is that it should both save the node power, but when implemented correctly also improve the total throughput of the network. This last point because nodes transmit with less power, thus causing less interference with nodes further away.

If there is interest in having this feature merged in mainline RIOT-os, I'm willing to work on this to make sure that the code quality is as required. The code can be viewed and tracked at https://github.com/bergzand/RIOT/tree/mwn2

Regards, Koen

Hi Koen,

awesome! IMO this is interesting work and I'd like to push this forward, at least to use it myself at some point in time, though I can't promise an in-depth review so soon -> let's start polishing "later".

Did you already start measurements of the actual consumption saving of a node? Do you plan to evaluate your approach in different network topologies?

Cheers Peter

Hi Koen, This sounds to me like a very promising feature for RIOT! Both the power saving aspect as well as reducing interference for neighboring networks are important features. Especially for urban environments it will be important to not pollute the radio environment more than necessary when IoT devices start becoming ubiquitous.

Best regards, Joakim NohlgÄrd Eistec AB

Hi,

For now this is all quite proof of concept. I haven't had the time to measure the actual power saving.

There are still a few problems that limit the actual power saving. The way I've implemented it now, only transmit power is limited. Before a transmission, the radio power is configured, and almost immediately after, the transmit power is set to full power again. This way L2 ACK frames are always send at full power and the power scale algorithms of nodes don't affect each other. Furthermore, if I have to believe the datasheets, the radio's seem to also consume comparable current when in RX-mode. For now, until I've confirmed the actual power draw of the radio, I think the most benefits are in the reduced transmission range and thus reduced interference between nodes.

The other limitation is that my implementation depends on the radio reporting the frame retries. At least the mrf24j40 and the at86rf233 support this. I don't know about the kw2xrf. The other variants of the at86rf2xx don't seem to support reporting the frame retries, they only report whether at least an ACK was received or not.

I don't have any plans of repeated tests in network topologies at the moment, mostly because I don't have a large enough network at my disposal. I'm still trying to get at least repeatable results from my small setup, but random interference makes this difficult. Any proposals for this are welcome. I'd love to have some larger tests on node interaction here. In the future I'd like to try to have RPL minimize power consumption as a route metric.

The actual power scaling algorithms I've implemented are based on TCP congestion control. TCP congestion control also has the goal of approaching a limit where loss occurs when the limit is passed. Two algorithm are implemented: A "Reno" style additive increase, multiplicative decrease and a "Cubic" approach style function. As soon as I have some results where I can actually compare both algorithm I'll share them here.

One of the other ideas for algorithms I've had so far was a PID kind of control loop where a predefined ETX value is used as a setpoint. This way a configurable amount of loss versus power saving might be achieved. If somebody has a different proposal for an algorithm, I'd like to know. I'm currently trying to use only ETX or other already known values instead of a negotiating algorithm to keep the implementation compatible with different nodes and/or operating systems.

Regards, Koen

Hi Koen,

thanks for your explanations! Are you aware of the FIT IoT-lab testbed?

https://www.iot-lab.info/

This should give you access to several hundred iotlab-m3 nodes which are equipped with an at86rf231. There is also one site with some tens of samr21-xpros, equipped with an at86rf233.

Would be great if you keep me/us informed about your results :-).

Best Peter

Hi,

Hi Koen,

thanks for your explanations! Are you aware of the FIT IoT-lab testbed?

https://www.iot-lab.info/

This should give you access to several hundred iotlab-m3 nodes which are equipped with an at86rf231. There is also one site with some tens of samr21-xpros, equipped with an at86rf233.

You just made my day, I thought they only had nodes with the at86rf231

Would be great if you keep me/us informed about your results :-).

I should have some slides with results this friday.

Regards, Koen