summaryrefslogtreecommitdiffstats
path: root/third_party/rust/mio/test/benchmark.rs
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/rust/mio/test/benchmark.rs')
-rw-r--r--third_party/rust/mio/test/benchmark.rs80
1 files changed, 80 insertions, 0 deletions
diff --git a/third_party/rust/mio/test/benchmark.rs b/third_party/rust/mio/test/benchmark.rs
new file mode 100644
index 0000000000..1e4fac517c
--- /dev/null
+++ b/third_party/rust/mio/test/benchmark.rs
@@ -0,0 +1,80 @@
+use std::mem;
+use mio::net::{AddressFamily, Inet, Inet6, SockAddr, InetAddr, IPv4Addr, SocketType, Dgram, Stream};
+use std::io::net::ip::IpAddr;
+use native::NativeTaskBuilder;
+use std::task::TaskBuilder;
+use mio::os::{from_sockaddr};
+use time::Instant;
+use std::vec::*;
+use std::io::timer;
+
+mod nix {
+ pub use nix::c_int;
+ pub use nix::fcntl::{Fd, O_NONBLOCK, O_CLOEXEC};
+ pub use nix::errno::{EWOULDBLOCK, EINPROGRESS};
+ pub use nix::sys::socket::*;
+ pub use nix::unistd::*;
+ pub use nix::sys::epoll::*;
+}
+
+fn timed(label: &str, f: ||) {
+ let start = Instant::now();
+ f();
+ let elapsed = start.elapsed();
+ println!(" {}: {}", label, elapsed.as_secs() as f64 + elapsed.subsec_nanos() as f64 / 1_000_000_000.0);
+}
+
+fn init(saddr: &str) -> (nix::Fd, nix::Fd) {
+ let optval = 1i;
+ let addr = SockAddr::parse(saddr.as_slice()).expect("could not parse InetAddr");
+ let srvfd = nix::socket(nix::AF_INET, nix::SOCK_STREAM, nix::SOCK_CLOEXEC).unwrap();
+ nix::setsockopt(srvfd, nix::SOL_SOCKET, nix::SO_REUSEADDR, &optval).unwrap();
+ nix::bind(srvfd, &from_sockaddr(&addr)).unwrap();
+ nix::listen(srvfd, 256u).unwrap();
+
+ let fd = nix::socket(nix::AF_INET, nix::SOCK_STREAM, nix::SOCK_CLOEXEC | nix::SOCK_NONBLOCK).unwrap();
+ let res = nix::connect(fd, &from_sockaddr(&addr));
+ let start = Instant::now();
+ println!("connecting : {}", res);
+
+ let clifd = nix::accept4(srvfd, nix::SOCK_CLOEXEC | nix::SOCK_NONBLOCK).unwrap();
+ let elapsed = start.elapsed();
+ println!("accepted : {} - {}", clifd, elapsed.as_secs() as f64 + elapsed.subsec_nanos() as f64 / 1_000_000_000.0);
+
+ (clifd, srvfd)
+}
+
+#[test]
+fn read_bench() {
+ let (clifd, srvfd) = init("10.10.1.5:11111");
+ let mut buf = Vec::with_capacity(1600);
+ unsafe { buf.set_len(1600); }
+ timed("read", || {
+ let mut i = 0u;
+ while i < 10000000 {
+ let res = nix::read(clifd, buf.as_mut_slice());
+ assert_eq!(res.unwrap_err().kind, nix::EWOULDBLOCK);
+ i = i + 1;
+ }
+ });
+}
+
+#[test]
+fn epollctl_bench() {
+ let (clifd, srvfd) = init("10.10.1.5:22222");
+
+ let epfd = nix::epoll_create().unwrap();
+ let info = nix::EpollEvent { events: nix::EPOLLIN | nix::EPOLLONESHOT | nix::EPOLLET,
+ data: 0u64 };
+
+ nix::epoll_ctl(epfd, nix::EpollCtlAdd, clifd, &info);
+
+ timed("epoll_ctl", || {
+ let mut i = 0u;
+ while i < 10000000 {
+ nix::epoll_ctl(epfd, nix::EpollCtlMod, clifd, &info);
+ i = i + 1;
+ }
+ });
+
+}