Created
January 28, 2012 04:45
-
-
Save alphazero/1692671 to your computer and use it in GitHub Desktop.
Comparing 3 queues in a 1:1 Cons/Prod in tight loop for fairly long runs
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(newenqueue).java/*========================================== | |
LBQ -> LinkedBlockingQueue | |
PCQ -> ConsumerProducerQueue | |
TCPQ -> TCPQueueBase | |
Notes: | |
- benchmarks are notoriously difficult. your mileage /may/ vary | |
- load simulated here is that of a event based front-end dumping 1024 byte / enqueue | |
- byte[1024] is created every enqueue | |
- given hard break on consumer side, ** important measures are x/s e.g. bps NOT delta since bytes transferred varies ** | |
- run logs are timestamped with System time (msecs). | |
- metrics are on consumer side -- a hard System.exit() is called | |
- given the total length, above considerations are really non-issues. | |
Best runs: | |
LBQ [TOTAL] bytes:12500992000.000000 - delta:19810 msec - bps: 5048207362.286745 - wps: 9859780.004466 {LinkedBlockingQueue} | |
PCQ [TOTAL] bytes:12500992000.000000 - delta:16194 msec - bps: 6175597580.592872 - wps:12061714.024595 {ConsumerProducerQueue} | |
TCPQ [TOTAL] bytes:12929651104.000000 - delta: 7188 msec - bps:14389492053.082855 - wps:28104476.666177 {TcpQueueBase} | |
Worst runs: | |
LBQ [TOTAL] bytes:12500992000.000000 - delta:20927 msec - bps: 4778811209.264883 - wps: 9333615.643095 {LinkedBlockingQueue} | |
PCQ [TOTAL] bytes:12500992000.000000 - delta:16335 msec - bps: 6121944726.286616 - wps:11956923.293529 {ConsumerProducerQueue} | |
TCPQ [TOTAL] bytes:12929629056.000000 - delta: 7211 msec - bps:14343333063.579230 - wps:28014322.389803 {TcpQueueBase} | |
==========================================*/ | |
/*--- q item creation ---*/ | |
private final byte[] getBlock(int size){ | |
byte[] b = new byte[size]; | |
for(int i=0; i<size; i++) | |
b[i] = (byte) i; | |
return b; | |
} | |
/*--- PRODUCER ----*/ | |
private final Runnable newProducerTask (final Queue<byte[]> q) { | |
return new Runnable() { | |
@Override final public void run() { | |
byte[] data = getBlock(4096); | |
byte[] buff = new byte[1024 * 4]; | |
int off = 0; | |
final int iters = 4096 * 12; | |
Log.log("producer task started"); | |
for(;;){ | |
for(int i=0; i<iters; i++){ | |
q.offer(getBlock(1024)); | |
} | |
} | |
} | |
}; | |
} | |
/*--- CONSUMER ----*/ | |
private final Runnable newConsumerTask (final Queue<byte[]> q) { | |
return new Runnable() { | |
@Override final public void run() { | |
int n = 0; | |
int lim = 1000; | |
long totb = 0; | |
int blim = 12500000; // bytes | |
Log.log("consumer task started"); | |
long start0 = System.nanoTime(); | |
for(int i=0; i<lim; i++){ | |
long start = System.nanoTime(); | |
long rlen = 0; | |
while(rlen < blim){ | |
final byte[] data = q.poll(); | |
if(data == null){ | |
LockSupport.parkNanos(10L); | |
} | |
else { | |
rlen += data.length; | |
} | |
} | |
long delta = System.nanoTime() - start; | |
n++; | |
totb += rlen; | |
} | |
long delta = System.nanoTime() - start0; | |
Log.log("consumer stopping for summation"); | |
double rlen = totb; | |
double bps = rlen * BITS_PER_BYTE * NANOS_PER_SEC / delta; | |
double wps = bps / BITS_PER_LONG_WORD; | |
System.out.println(); | |
System.out.format("[TOTAL] bytes:%f - delta:%d msec - bps:%16f - wps:%f {%s}\n", rlen, TimeUnit.NANOSECONDS.toMillis(delta), bps, wps, q.getClass().getSimpleName()); | |
System.exit(1); | |
} | |
}; | |
} | |
///////////////////////////////////////////// JAVA UTIL LBQueue ////////////////////////////////////////////////////// | |
Run 1 | |
01327724314770 Fri Jan 27 23:18:34 EST 2012 jacomecha[tid:10] <INFO>: start consumer(s) | |
01327724314806 Fri Jan 27 23:18:34 EST 2012 jacomecha[tid:10] <INFO>: start producer(s) | |
01327724314807 Fri Jan 27 23:18:34 EST 2012 jacomecha[tid:11] <INFO>: consumer task started | |
01327724314807 Fri Jan 27 23:18:34 EST 2012 jacomecha[tid:12] <INFO>: producer task started | |
01327724334618 Fri Jan 27 23:18:54 EST 2012 jacomecha[tid:11] <INFO>: consumer stopping for summation | |
[TOTAL] bytes:12500992000.000000 - delta:19810 msec - bps:5048207362.286745 - wps:9859780.004466 {LinkedBlockingQueue} | |
Run 2 | |
01327724394122 Fri Jan 27 23:19:54 EST 2012 jacomecha[tid:10] <INFO>: start consumer(s) | |
01327724394159 Fri Jan 27 23:19:54 EST 2012 jacomecha[tid:10] <INFO>: start producer(s) | |
01327724394159 Fri Jan 27 23:19:54 EST 2012 jacomecha[tid:11] <INFO>: consumer task started | |
01327724394160 Fri Jan 27 23:19:54 EST 2012 jacomecha[tid:12] <INFO>: producer task started | |
01327724415087 Fri Jan 27 23:20:15 EST 2012 jacomecha[tid:11] <INFO>: consumer stopping for summation | |
[TOTAL] bytes:12500992000.000000 - delta:20927 msec - bps:4778811209.264883 - wps:9333615.643095 {LinkedBlockingQueue} | |
Run3 | |
01327724440294 Fri Jan 27 23:20:40 EST 2012 jacomecha[tid:10] <INFO>: start consumer(s) | |
01327724440325 Fri Jan 27 23:20:40 EST 2012 jacomecha[tid:10] <INFO>: start producer(s) | |
01327724440325 Fri Jan 27 23:20:40 EST 2012 jacomecha[tid:11] <INFO>: consumer task started | |
01327724440326 Fri Jan 27 23:20:40 EST 2012 jacomecha[tid:12] <INFO>: producer task started | |
01327724461099 Fri Jan 27 23:21:01 EST 2012 jacomecha[tid:11] <INFO>: consumer stopping for summation | |
[TOTAL] bytes:12500992000.000000 - delta:20773 msec - bps:4814133636.869255 - wps:9402604.759510 {LinkedBlockingQueue} | |
///////////////////////////////////////////// JACOMECHA PCQueue ////////////////////////////////////////////////////// | |
Run1 | |
01327724726715 Fri Jan 27 23:25:26 EST 2012 jacomecha[tid:10] <INFO>: start consumer(s) | |
01327724726747 Fri Jan 27 23:25:26 EST 2012 jacomecha[tid:10] <INFO>: start producer(s) | |
01327724726747 Fri Jan 27 23:25:26 EST 2012 jacomecha[tid:11] <INFO>: consumer task started | |
01327724726748 Fri Jan 27 23:25:26 EST 2012 jacomecha[tid:12] <INFO>: producer task started | |
01327724743083 Fri Jan 27 23:25:43 EST 2012 jacomecha[tid:11] <INFO>: consumer stopping for summation | |
[TOTAL] bytes:12500992000.000000 - delta:16335 msec - bps:6121944726.286616 - wps:11956923.293529 {ConsumerProducerQueue} | |
Run2 | |
01327724769595 Fri Jan 27 23:26:09 EST 2012 jacomecha[tid:10] <INFO>: start consumer(s) | |
01327724769629 Fri Jan 27 23:26:09 EST 2012 jacomecha[tid:11] <INFO>: consumer task started | |
01327724769630 Fri Jan 27 23:26:09 EST 2012 jacomecha[tid:10] <INFO>: start producer(s) | |
01327724769631 Fri Jan 27 23:26:09 EST 2012 jacomecha[tid:12] <INFO>: producer task started | |
01327724785854 Fri Jan 27 23:26:25 EST 2012 jacomecha[tid:11] <INFO>: consumer stopping for summation | |
[TOTAL] bytes:12500992000.000000 - delta:16223 msec - bps:6164303244.613242 - wps:12039654.774635 {ConsumerProducerQueue} | |
Run3 | |
01327724828170 Fri Jan 27 23:27:08 EST 2012 jacomecha[tid:10] <INFO>: start consumer(s) | |
01327724828204 Fri Jan 27 23:27:08 EST 2012 jacomecha[tid:10] <INFO>: start producer(s) | |
01327724828204 Fri Jan 27 23:27:08 EST 2012 jacomecha[tid:11] <INFO>: consumer task started | |
01327724828205 Fri Jan 27 23:27:08 EST 2012 jacomecha[tid:12] <INFO>: producer task started | |
01327724844399 Fri Jan 27 23:27:24 EST 2012 jacomecha[tid:11] <INFO>: consumer stopping for summation | |
[TOTAL] bytes:12500992000.000000 - delta:16194 msec - bps:6175597580.592872 - wps:12061714.024595 {ConsumerProducerQueue} | |
///////////////////////////////////////////// JACOMECHA PCQueue ////////////////////////////////////////////////////// | |
Run1 | |
01327724883496 Fri Jan 27 23:28:03 EST 2012 jacomecha[tid:10] <INFO>: start consumer(s) | |
01327724883497 Fri Jan 27 23:28:03 EST 2012 jacomecha[tid:10] <INFO>: start producer(s) | |
01327724883497 Fri Jan 27 23:28:03 EST 2012 jacomecha[tid:13] <INFO>: consumer task started | |
01327724883497 Fri Jan 27 23:28:03 EST 2012 jacomecha[tid:14] <INFO>: producer task started | |
01327724890709 Fri Jan 27 23:28:10 EST 2012 jacomecha[tid:13] <INFO>: consumer stopping for summation | |
[TOTAL] bytes:12929629056.000000 - delta:7211 msec - bps:14343333063.579230 - wps:28014322.389803 {TcpQueueBase} | |
Run2 | |
01327724917563 Fri Jan 27 23:28:37 EST 2012 jacomecha[tid:10] <INFO>: start consumer(s) | |
01327724917563 Fri Jan 27 23:28:37 EST 2012 jacomecha[tid:10] <INFO>: start producer(s) | |
01327724917563 Fri Jan 27 23:28:37 EST 2012 jacomecha[tid:13] <INFO>: consumer task started | |
01327724917564 Fri Jan 27 23:28:37 EST 2012 jacomecha[tid:14] <INFO>: producer task started | |
01327724924775 Fri Jan 27 23:28:44 EST 2012 jacomecha[tid:13] <INFO>: consumer stopping for summation | |
[TOTAL] bytes:12929604200.000000 - delta:7211 msec - bps:14343488475.353100 - wps:28014625.928424 {TcpQueueBase} | |
Run3 | |
01327724941358 Fri Jan 27 23:29:01 EST 2012 jacomecha[tid:10] <INFO>: start consumer(s) | |
01327724941359 Fri Jan 27 23:29:01 EST 2012 jacomecha[tid:10] <INFO>: start producer(s) | |
01327724941359 Fri Jan 27 23:29:01 EST 2012 jacomecha[tid:13] <INFO>: consumer task started | |
01327724941360 Fri Jan 27 23:29:01 EST 2012 jacomecha[tid:14] <INFO>: producer task started | |
01327724948548 Fri Jan 27 23:29:08 EST 2012 jacomecha[tid:13] <INFO>: consumer stopping for summation | |
[TOTAL] bytes:12929651104.000000 - delta:7188 msec - bps:14389492053.082855 - wps:28104476.666177 {TcpQueueBase} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Note above Bps is BYTES not BITs (as was the case in the OP) and bench has changed but value is realistic (ex CPQ above is 6,741,105,424 bps which is close to the OP's 6,121,944,726)