From: Gustavo Padovan <padovan@profusion.mobi>
To: Mat Martineau <mathewm@codeaurora.org>
Cc: Peter Hurley <peter@hurleysoftware.com>,
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: Tue, 9 Aug 2011 01:32:10 -0300 [thread overview]
Message-ID: <20110809043210.GA2594@joana> (raw)
In-Reply-To: <alpine.DEB.2.02.1108081628030.29183@mathewm-linux>
* Mat Martineau <mathewm@codeaurora.org> [2011-08-08 16:29:51 -0700]:
>
> 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.
Getting rid of conn->data_q makes sense. I started a patch to create the
struct hci_chan that Luiz proposed. It would be one HCI channel per L2CAP
connection. The buffer (acl_cnt) would be now divided by the number of
channels and not the number of connections. This is a first step to support
QoS and priority inside ERTM. QoS then would just need new scheduler rules.
+struct hci_chan {
+ struct list_head list;
+ struct hci_conn *conn;
+ struct sk_buff_head data_q;
+ unsigned int sent;
+}
So in the next step for ERTM we move the queue to L2CAP and create a callback
to call from HCI at the moment of push data to the baseband. The function in
L2CAP would set the last control bits in the first packet of the queue and
sent it through.
Then the queue can be split in two by adding a pointer that will mark which
element divides the queue between prio and normal. New prio skbs would just be
queued after this element and before the rest.
I still need to think on locking here. (and also finish my patches that move
all the bluetooth to workqueue)
Gustavo
next prev parent reply other threads:[~2011-08-09 4:32 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
2011-08-09 4:32 ` Gustavo Padovan [this message]
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=20110809043210.GA2594@joana \
--to=padovan@profusion.mobi \
--cc=linux-bluetooth@vger.kernel.org \
--cc=luiz.dentz@gmail.com \
--cc=mathewm@codeaurora.org \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).