This is sort of the wrong list for this topic.
A preferable scheme would be one that also weeds out misbehaving TCP
implementations. This brings us back to 1984 (or earlier) and the
idea of SFQ (stochastic fair queueing). Add RED GW, shake lightly
(never stirred?) and maybe you've got something.
Briefly: You have N queues. Take the src/dst pair and hash it, and
put it in a queue, service the queues using round robin. That's SFQ
in a nutshell.
A somewhat orthogonal issue is how to decide when to drop. That's
where RED, EPD, SPD, and others come in.
Even with tail drop there is an issue of how to combine the fair
queueing with the drop strategy. Do you carve the available buffer
space into equal allocations or wait for some percentage of the entire
buffer space to exhaust, or something else?
Combining SFQ (or WFQ with SFQ suballocations ala CBQ or whatever) and
RED (or EPD or Cisco SPD) is left as an exercise to the reader. Send
your solutions (and if its a good one maybe your resume:) to your
favorite router vendor or take the discussion to end2end-interest.