mirror of
https://github.com/tokio-rs/tokio.git
synced 2025-09-28 12:10:37 +00:00
Fix benches (#188)
Some of the benchhmarks were broken and/or using deprecated APIs. This patch updates the benches and requires them all to compile without warnings in order to pass CI.
This commit is contained in:
parent
869615f1d2
commit
1f91a890b4
@ -15,7 +15,7 @@ script:
|
|||||||
- |
|
- |
|
||||||
if [[ "$TRAVIS_RUST_VERSION" == nightly ]]
|
if [[ "$TRAVIS_RUST_VERSION" == nightly ]]
|
||||||
then
|
then
|
||||||
cargo build --benches
|
cargo build --benches --all
|
||||||
fi
|
fi
|
||||||
- cargo test --all
|
- cargo test --all
|
||||||
|
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
#![feature(test)]
|
#![feature(test)]
|
||||||
|
#![deny(warnings)]
|
||||||
|
|
||||||
extern crate test;
|
extern crate test;
|
||||||
|
#[macro_use]
|
||||||
extern crate futures;
|
extern crate futures;
|
||||||
extern crate tokio;
|
extern crate tokio;
|
||||||
#[macro_use]
|
|
||||||
extern crate tokio_io;
|
|
||||||
|
|
||||||
use std::io;
|
use std::io;
|
||||||
use std::net::SocketAddr;
|
use std::net::SocketAddr;
|
||||||
@ -40,10 +40,10 @@ impl Future for EchoServer {
|
|||||||
fn poll(&mut self) -> Poll<(), io::Error> {
|
fn poll(&mut self) -> Poll<(), io::Error> {
|
||||||
loop {
|
loop {
|
||||||
if let Some(&(size, peer)) = self.to_send.as_ref() {
|
if let Some(&(size, peer)) = self.to_send.as_ref() {
|
||||||
try_nb!(self.socket.send_to(&self.buf[..size], &peer));
|
try_ready!(self.socket.poll_send_to(&self.buf[..size], &peer));
|
||||||
self.to_send = None;
|
self.to_send = None;
|
||||||
}
|
}
|
||||||
self.to_send = Some(try_nb!(self.socket.recv_from(&mut self.buf)));
|
self.to_send = Some(try_ready!(self.socket.poll_recv_from(&mut self.buf)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
// Measure cost of different operations
|
// Measure cost of different operations
|
||||||
// to get a sense of performance tradeoffs
|
// to get a sense of performance tradeoffs
|
||||||
#![feature(test)]
|
#![feature(test)]
|
||||||
|
#![deny(warnings)]
|
||||||
|
|
||||||
extern crate test;
|
extern crate test;
|
||||||
extern crate mio;
|
extern crate mio;
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
#![feature(test)]
|
#![feature(test)]
|
||||||
|
#![deny(warnings)]
|
||||||
|
|
||||||
extern crate futures;
|
extern crate futures;
|
||||||
extern crate tokio;
|
extern crate tokio;
|
||||||
|
@ -1,7 +1,8 @@
|
|||||||
#![feature(test)]
|
#![feature(test)]
|
||||||
|
#![deny(warnings)]
|
||||||
|
|
||||||
|
extern crate tokio_threadpool;
|
||||||
extern crate futures;
|
extern crate futures;
|
||||||
extern crate futures_pool;
|
|
||||||
extern crate futures_cpupool;
|
extern crate futures_cpupool;
|
||||||
extern crate num_cpus;
|
extern crate num_cpus;
|
||||||
extern crate test;
|
extern crate test;
|
||||||
@ -10,10 +11,9 @@ const NUM_SPAWN: usize = 10_000;
|
|||||||
const NUM_YIELD: usize = 1_000;
|
const NUM_YIELD: usize = 1_000;
|
||||||
const TASKS_PER_CPU: usize = 50;
|
const TASKS_PER_CPU: usize = 50;
|
||||||
|
|
||||||
mod us {
|
mod threadpool {
|
||||||
use futures::{task, Async};
|
use futures::{future, task, Async};
|
||||||
use futures::future::{self, Executor};
|
use tokio_threadpool::*;
|
||||||
use futures_pool::*;
|
|
||||||
use num_cpus;
|
use num_cpus;
|
||||||
use test;
|
use test;
|
||||||
use std::sync::{mpsc, Arc};
|
use std::sync::{mpsc, Arc};
|
||||||
@ -22,7 +22,7 @@ mod us {
|
|||||||
|
|
||||||
#[bench]
|
#[bench]
|
||||||
fn spawn_many(b: &mut test::Bencher) {
|
fn spawn_many(b: &mut test::Bencher) {
|
||||||
let (sched_tx, _scheduler) = Pool::new();
|
let threadpool = ThreadPool::new();
|
||||||
|
|
||||||
let (tx, rx) = mpsc::sync_channel(10);
|
let (tx, rx) = mpsc::sync_channel(10);
|
||||||
let rem = Arc::new(AtomicUsize::new(0));
|
let rem = Arc::new(AtomicUsize::new(0));
|
||||||
@ -34,13 +34,13 @@ mod us {
|
|||||||
let tx = tx.clone();
|
let tx = tx.clone();
|
||||||
let rem = rem.clone();
|
let rem = rem.clone();
|
||||||
|
|
||||||
sched_tx.execute(future::lazy(move || {
|
threadpool.spawn(future::lazy(move || {
|
||||||
if 1 == rem.fetch_sub(1, SeqCst) {
|
if 1 == rem.fetch_sub(1, SeqCst) {
|
||||||
tx.send(()).unwrap();
|
tx.send(()).unwrap();
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
})).ok().unwrap();
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
let _ = rx.recv().unwrap();
|
let _ = rx.recv().unwrap();
|
||||||
@ -49,7 +49,7 @@ mod us {
|
|||||||
|
|
||||||
#[bench]
|
#[bench]
|
||||||
fn yield_many(b: &mut test::Bencher) {
|
fn yield_many(b: &mut test::Bencher) {
|
||||||
let (sched_tx, _scheduler) = Pool::new();
|
let threadpool = ThreadPool::new();
|
||||||
let tasks = super::TASKS_PER_CPU * num_cpus::get();
|
let tasks = super::TASKS_PER_CPU * num_cpus::get();
|
||||||
|
|
||||||
let (tx, rx) = mpsc::sync_channel(tasks);
|
let (tx, rx) = mpsc::sync_channel(tasks);
|
||||||
@ -59,7 +59,7 @@ mod us {
|
|||||||
let mut rem = super::NUM_YIELD;
|
let mut rem = super::NUM_YIELD;
|
||||||
let tx = tx.clone();
|
let tx = tx.clone();
|
||||||
|
|
||||||
sched_tx.execute(future::poll_fn(move || {
|
threadpool.spawn(future::poll_fn(move || {
|
||||||
rem -= 1;
|
rem -= 1;
|
||||||
|
|
||||||
if rem == 0 {
|
if rem == 0 {
|
||||||
@ -72,7 +72,7 @@ mod us {
|
|||||||
// Not ready
|
// Not ready
|
||||||
Ok(Async::NotReady)
|
Ok(Async::NotReady)
|
||||||
}
|
}
|
||||||
})).ok().unwrap();
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
for _ in 0..tasks {
|
for _ in 0..tasks {
|
||||||
|
@ -1,7 +1,8 @@
|
|||||||
#![feature(test)]
|
#![feature(test)]
|
||||||
|
#![deny(warnings)]
|
||||||
|
|
||||||
|
extern crate tokio_threadpool;
|
||||||
extern crate futures;
|
extern crate futures;
|
||||||
extern crate futures_pool;
|
|
||||||
extern crate futures_cpupool;
|
extern crate futures_cpupool;
|
||||||
extern crate num_cpus;
|
extern crate num_cpus;
|
||||||
extern crate test;
|
extern crate test;
|
||||||
@ -9,31 +10,31 @@ extern crate test;
|
|||||||
const ITER: usize = 20_000;
|
const ITER: usize = 20_000;
|
||||||
|
|
||||||
mod us {
|
mod us {
|
||||||
use futures::future::{self, Executor};
|
use tokio_threadpool::*;
|
||||||
use futures_pool::*;
|
use futures::future;
|
||||||
use test;
|
use test;
|
||||||
use std::sync::mpsc;
|
use std::sync::mpsc;
|
||||||
|
|
||||||
#[bench]
|
#[bench]
|
||||||
fn chained_spawn(b: &mut test::Bencher) {
|
fn chained_spawn(b: &mut test::Bencher) {
|
||||||
let (sched_tx, _scheduler) = Pool::new();
|
let threadpool = ThreadPool::new();
|
||||||
|
|
||||||
fn spawn(sched_tx: Sender, res_tx: mpsc::Sender<()>, n: usize) {
|
fn spawn(pool_tx: Sender, res_tx: mpsc::Sender<()>, n: usize) {
|
||||||
if n == 0 {
|
if n == 0 {
|
||||||
res_tx.send(()).unwrap();
|
res_tx.send(()).unwrap();
|
||||||
} else {
|
} else {
|
||||||
let sched_tx2 = sched_tx.clone();
|
let pool_tx2 = pool_tx.clone();
|
||||||
sched_tx.execute(future::lazy(move || {
|
pool_tx.spawn(future::lazy(move || {
|
||||||
spawn(sched_tx2, res_tx, n - 1);
|
spawn(pool_tx2, res_tx, n - 1);
|
||||||
Ok(())
|
Ok(())
|
||||||
})).ok().unwrap();
|
})).unwrap();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
b.iter(move || {
|
b.iter(move || {
|
||||||
let (res_tx, res_rx) = mpsc::channel();
|
let (res_tx, res_rx) = mpsc::channel();
|
||||||
|
|
||||||
spawn(sched_tx.clone(), res_tx, super::ITER);
|
spawn(threadpool.sender().clone(), res_tx, super::ITER);
|
||||||
res_rx.recv().unwrap();
|
res_rx.recv().unwrap();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user