1
0
Fork 0
arangodb/3rdParty/boost/1.62.0/libs/fiber/doc/performance.qbk

72 lines
3.0 KiB
Plaintext

[/
Copyright Oliver Kowalke 2009.
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or copy at
http://www.boost.org/LICENSE_1_0.txt
]
[section:performance Performance]
Performance measurements were taken using `std::chrono::highresolution_clock`,
with overhead corrections.
The code was compiled using the build options:
variant = release, optimization = speed
[footnote Intel Core2 Q6700, x86_64, 3GHz].
The columns labeled [*fiber (atomics)] were compiled with default fiber
synchronization, capable of synchronizing fibers running on different threads.
The columns labeled [*fiber (raw)] were compiled with [link cross_thread_sync
`BOOST_FIBERS_NO_ATOMICS`].
[table Overhead of join (contains fiber-context destruction, fiber-stack deallocation)
[[thread] [fiber (atomics)] [fiber (raw)] [tbb] [qthread]]
[[18 \u00b5s] [950 ns] [900 ns] [570 ns] [620 ns]]
]
(from [@../../performance/fiber/overhead_join.cpp overhead_join.cpp])
[table Overhead of detach
[[thread] [fiber (atomics)] [fiber (raw)]]
[[126 ns] [21 ns] [20 ns]]
]
(from [@../../performance/fiber/overhead_detach.cpp overhead_detach.cpp])
[table Overhead of yield
[[thread] [fiber (atomics)] [fiber (raw)]]
[[1.5 \u00b5s] [310 ns] [330 ns]]
]
(from [@../../performance/fiber/overhead_yield.cpp overhead_yield.cpp])
[table Overhead of waiting on a future
[[thread] [fiber (atomics)] [fiber (raw)]]
[[16 \u00b5s] [1.40 \u00b5s] [1.38 \u00b5s]]
]
(from [@../../performance/fiber/overhead_future.cpp overhead_future.cpp])
[table Overhead of fiber creation (contains fiber-stack allocation and preparation, fiber-context construction, scheduler handling)
[[thread] [fiber (atomics)] [fiber (raw)]]
[[18 \u00b5s] [450 ns] [445 ns] ]
]
(from [@../../performance/fiber/overhead_create.cpp overhead_create.cpp])
[table Scaling of creating and joining
[[average of] [thread] [fiber (atomics)] [fiber (raw)]]
[[10] [8.21 \u00b5s] [1.96 \u00b5s] [1.85 \u00b5s]]
[[50] [6.67 \u00b5s] [1.40 \u00b5s] [1.27 \u00b5s]]
[[100] [6.79 \u00b5s] [1.84 \u00b5s] [1.81 \u00b5s]]
[[500] [8.25 \u00b5s] [1.13 \u00b5s] [1.10 \u00b5s]]
[[1000] [7.71 \u00b5s] [1.46 \u00b5s] [1.26 \u00b5s]]
[[5000] [5.67 \u00b5s] [2.11 \u00b5s] [1.90 \u00b5s]]
[[10000] [5.25 \u00b5s] [2.36 \u00b5s] [1.89 \u00b5s]]
]
(from [@../../performance/fiber/scale_join.cpp scale_join.cpp])
Numbers of the [@https://github.com/atemerev/skynet microbenchmark ['syknet]] from Alexander Temerev
[footnote Intel Core2 Q6700, x86_64, 3GHz]:
[table performance of N=100000 actors/goroutines/fibers
[[Haskell | stack-1.0.4] [fiber (single threaded/raw) | gcc-5.2.1] [fiber (single threaded/atomics) | gcc-5.2.1] [Erlang | erts-7.0] [Go | go1.4.2]]
[[58ms - 108ms] [205ms - 263ms] [221ms - 278ms] [237ms- 470ms] [614ms - 883ms]]
]
[endsect]