All of lore.kernel.org
 help / color / mirror / Atom feed
From: Mat Martineau <mathewm@codeaurora.org>
To: Peter Hurley <peter@hurleysoftware.com>
Cc: Gustavo Padovan <padovan@profusion.mobi>,
	Luiz Augusto von Dentz <luiz.dentz@gmail.com>,
	"linux-bluetooth@vger.kernel.org"
	<linux-bluetooth@vger.kernel.org>
Subject: Re: [PATCH 0/3] RFC: prioritizing data over HCI
Date: Mon, 8 Aug 2011 16:29:51 -0700 (PDT)	[thread overview]
Message-ID: <alpine.DEB.2.02.1108081628030.29183@mathewm-linux> (raw)
In-Reply-To: <20110805191210.GA2537@joana>


On Fri, 5 Aug 2011, Gustavo Padovan wrote:

> * Peter Hurley <peter@hurleysoftware.com> [2011-08-04 19:09:37 -0400]:
>
>> Hi Mat,
>>
>> On Thu, 2011-08-04 at 13:37 -0400, Mat Martineau wrote:
>>
>>> I had a recent discussion with Gustavo about HCI queuing issues with
>>> ERTM:
>>>
>>> http://www.spinics.net/lists/linux-bluetooth/msg13774.html
>>>
>>> My proposal is to move tx queuing up to L2CAP, and have the HCI tx
>>> task only handle scheduling.  Senders would tell HCI they have data to
>>> send, and HCI would call back to pull data.  I've been focused on
>>> L2CAP - it would be possible to make a similar queuing change to
>>> SCO/eSCO/LE, but not strictly necessary.
>>
>> Would you please clarify this approach (perhaps in a separate thread)?
>>
>> For example, how does having tx queues in l2cap_chan (instead of the
>> hci_conn) solve the latency problems in ERTM when replying to
>> REJ/SREJ/poll? Won't there potentially be just as much data already
>> queued up? Is the plan to move the reply to the front of the tx queue
>> because reqseq won't need to be assigned until the frame is actually
>> pulled off the queue?
>
> Exactly. ERTM connections can get dropped if the too much data is buffered and
> we need to send final bit for example.

Right now, an outgoing ERTM frame goes through two queues: a 
channel-specific ERTM tx queue and the HCI ACL data_q.  The ERTM 
control field is not constructed until a frame is removed from the 
ERTM tx queue and pushed to the HCI data_q, so the s-frame latency 
problem comes in when the the HCI data_q gets deep.  S-frames are 
already pushed directly in to the HCI data_q, bypassing the data tx 
queue.

>From an ERTM perspective, the goal is to defer assignment of reqseq 
and f-bit values as late as possible, so the remote device gets the 
most recent information on data frames and polls that have been 
received.  The optimal thing to do (by this measurement, anyway) is to 
build the ERTM control field as data is sent to the baseband -- in 
other words, to eliminate the HCI data_q altogether.

(Yeah, without the data_q, ERTM would need additional queues for 
s-frames and retransmitted i-frames)

So, without a data_q, what makes sense?  If there are ACL buffers 
available and no pending L2CAP senders, it would be great to push data 
straight out to the baseband.  If we're blocked waiting for 
num_completed_packets, then receipt of num_completed_packets is the 
natural time to pull data from the tx queues that now happen to be up 
in the L2CAP layer.

There are certainly locking, task scheduling, data scheduling, QoS, 
and efficiency issues to consider.  This is just a general description 
for now, and I'm trying to see if there's enough interest (or few 
enough obvious gotchas) to put some serious effort in to moving 
forward.


>>> This is different from the problem you're solving, but as long as
>>> we're talking about big changes to HCI tx, I think we could make some
>>> changes that help out with prioritization and queuing across all
>>> channels (whether they're going to the same remote device or different
>>> remote devices).
>>>
>>> It could be more efficient to schedule this way since HCI wouldn't
>>> have to iterate over all of the connections and queues - it would only
>>> have to review the prioritized list of pending sends. Might be a more
>>> fitting structure for QoS too.
>>
>> Wouldn't this 'prioritized list of pending sends' need to be locked to
>> prevent update while reading? ISTM that contention might be fairly high
>> for a single, shared resource like that.

If there was a prioritized list that was manipulated on multiple 
threads, then a lock certainly would be required.  Maybe it would work 
to keep the information sent between threads pretty simple (just an "I 
have data" bit), then any complex lists could be manipulated in a more 
controlled HCI-only context.  The prioritization code could run only 
when processing num_completed_packets.


Thanks for the great feedback so far!  Seeing any major flaws at this 
high level?


Regards,

--
Mat Martineau
Employee of Qualcomm Innovation Center, Inc.
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum


  reply	other threads:[~2011-08-08 23:29 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-08-03 13:11 [PATCH 0/3] RFC: prioritizing data over HCI Luiz Augusto von Dentz
2011-08-03 13:11 ` [RFC 1/3] Bluetooth: " Luiz Augusto von Dentz
2011-08-03 16:25   ` Peter Hurley
2011-08-03 17:49     ` Luiz Augusto von Dentz
2011-08-03 20:44       ` Gustavo Padovan
2011-08-03 20:53       ` Peter Hurley
2011-08-04  9:04         ` Luiz Augusto von Dentz
2011-08-03 13:11 ` [RFC 2/3] Bluetooth: set skbuffer priority based on L2CAP socket priority Luiz Augusto von Dentz
2011-08-03 13:11 ` [RFC 3/3] Bluetooth: make use sk_priority to priritize RFCOMM packets Luiz Augusto von Dentz
2011-08-03 21:14 ` [PATCH 0/3] RFC: prioritizing data over HCI Peter Hurley
2011-08-04  8:20   ` Luiz Augusto von Dentz
2011-08-04 12:55     ` Peter Hurley
2011-08-04 17:37 ` Mat Martineau
2011-08-04 23:09   ` Peter Hurley
2011-08-05 19:12     ` Gustavo Padovan
2011-08-08 23:29       ` Mat Martineau [this message]
2011-08-09  4:32         ` Gustavo Padovan
2011-08-10 17:38           ` Mat Martineau
2011-08-10 18:16             ` Luiz Augusto von Dentz
2011-08-10 22:15               ` Mat Martineau
2011-08-10 19:43             ` Peter Hurley
2011-08-11  0:18             ` Marcel Holtmann
2011-08-05  6:09   ` Luiz Augusto von Dentz
2011-08-05 19:14     ` Gustavo Padovan
2011-08-05 22:49       ` Luiz Augusto von Dentz
2011-08-06 18:53         ` Gustavo Padovan

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=alpine.DEB.2.02.1108081628030.29183@mathewm-linux \
    --to=mathewm@codeaurora.org \
    --cc=linux-bluetooth@vger.kernel.org \
    --cc=luiz.dentz@gmail.com \
    --cc=padovan@profusion.mobi \
    --cc=peter@hurleysoftware.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.