LARN issueshttps://git.nt.uni-saarland.de/groups/LARN/-/issues2019-06-05T12:28:59Zhttps://git.nt.uni-saarland.de/LARN/PRRT/-/issues/38Create HEC Search class2019-06-05T12:28:59ZAndreas SchmidtCreate HEC Search classFile: `/prrt/hec_search.py`
```python
class AbstractSearch():
def search(self, channelParameters, systemParameters, applicationParameters):
raise NotImplemented()
class HECFullSearch(AbstractSearch):
def __init__(self, ...File: `/prrt/hec_search.py`
```python
class AbstractSearch():
def search(self, channelParameters, systemParameters, applicationParameters):
raise NotImplemented()
class HECFullSearch(AbstractSearch):
def __init__(self, np_max):
self.n_max = 255
pass
def search(self, channelParameters, systemParameters, applicationParameters):
self.k_lim = somewhat(applicationParameters.loss_tolerance, self.n_max)
# magic happens here
return CodingConfiguration()
```Ashkan TaslimiAshkan Taslimihttps://git.nt.uni-saarland.de/LARN/PRRT/-/issues/37Add PrrtSystemParameter class2019-06-05T15:26:31ZAndreas SchmidtAdd PrrtSystemParameter class# Add Class
```python
class PrrtSystemParameters:
response_delay
packet_loss_detection_delay
```
* [x] (D_c) Erasure coding delay in seconds. (property `block_coding_delay`)
* Measured by X-Lap (online or offline)
* [x] (D_ptx) ...# Add Class
```python
class PrrtSystemParameters:
response_delay
packet_loss_detection_delay
```
* [x] (D_c) Erasure coding delay in seconds. (property `block_coding_delay`)
* Measured by X-Lap (online or offline)
* [x] (D_ptx) Repair packet transmission delay in seconds. (property `redundancy_packet_transmission_delay`)
* Packet length / btl_dr_fwd
* [x] (D_rs) Response delay in seconds. (property `processing_delay`)
* Measured by X-Lap (online or offline)
* [x] (D_pl) Packet loss detection delay. (property `packet_loss_detection_delay`)
* Measured by X-Lap (online or offline)
* [x] (T_s) Source packet interval in seconds. (property `source_packet_interval`)
* 0.01 as default value.
# Provide system parameters from PrrtSocket
```python
class PrrtSocket:
@property
def system_parameters():
return PrrtSystemParameters()Ashkan TaslimiAshkan Taslimihttps://git.nt.uni-saarland.de/LARN/PRRT/-/issues/36Unittests with Cython2019-04-26T12:44:34ZAndreas SchmidtUnittests with Cython## Commandline
```python -m unittest tests/prrt/prrt_coding_configuration_test```
## Prepare PRRT for Pyximport
**`/prrt/prrt.pyxdeps`**
```
*
```
**`/prrt/prrt.pyxbld`**
```
make_ext():
sources=["prrt/*.pyx"]
```
## Unittest PRRT...## Commandline
```python -m unittest tests/prrt/prrt_coding_configuration_test```
## Prepare PRRT for Pyximport
**`/prrt/prrt.pyxdeps`**
```
*
```
**`/prrt/prrt.pyxbld`**
```
make_ext():
sources=["prrt/*.pyx"]
```
## Unittest PRRT Import
```
# Add Cython import capability
import pyximport
pyximport.install()
# Add local PRRT to import path
import sys
sys.path.append(XX)
sys.path.append(XX + "/prrt")
# Import PRRT
import prrt
```Ashkan TaslimiAshkan Taslimihttps://git.nt.uni-saarland.de/LARN/PRRT/-/issues/35Revisit Pace-Filter2019-10-31T08:29:25ZAndreas SchmidtRevisit Pace-FilterWe should revisit the pace filters with respect to the following:
1. **Window Size and filter-function** should be pace-dependent (i.e. we should employ different ones for the system paces as for the network paces).
2. **Filter-functio...We should revisit the pace filters with respect to the following:
1. **Window Size and filter-function** should be pace-dependent (i.e. we should employ different ones for the system paces as for the network paces).
2. **Filter-functions** in general should be checked for prediction quality as well as runtime complexity. Maybe a 95-percentile filter is a good choice conceptually, but might be prohibitive in terms of runtime overhead.
3. **Cooperation of pace-filters**. Currently, we use multiple filters for the different components of a single pace (i.e. internal, external and dependent). Maybe they should be synchronized, i.e. they expire synchronously. The question is then obviously how we update the *current* three-tuple if a *new* three-tuple comes in (which tuple-component is used to apply MAX?).
## Collection of Ideas
* Moving Media Filter: https://codereview.stackexchange.com/questions/188512/moving-median-filter-medfilt-in-chttps://git.nt.uni-saarland.de/LARN/RNA/Software/-/issues/2Control Demo2018-12-21T15:39:53ZAndreas SchmidtControl DemoMore details: https://git.nt.uni-saarland.de/LARN/RNA/wikis/control-system
* [ ] Decide who should do it.
* [ ] Wait for Rebecca Reck to provide additional material.
* [ ] Checkout Material List
* [ ] Checkout Software AvailabilityMore details: https://git.nt.uni-saarland.de/LARN/RNA/wikis/control-system
* [ ] Decide who should do it.
* [ ] Wait for Rebecca Reck to provide additional material.
* [ ] Checkout Material List
* [ ] Checkout Software Availabilityhttps://git.nt.uni-saarland.de/LARN/PRRT/-/issues/33Potential busywait caused by Pacing2018-11-23T12:25:48ZAndreas SchmidtPotential busywait caused by PacingEvaluations with TUM revealed that if pacing is enabled, their test suite stops working in the following way:
* One peer stops receiving data.
* On this peer, the load of one CPU goes up to 100%.
This needs further investigation as set...Evaluations with TUM revealed that if pacing is enabled, their test suite stops working in the following way:
* One peer stops receiving data.
* On this peer, the load of one CPU goes up to 100%.
This needs further investigation as setting `pacingEnabled` to `false` solved the problem.https://git.nt.uni-saarland.de/LARN/PRRT/-/issues/32Stop retransmissions after block is complete2018-10-18T07:51:09ZAndreas SchmidtStop retransmissions after block is completeCurrently, a retransmission schedule is completely executed. Instead, as soon as k packets of the block have been ACKed, the sender should stop retransmissions.
We might also think about coding the packets only shortly before they are n...Currently, a retransmission schedule is completely executed. Instead, as soon as k packets of the block have been ACKed, the sender should stop retransmissions.
We might also think about coding the packets only shortly before they are needed.https://git.nt.uni-saarland.de/LARN/PRRT/-/issues/29Use RTT as window size for LossStatistics2018-11-02T11:31:31ZAndreas SchmidtUse RTT as window size for LossStatistics`PrrtReceptionTable`:
* Add array with timestamps.
* Use [now - RTT : now] as window.
Hints:
* Binary search for end-points in bitmap
* Use transposed indizes`PrrtReceptionTable`:
* Add array with timestamps.
* Use [now - RTT : now] as window.
Hints:
* Binary search for end-points in bitmap
* Use transposed indizeshttps://git.nt.uni-saarland.de/LARN/PRRT/-/issues/27Repeat Feedback if lost2018-07-20T15:14:15ZAndreas SchmidtRepeat Feedback if lostIf a receiver does not get new data for a while (or does not need to send out new feedback), a special feedback packet should be forwarded, so that the sender can continue to send data.If a receiver does not get new data for a while (or does not need to send out new feedback), a special feedback packet should be forwarded, so that the sender can continue to send data.https://git.nt.uni-saarland.de/LARN/PRRT/-/issues/26Ensure Clock-Synchronization is properly working2018-11-23T10:34:20ZAndreas SchmidtEnsure Clock-Synchronization is properly workingCurrently, the clock-sync start is not robust, so that packets at the beginning of a transmission are quickly discarded. Especially when the inter-packet time is high, it is not capable of reducing the phase error to a small value. With ...Currently, the clock-sync start is not robust, so that packets at the beginning of a transmission are quickly discarded. Especially when the inter-packet time is high, it is not capable of reducing the phase error to a small value. With the current implementation, the residual phase error is proportional to the inter-packet time.
Finally, all timestamps should be taken from the PRRT and not the system clock.
## Synchronization Test
* On receiver, print current time and prrt time.
* Check debug output.
## Integration Test Setup
* Purposefully de-synchronize two systems (e.g. RNAs)
* Verify that without a code change, no packets are received
* Add code changes (replacing `get_current_time()` with `get_prrt_time()`) and check if this leads to packets being received.https://git.nt.uni-saarland.de/LARN/PRRT/-/issues/23Receiver should occassionally call the clean-up routine2018-07-10T10:56:23ZAndreas SchmidtReceiver should occassionally call the clean-up routinehttps://git.nt.uni-saarland.de/LARN/PRRT/-/issues/22Improve PrrtBlock internal lists efficiency2018-11-02T11:32:38ZAndreas SchmidtImprove PrrtBlock internal lists efficiencyCurrently, PrrtBlock uses linked lists internally to store packets. Accesses are linear from the start. There should be a more efficient algorithm and data structure for this.
Run `gprof` to look for obvious performance issues.Currently, PrrtBlock uses linked lists internally to store packets. Accesses are linear from the start. There should be a more efficient algorithm and data structure for this.
Run `gprof` to look for obvious performance issues.https://git.nt.uni-saarland.de/LARN/PRRT/-/issues/21Improve Decoding Efficiency2018-07-10T10:51:58ZAndreas SchmidtImprove Decoding EfficiencyCurrently, all redundancy packets are reconstructed when decoding a block. It would suffice to reconstruct the missing data packets.Currently, all redundancy packets are reconstructed when decoding a block. It would suffice to reconstruct the missing data packets.https://git.nt.uni-saarland.de/LARN/PRRT/-/issues/20Create PrrtApplicationParameters class2019-06-28T06:41:51ZAndreas SchmidtCreate PrrtApplicationParameters classThe class should store:
- [x] Maximum latency is (floating point) seconds.
- [x] Maximum residual loss rate in percent.
- [x] data_rate
Should come with convenience methods:
- [x] `__str__`
- [x] `__repr__`
- [ ] `__eq__`
It should a...The class should store:
- [x] Maximum latency is (floating point) seconds.
- [x] Maximum residual loss rate in percent.
- [x] data_rate
Should come with convenience methods:
- [x] `__str__`
- [x] `__repr__`
- [ ] `__eq__`
It should also nicely serialize to a 2-tuple to be used in Numpy arrays.Ashkan TaslimiAshkan Taslimihttps://git.nt.uni-saarland.de/LARN/PRRT/-/issues/19Create PrrtChannelParameters class2019-05-17T11:26:33ZAndreas SchmidtCreate PrrtChannelParameters classThe class should store (for both `_fwd` and `_bwd`):
- [x] Packet loss rate in percent. (property `loss_rate_[...]`)
- [x] Propagation round trip time in seconds. (property `rt_prop_[...]`)
- [x] Bottleneck data rate in bits per second....The class should store (for both `_fwd` and `_bwd`):
- [x] Packet loss rate in percent. (property `loss_rate_[...]`)
- [x] Propagation round trip time in seconds. (property `rt_prop_[...]`)
- [x] Bottleneck data rate in bits per second. (property `btl_dr_[...]`)
It should provide computed properties:
- [x] Bandwidth-delay product in bits (`btl_dr * rt_prop` for both directions).
- [ ] Minimal redundancy information in percent (`ri_min()`).
- [ ] Minimal redundancy information given residual error in percent (`ri_min_residual(applicationParam.max_loss)`).
Should come with convenience methods:
- [x] `__str__`
- [x] `__repr__`
- [ ] `__eq__`
It should also nicely serialize to a 3-tuple to be used in Numpy arrays.
Python properties: https://www.programiz.com/python-programming/propertyAshkan TaslimiAshkan Taslimihttps://git.nt.uni-saarland.de/LARN/PRRT/-/issues/18Enhance PrrtCodingConfiguration class2019-05-15T15:05:32ZAndreas SchmidtEnhance PrrtCodingConfiguration class- [ ] Provide `PrrtCodingConfiguration.__eq__()` method.
- [x] Add `PrrtCodingConfiguration.ri(channelParameters)` method that yields how much redundancy this coding configuration causes, given a certain channel.
- [x] Add `is_valid_for(...- [ ] Provide `PrrtCodingConfiguration.__eq__()` method.
- [x] Add `PrrtCodingConfiguration.ri(channelParameters)` method that yields how much redundancy this coding configuration causes, given a certain channel.
- [x] Add `is_valid_for(applicationParameters, channelParameters, systemParameters)` method to check if it is able to fulfill application parameters given channel and system parameters.
- [x] Add `is_maximum_latency_fulfilled(applicationParameters, channelParameters, systemParameters)`
- [x] Add `is_maximum_loss_fulfilled(applicationParameters, channelParameters, systemParameters)`Ashkan TaslimiAshkan Taslimihttps://git.nt.uni-saarland.de/LARN/PRRT/-/issues/15Update BBR to recent state2018-08-01T16:25:23ZAndreas SchmidtUpdate BBR to recent stateThere are updates on BBR at IETF102: https://datatracker.ietf.org/meeting/102/materials/slides-102-iccrg-an-update-on-bbr-work-at-google-00
Multiple commits have happened over here: https://git.kernel.org/pub/scm/linux/kernel/git/torval...There are updates on BBR at IETF102: https://datatracker.ietf.org/meeting/102/materials/slides-102-iccrg-an-update-on-bbr-work-at-google-00
Multiple commits have happened over here: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/log/net/ipv4/tcp_bbr.c
- [ ] 2018-05-02: tcp_bbr: fix to zero idle_restart only upon S/ACKed data
- [ ] 2018-03-16: net-tcp_bbr: set tp->snd_ssthresh to BDP upon STARTUP exit
- [ ] 2018-03-01: tcp_bbr: remove bbr->tso_segs_goal
- [ ] 2018-03-01: tcp_bbr: better deal with suboptimal GSO (II)
- [ ] 2018-02-01: tcp_bbr: fix pacing_gain to always be unity when using lt_bw
- [ ] 2018-01-19: tcp: avoid min RTT bloat by skipping RTT from delayed-ACK in BBR
- [ ] 2017-12-08: tcp_bbr: reset long-term bandwidth sampling on loss recovery undo
- [ ] 2017-12-08: tcp_bbr: reset full pipe detection on loss recovery undo
- [ ] 2017-12-08: tcp_bbr: record "full bw reached" decision in new full_bw_reached bit
- [ ] 2017-07-15: tcp_bbr: init pacing rate on first RTT sample
- [ ] 2017-07-15: tcp_bbr: remove sk_pacing_rate=0 transient during init
- [ ] 2017-07-15: tcp_bbr: introduce bbr_init_pacing_rate_from_rtt() helper
- [x] 2017-07-15: tcp_bbr: introduce bbr_bw_to_pacing_rate() helper
- [x] 2017-07-15: tcp_bbr: cut pacing rate only if filled pipehttps://git.nt.uni-saarland.de/LARN/PRRT/-/issues/13Gapfilling Mode2019-12-20T16:45:11ZAndreas SchmidtGapfilling ModeThere should be a `receive_gapfilling(..., fill_value)` mode with the following traits:
* If an expiry date approaches and the data is not there, a "zero" packet is delivered.
* The filling pattern (e.g. "zero" should be configurable on...There should be a `receive_gapfilling(..., fill_value)` mode with the following traits:
* If an expiry date approaches and the data is not there, a "zero" packet is delivered.
* The filling pattern (e.g. "zero" should be configurable on the receive call).
ToDo:
* Think about how to predict an "expiry" of a packet that has not been sent or recovered.https://git.nt.uni-saarland.de/LARN/PRRT/-/issues/11Add Multicast Support2018-10-19T08:44:22ZAndreas SchmidtAdd Multicast Support**Goal: Support multicast addressing schemes.**
**Implementation**
* `PrrtSocket_create()` gets additional IP parameter (Bind IP / Peer IP)
* IP Parameter
* if `isSender`: Peer IP
* if `!isSender`: Receiving IP (bind to &...**Goal: Support multicast addressing schemes.**
**Implementation**
* `PrrtSocket_create()` gets additional IP parameter (Bind IP / Peer IP)
* IP Parameter
* if `isSender`: Peer IP
* if `!isSender`: Receiving IP (bind to & add IP multicast listening)
* If `IP` in subnet 224.0.0.0/4 => `socket->multicast = true`
* Data Socket: Bind to IP (and add IP multicast listening if receiver)
* Feedback Socket: Bind to IP & add IP multicast listening
* Multiplex feedback of multiple receivers in feedbackReceiver
* Default IP for PRRT: 224.0.0.11
**Tutorials**
* http://openbook.rheinwerk-verlag.de/linux_unix_programmierung/Kap11-018.htm
* http://ntrg.cs.tcd.ie/undergrad/4ba2/multicast/antony/example.htmlhttps://git.nt.uni-saarland.de/LARN/PRRT/-/issues/5Receiver-Based Coding Parameters and Channel State Information2019-12-20T16:45:54ZAndreas SchmidtReceiver-Based Coding Parameters and Channel State Information* Channel state information should be individual to a remote receiver.
* Coding parameters should be individual to a remote receiver.* Channel state information should be individual to a remote receiver.
* Coding parameters should be individual to a remote receiver.