Opened 3 weeks ago

Last modified 4 days ago

#29204 new defect

Inspect circuit queue during padidng decisions

Reported by: mikeperry Owned by:
Priority: Very High Milestone:
Component: Core Tor/Tor Version:
Severity: Normal Keywords: wtf-pad, 041-proposed, network-team-roadmap-2019-Q1Q2
Cc: dgoulet Actual Points:
Parent ID: Points: 5
Reviewer: Sponsor: Sponsor2


We need to inspect the circuit queue or the channel outbuf in some way during padding decisions. The problem is that if a guard stops reading on a channel, and padding keeps getting scheduled by the middle, it will overflow the circuit queue and/or outbuf for the channel and eventually oom.

Ideally, we would make our padding decision based on the EWMA values for the circuit rather than just checking if there were queued cells in the outbuf, but at minimum we need some kind of throttling so we don't keep adding cells to an circuit queue or outbuf above a certain length.

We may also want to use the circuit queue activity to update our last packet sent timers..

Child Tickets

Attachments (1)

Tor-Cell-Flow.jpeg (147.4 KB) - added by mikeperry 3 weeks ago.

Download all attachments as: .zip

Change History (6)

Changed 3 weeks ago by mikeperry

Attachment: Tor-Cell-Flow.jpeg added

comment:1 Changed 5 days ago by gaba

Milestone: 2019Q1Q2

comment:2 Changed 5 days ago by gaba

Milestone: 2019Q1Q2Network Team 2019 Q1Q2

Milestone renamed

comment:3 Changed 5 days ago by gaba

Keywords: network-team-roadmap-2019-Q1Q2 added

comment:4 Changed 5 days ago by gaba

Milestone: Network Team 2019 Q1Q2

comment:5 Changed 4 days ago by mikeperry

Ok I think the first thing to do is to make this be a simple fix that prevents us from triggering OOM conditions. The simplest way to do this is to inspect the circuitmux queue and if it is too full, just not send the padding cell, emit a log, and tell the padding system we did send a padding cell. I filed #29494 for optimizing this solution, which we may or may not need to do depending on the padding machines we make.

Note: See TracTickets for help on using tickets.