summaryrefslogtreecommitdiffstats
path: root/src/seastar/README.md
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 18:45:59 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 18:45:59 +0000
commit19fcec84d8d7d21e796c7624e521b60d28ee21ed (patch)
tree42d26aa27d1e3f7c0b8bd3fd14e7d7082f5008dc /src/seastar/README.md
parentInitial commit. (diff)
downloadceph-19fcec84d8d7d21e796c7624e521b60d28ee21ed.tar.xz
ceph-19fcec84d8d7d21e796c7624e521b60d28ee21ed.zip
Adding upstream version 16.2.11+ds.upstream/16.2.11+dsupstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/seastar/README.md')
-rw-r--r--src/seastar/README.md195
1 files changed, 195 insertions, 0 deletions
diff --git a/src/seastar/README.md b/src/seastar/README.md
new file mode 100644
index 000000000..f7e66c071
--- /dev/null
+++ b/src/seastar/README.md
@@ -0,0 +1,195 @@
+Seastar
+=======
+
+[![CircleCI](https://circleci.com/gh/scylladb/seastar.svg?style=svg)](https://circleci.com/gh/scylladb/seastar)
+[![Version](https://img.shields.io/github/tag/scylladb/seastar.svg?label=version&colorB=green)](https://github.com/scylladb/seastar/releases)
+[![License: Apache2](https://img.shields.io/github/license/scylladb/seastar.svg)](https://github.com/scylladb/seastar/blob/master/LICENSE)
+[![n00b issues](https://img.shields.io/github/issues/scylladb/seastar/n00b.svg?colorB=green)](https://github.com/scylladb/seastar/labels/n00b)
+
+Introduction
+------------
+
+SeaStar is an event-driven framework allowing you to write non-blocking,
+asynchronous code in a relatively straightforward manner (once understood).
+It is based on [futures](http://en.wikipedia.org/wiki/Futures_and_promises).
+
+Building Seastar
+--------------------
+
+For more details and alternative work-flows, read [HACKING.md](./HACKING.md).
+
+Assuming that you would like to use system packages (RPMs or DEBs) for Seastar's dependencies, first install them:
+
+```
+$ sudo ./install-dependencies.sh
+```
+
+then configure (in "release" mode):
+
+```
+$ ./configure.py --mode=release
+```
+then compile:
+
+```
+$ ninja -C build/release
+```
+
+If you're missing a dependency of Seastar, then it is possible to have the configuration process fetch a version of the dependency locally for development.
+
+For example, to fetch `fmt` locally, configure Seastar like this:
+
+```
+$ ./configure.py --mode=dev --cook fmt
+```
+
+`--cook` can be repeated many times for selecting multiple dependencies.
+
+
+Build modes
+----------------------------------------------------------------------------
+
+The configure.py script is a wrapper around cmake. The --mode argument
+maps to CMAKE_BUILD_TYPE, and supports the following modes
+
+| | CMake mode | Debug info | Optimi&shy;zations | Sanitizers | Allocator | Checks | Use for |
+| -------- | ------------------- | ---------- | ------------------ |------------- | --------- | -------- | -------------------------------------- |
+| debug | `Debug` | Yes | `-O0` | ASAN, UBSAN | System | All | gdb |
+| release | `RelWithDebInfo` | Yes | `-O3` | None | Seastar | Asserts | production |
+| dev | `Dev` (Custom) | No | `-O1` | None | Seastar | Asserts | build and test cycle |
+| sanitize | `Sanitize` (Custom) | Yes | `-Os` | ASAN, UBSAN | System | All | second level of tests, track down bugs |
+
+Note that seastar is more sensitive to allocators and optimizations than
+usual. A quick rule of the thumb of the relative performances is that
+release is 2 times faster than dev, 150 times faster than sanitize and
+300 times faster than debug.
+
+Using Seastar from its build directory (without installation)
+----------------------------------------------------------------------------
+
+It's possible to consume Seastar directly from its build directory with CMake or `pkg-config`.
+
+We'll assume that the Seastar repository is located in a directory at `$seastar_dir`.
+
+
+Via `pkg-config`:
+
+```
+$ g++ my_app.cc $(pkg-config --libs --cflags --static $seastar_dir/build/release/seastar.pc) -o my_app
+```
+
+and with CMake using the `Seastar` package:
+
+
+`CMakeLists.txt` for `my_app`:
+
+```
+find_package (Seastar REQUIRED)
+
+add_executable (my_app
+ my_app.cc)
+
+target_link_libraries (my_app
+ Seastar::seastar)
+```
+
+```
+$ mkdir $my_app_dir/build
+$ cd $my_app_dir/build
+$ cmake -DCMAKE_PREFIX_PATH="$seastar_dir/build/release;$seastar_dir/build/release/_cooking/installed" -DCMAKE_MODULE_PATH=$seastar_dir/cmake $my_app_dir
+```
+
+The `CMAKE_PREFIX_PATH` values ensure that CMake can locate Seastar and its compiled submodules. The `CMAKE_MODULE_PATH` value ensures that CMake can uses Seastar's CMake scripts for locating its dependencies.
+
+Using an installed Seastar
+--------------------------------
+
+You can also consume Seastar after it has been installed to the file-system.
+
+**Important:**
+
+- Seastar works with a customized version of DPDK, so by default builds and installs the DPDK submodule to `$build_dir/_cooking/installed`
+
+First, configure the installation path:
+
+```
+$ ./configure.py --mode=release --prefix=/usr/local
+```
+
+then run the `install` target:
+
+```
+$ ninja -C build/release install
+```
+
+then consume it from `pkg-config`:
+
+```
+$ g++ my_app.cc $(pkg-config --libs --cflags --static seastar) -o my_app
+```
+
+or consume it with the same `CMakeLists.txt` as before but with a simpler CMake invocation:
+
+```
+$ cmake ..
+```
+
+(If Seastar has not been installed to a "standard" location like `/usr` or `/usr/local`, then you can invoke CMake with `-DCMAKE_PREFIX_PATH=$my_install_root`.)
+
+There are also instructions for building on any host that supports [Docker](doc/building-docker.md).
+
+Use of the [DPDK](http://dpdk.org) is [optional](doc/building-dpdk.md).
+
+#### Seastar's C++ dialect: C++17 or C++20
+
+Seastar supports both C++17, and C++20. It can be selected with the
+`--c++-dialect=gnu++17` configure option or, if using CMake directly,
+by setting on the `Seastar_CXX_DIALECT` CMake variable.
+
+See the [compatibity statement](doc/compatibility.md) for more information.
+
+Getting started
+---------------
+
+There is a [mini tutorial](doc/mini-tutorial.md) and a [more comprehensive one](doc/tutorial.md).
+
+The documentation is available on the [web](http://docs.seastar.io/master/index.html).
+
+
+Resources
+---------
+Ask questions and post patches on the development mailing list. Subscription
+information and archives are available [here](https://groups.google.com/forum/#!forum/seastar-dev),
+or just send an email to seastar-dev@googlegroups.com.
+
+Information can be found on the main [project website](http://seastar.io).
+
+File bug reports on the project [issue tracker](https://github.com/scylladb/seastar/issues).
+
+The Native TCP/IP Stack
+-----------------------
+
+Seastar comes with its own [userspace TCP/IP stack](doc/native-stack.md) for better performance.
+
+Recommended hardware configuration for SeaStar
+----------------------------------------------
+
+* CPUs - As much as you need. SeaStar is highly friendly for multi-core and NUMA
+* NICs - As fast as possible, we recommend 10G or 40G cards. It's possible to use
+ 1G too but you may be limited by their capacity.
+ In addition, the more hardware queue per cpu the better for SeaStar.
+ Otherwise we have to emulate that in software.
+* Disks - Fast SSDs with high number of IOPS.
+* Client machines - Usually a single client machine can't load our servers.
+ Both memaslap (memcached) and WRK (httpd) cannot over load their matching
+ server counter parts. We recommend running the client on different machine
+ than the servers and use several of them.
+
+Projects using Seastar
+----------------------------------------------
+
+* [cpv-cql-driver](https://github.com/cpv-project/cpv-cql-driver): C++ driver for Cassandra/Scylla based on seastar framework
+* [cpv-framework](https://github.com/cpv-project/cpv-framework): A web framework written in c++ based on seastar framework
+* [redpanda](https://vectorized.io/): A Kafka replacement for mission critical systems
+* [Scylla](https://github.com/scylladb/scylla): A fast and reliable NoSQL data store compatible with Cassandra and DynamoDB
+* [smf](https://github.com/smfrpc/smf): The fastest RPC in the West