I noticed this bit of discussion in tcp_recvmsg. It implies that a better
queuing policy would be good. But it is confusing English (Alexey?) so
not sure where to start.
> if (!sysctl_tcp_low_latency && tp->ucopy.task == user_recv) {
> /* Install new reader */
> if (!user_recv && !(flags & (MSG_TRUNC | MSG_PEEK))) {
> user_recv = current;
> tp->ucopy.task = user_recv;
> tp->ucopy.iov = msg->msg_iov;
> }
>
> tp->ucopy.len = len;
>
> BUG_TRAP(tp->copied_seq == tp->rcv_nxt ||
> (flags & (MSG_PEEK | MSG_TRUNC)));
>
> /* Ugly... If prequeue is not empty, we have to
> * process it before releasing socket, otherwise
> * order will be broken at second iteration.
> * More elegant solution is required!!!
> *
> * Look: we have the following (pseudo)queues:
> *
> * 1. packets in flight
> * 2. backlog
> * 3. prequeue
> * 4. receive_queue
> *
> * Each queue can be processed only if the next ones
> * are empty. At this point we have empty receive_queue.
> * But prequeue _can_ be not empty after 2nd iteration,
> * when we jumped to start of loop because backlog
> * processing added something to receive_queue.
> * We cannot release_sock(), because backlog contains
> * packets arrived _after_ prequeued ones.
> *
> * Shortly, algorithm is clear --- to process all
> * the queues in order. We could make it more directly,
> * requeueing packets from backlog to prequeue, if
> * is not empty. It is more elegant, but eats cycles,
> * unfortunately.
> */
> if (!skb_queue_empty(&tp->ucopy.prequeue))
> goto do_prequeue;
>
> /* __ Set realtime policy in scheduler __ */
> }
>
> if (copied >= target) {
> /* Do not sleep, just process backlog. */
> release_sock(sk);
> lock_sock(sk);
> } else
>
--
Stephen Hemminger <[email protected]>
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
[Index of Archives]
[Kernel Newbies]
[Netfilter]
[Bugtraq]
[Photo]
[Stuff]
[Gimp]
[Yosemite News]
[MIPS Linux]
[ARM Linux]
[Linux Security]
[Linux RAID]
[Video 4 Linux]
[Linux for the blind]
[Linux Resources]