Boost C++ Libraries Home Libraries People FAQ More

PrevUpHomeNext

Release Notes

Known deviations in this version being presented for Boost peer review from version to enter Boost if accepted

This peer review edition of AFIO v1.4 has been mocked up with an API which should very closely resemble the eventual API in the v1.4 engine which will be rewritten to use the just written lightweight future-promise factory toolkit in forthcoming Boost.Outcome. It is, however, still in fact the mature v1.3 engine with a faked wrapper API simulating the v1.4 engine. Known deviations from the eventual v1.4 release:

[Warning] Warning

AFIO's future shim type can't do continuations on anything but future<void>. For any future<T> it actually executes the continuation immediately which will usually just happen to work through fortune as the continuation usually does a get().

Anticipated forthcoming features in future versions

In some later version, in order:

Boost 1.59 AFIO v1.40 beta

Boost 1.59 AFIO v1.40 alpha 21st August 2015 Boost peer review 1 edition

Still to do in this release:

Boost 1.58 AFIO v1.31 18th April 2015

Boost 1.57 AFIO v1.30 18th March 2015

AFIO is now a Boost.BindLib based library. This has resulted in an enormous change set which is only barely summarised here:

Boost 1.57 AFIO v1.22 stable branch tagged

Fixed buffer underflow when decoding Win32 error codes to strings. Thanks to ariccio for reporting this.

Relocated docs from ci.nedprod.com to http://boostgsoc13.github.io/boost.afio/

Updated the stale CI test dashboard copy in the DocBook edition.

Boost 1.56 AFIO v1.21 10th Aug 2014

Finished getting a ThreadSanitizer (tsan) + UndefinedBehaviorSanitizer (ubsan) pass running per-commit on Travis CI (>= v1.2 was tsan clean, I just hadn't bothered getting a CI to verify it to be so per commit).

Fixed bug where --lto wasn't turning on the optimiser for LTO output. Sorry.

Added a benchmark testing for latency under concurrency loads.

Added a new FAQ entry on AFIO execution latencies.

Reorganised source code structure to fit modular Boost. AFIO is now a Boost v1.56 module just like any other. Obviously this will break source code compatibility with all preceding Boosts.

Boost 1.55 AFIO v1.21 23rd Mar 2014

Fixed a bug in the custom unit testing framework which was throwing away any exceptions being thrown by the tests (thanks to Paul Kirth for finding this and reporting it). Fixing this bug revealed that enumerate() with a glob on Windows has never worked properly and the exception thrown by MSVC's checked iterators was hiding the problem, so fixed that bug too.

Added async_io_dispatcher_base::post_op_filter() and async_io_dispatcher_base::post_readwrite_filter(), including documentation examples and integrating filters into the unit testing. post_readwrite_filter() ought to be particularly useful to those seeking deep ASIO integration. Thanks to Bjorn Reese for the long discussions leading up to this choice of improved ASIO support.

During updating the benchmarks below now I have regained access to my developer workstation, discovered a severe performance regression in the v1.2 engine of around 27% over the v1.1 engine. Steps taken:

1. The shared state in every async_io_op was a shared_ptr, now it is the underlying shared_future. Eliminated copies of shared_ptr, now we always use the shared_future in enqueued_task directly. This reduced regression to 18%.

2. Removed more code from inside the TSX locks. This reduced regression to 16%.

3. Removed the second TSX lock from complete_async_op(). This eliminated the regression and actually added 2% to the v1.1 engine.

4. Removed the second TSX lock from chain_async_op(). This added a further 10% over the v1.1 engine, so we are now 12% faster which is about right given the v1.2 engine removed 15% of code.

Added nested TSX transaction support.

The CI shows that clang 3.1 now produces segfaulting binaries with this release, so rather than debug clang, I simply dropped clang 3.1 support. AFIO now requires clang 3.2 or better.

Boost 1.55 AFIO v1.20 5th Feb 2014

This is a major refactor of AFIO's core op dispatch engine to trim it down by about 15%. Key breaking differences from the v1.1 series of AFIO are as follows:

Boost 1.55 AFIO v1.11

Added --fast-build to test Jamfile to preserve my sanity attempting to work with AFIO on an Intel Atom 220 netbook.

Fixed failure to auto-const an async_data_op_req<boost::asio::mutable_buffer> when used for writing. Thanks to Bjorn Reese for reporting this.

Replaced use of std::runtime_error with std::invalid_argument where that makes sense. Thanks to Bjorn Reese for reporting this.

Replaced throwing of std::ios_base::failure with std::system_error. Thanks to Bjorn Reese for suggesting and submitting a patch for this.

async_io_dispatcher_base::enumerate() did not take a metadata_flags, and it was supposed to. Thanks to Bjorn Reese for reporting this.

Added a unit compilation test to ensure that implicit construction from a single arg to the op convenience classes works as intended.

Significantly optimised build system and added in precompiled headers support. Combined with --fast-build this provides an 8x build time improvement.

boost::afio::stat_t::st_type() is now a boost::filesystem::file_type instead of replicating the POSIX file type codes. Thanks to Bjorn Reese for suggesting this.

boost::afio::stat_t::st_mode() is now st_perms(). Also disabled unused fields in stat_t on Windows. Thanks to Bjorn Reese for suggesting this.

Boost 1.55 AFIO v1.1 1st Nov 2013

Immediate completions no longer hold the opslock, which meant the opslock could be changed from a recursive mutex to a spinlock. The new, more parallelised, behaviour illuminated a number of new race conditions in when_all() which have been fixed.

Completely gutted dispatch engine and replaced with a new, almost entirely wait free implementation based on throwing atomics at the problem. If it weren't for the spin lock around the central ops hash table, AFIO would now be an entirely wait free design.

In order to do something about that spin lock, replaced all locking in AFIO (apart from the directory file handle cache) with memory transactions instead. This does CPUID at runtime and will use Intel's TSX-NI memory transaction implementation if available, if not it falls back to a spin lock based emulation. On memory transaction capable CPUs, AFIO is now almost entirely wait free, apart from when it has to fetch memory from the kernel.

Made AFIO usable as headers only.

Boost 1.55 AFIO v1.0 27th Sep 2013

First release for end of Google Summer of Code 2013.


PrevUpHomeNext