Skip to content

Commit

Permalink
Merge remote-tracking branch 'socoorigin/master' into iox-eclipse-ice…
Browse files Browse the repository at this point in the history
…oryx#337-deprecate-posix-timer

Signed-off-by: Sankara Narayanan Chandrasekar (RBEI/EMT2) <[email protected]>
  • Loading branch information
shankar-in committed Apr 28, 2021
2 parents 15e8c8a + b8f0476 commit ba6051d
Show file tree
Hide file tree
Showing 181 changed files with 5,089 additions and 1,180 deletions.
10 changes: 2 additions & 8 deletions GOVERNANCE.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,17 +9,11 @@ An up to date list of the maintainers can be found at the [Eclipse project page]

## Bi-weekly meetup

Bi-weekly every first and third Thursday for 1 hour. Everyone is welcome to join.
The developer meetup is held every first and third Thursday each month from 17:00 - 18:00 CET. Everyone is welcome to join.

You can join by using this Zoom link: https://eclipse.zoom.us/j/95918504483?pwd=RWM5Y1pkeStKVDZsU09EY1hnclREUT09

```
08:00 PST (GMT - 8)
16:00 GMT
17:00 CET (GMT + 1)
21:30 IST (GMT + 5.5)
00:00 CST (GMT + 8)
```
For a calendar event, you can subscribe to the [ROS calendar](https://calendar.google.com/calendar/u/0/[email protected]&ctz=America/Los_Angeles).

### Topics

Expand Down
4 changes: 3 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# iceoryx - true zero-copy inter-process-communication

<p align="center">
<img src="https://user-images.githubusercontent.com/8661268/70233652-4aa6d180-175f-11ea-8524-2344e0d3935c.png" width="50%">
<img src="https://user-images.githubusercontent.com/8661268/114321508-64a6b000-9b1b-11eb-95ef-b84c91387cff.png" width="50%">
</p>

[![Build & Test](https://github.com/eclipse-iceoryx/iceoryx/workflows/Build%20&%20Test/badge.svg?branch=master)](https://github.com/eclipse-iceoryx/iceoryx/actions)
Expand Down Expand Up @@ -44,6 +44,8 @@ Don't get too frighten of the API when strolling through the codebase. Think of
The normal use case is that iceoryx is integrated as high-performance IPC transport layer in a bigger framework with additional API layers.
An example for such a "porcelain" API would be [ROS2](https://www.ros.org/). Others are listed in the next section.

You can find the full API documentation on 🌐 [https://iceoryx.io](https://iceoryx.io).

### Where is Eclipse iceoryx used?

|Framework | Description |
Expand Down
17 changes: 9 additions & 8 deletions doc/design/chunk_header.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,33 +35,34 @@ Framing with terminology
- iceoryx runs on multiple platforms -> endianness of recorded chunks might differ
- for tracing, a chunk should be uniquely identifiable -> store origin and sequence number
- the chunk is located in the shared memory, which will be mapped to arbitrary positions in the address space of various processes -> no absolute pointer are allowed
- aligning the `ChunkHeader` to 32 bytes will ensure that all member are on the same cache line and will improve performance
- in order to reduce complexity, the alignment of the user-header must not exceed the alignment of the `ChunkHeader`

### Solution

#### ChunkHeader Definition
```
struct alignas(32) ChunkHeader
class ChunkHeader
{
uint32_t chunkSize;
uint8_t chunkHeaderVersion;
uint8_t reserved1;
uint8_t reserved2;
uint8_t reserved3;
uint8_t reserved[3];
uint64_t originId;
uint64_t sequenceNumber;
uint32_t userPayloadSize;
uint32_t userHeaderSize{0U};
uint32_t userPayloadSize{0U};
uint32_t userPayloadAlignment{1U};
uint32_t userPayloadOffset;
};
```

- **chunkSize** is the size of the whole chunk
- **chunkHeaderVersion** is used to detect incompatibilities for record&replay functionality
- **reserved1**, **reserved2**, **reserved3** are currently not used and set to `0`
- **reserved[3]** is currently not used and set to `0`
- **originId** is the unique identifier of the publisher the chunk was sent from
- **sequenceNumber** is a serial number for the sent chunks
- **userPayloadSize** is the size of the chunk occupied by the user-header
- **userPayloadSize** is the size of the chunk occupied by the user-payload
- **userPayloadAlignment** is the alignment of the chunk occupied by the user-payload
- **userPayloadOffset** is the offset of the user-payload relative to the begin of the chunk

#### Framing
Expand Down Expand Up @@ -160,7 +161,7 @@ chunkSize = sizeof(chunkHeader) + userPayloadSize;

2. No user-header and user-payload alignment exceeds the `ChunkHeader` alignment

Worst case scenario is when a part of the `ChunkHeader` crosses the user-payload alignment boundary, so that the user-payload must be aligned to the next boundary. Currently this is not possible, since the size equals the alignment of the `ChunkHeader`. This might change if more member are added to the `ChunkHeader` or the alignment is reduced. The following drawing demonstrates this scenario.
Worst case scenario is when a part of the `ChunkHeader` crosses the user-payload alignment boundary, so that the user-payload must be aligned to the next boundary. The following drawing demonstrates this scenario.

```
┌ back-offset
Expand Down
6 changes: 3 additions & 3 deletions doc/website/advanced/configuration-guide.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Configuration guide

## CMake switches for configuring iceoryx_posh build
## :material-cog: CMake switches for configuring iceoryx_posh build

When building iceoryx_posh, there are several configuration options set by default.
These options adjust the limits of Publisher and Subscriber Ports for resource management. These limits are used to create management structures in the shared memory segment called `iceoryx_mgmt` when starting up RouDi.
Expand Down Expand Up @@ -28,7 +28,7 @@ cmake -Bbuild -Hiceoryx_meta -DIOX_MAX_CHUNKS_HELD_PER_SUBSCRIBER_SIMULTANEOUSLY

With that change, the footprint of the management segment is reduced to ~52.7 MBytes. For larger use cases you can increase the value to avoid that samples are dropped on the subscriber side (see also [#615](https://github.com/eclipse-iceoryx/iceoryx/issues/615)).

## Configuring Mempools for RouDi
## :material-memory: Configuring Mempools for RouDi

RouDi supports several shared memory segments with different access rights, to limit the read and write access between different applications. Inside of these segments reside mempools where the user payload data for transfer is stored.
Based on the [conceptual guide](https://github.com/eclipse-iceoryx/iceoryx/blob/master/doc/conceptual-guide.md) the end-user may want to configure the mempools with the number of chunks and their size.
Expand All @@ -43,7 +43,7 @@ For building RouDi, iceoryx ships a library named `iceoryx_posh_roudi`. This lib

The value for the alignment is set to 32.

### Dynamic configuration
### :material-file-cog: Dynamic configuration

One way is to read a configuration dynamically at RouDi runtime (startup).
Using TOML Config in RouDi is not mandatory for configuring segments and mempools, but a comfortable alternative.
Expand Down
6 changes: 3 additions & 3 deletions doc/website/advanced/installation-guide-for-contributors.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Installation guide for contributors

## Build and run tests
## :material-test-tube: Build and run tests

While developing on iceoryx you want to know if your changes are breaking existing functions or if your newly written tests are passing.
For that purpose, we are generating CMake targets that are executing the tests. First, we need to build them:
Expand Down Expand Up @@ -44,7 +44,7 @@ Let's assume you want to execute only `ServiceDescription_test` from posh_module
./build/posh/test/posh_moduletests --gtest_filter="ServiceDescription_test*"
```

## Use Sanitizer Scan
## :fontawesome-solid-pump-soap: Use Sanitizer Scan

Due to the fact that iceoryx works a lot with system memory, it should be ensured that errors like memory leaks are not introduced.
To prevent this, we use the clang toolchain which offers several tools for scanning the codebase. One of them is the [Address-Sanitizer](https://clang.llvm.org/docs/AddressSanitizer.html) which checks for example on dangling pointers.
Expand Down Expand Up @@ -83,7 +83,7 @@ This should be only rarely used and only in coordination with an iceoryx maintai
iceoryx needs to be built as a static library for working with sanitizer flags. The script does it automatically.
Except when you want to use the ${ICEORYX_WARNINGS} then you have to call `findpackage(iceoryx_utils)`

## iceoryx library build
## :material-library: iceoryx library build

The iceoryx build consists of several libraries which have dependencies on each other. The goal is to have self-encapsulated library packages available where the end-user can easily find it with the CMake command `find-package(...)`.
In the default case, the iceoryx libraries are installed by `make install` into `/usr/lib` which requires root access. As an alternative you can install the libs into a custom folder by setting `-DCMAKE_INSTALL_PREFIX=/custom/install/path` as build-flag for the CMake file in iceoryx_meta.
Expand Down
Binary file added doc/website/fonts/Monotype-SlatePro-Medium.otf
Binary file not shown.
Binary file added doc/website/fonts/Monotype-SlatePro.otf
Binary file not shown.
Binary file added doc/website/fonts/TSTARPRO-Bold.otf
Binary file not shown.
Binary file added doc/website/fonts/TSTARPRO-Headline.otf
Binary file not shown.
Binary file added doc/website/fonts/TSTARPRO-Light.otf
Binary file not shown.
Binary file added doc/website/fonts/TSTARPRO-Medium.otf
Binary file not shown.
Binary file added doc/website/fonts/TSTARPRO-Regular.otf
Binary file not shown.
1 change: 1 addition & 0 deletions doc/website/getting-started/.pages
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
nav:
- what-is-iceoryx.md
- overview.md
- installation.md
- examples
2 changes: 1 addition & 1 deletion doc/website/getting-started/examples/.pages
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,6 @@ nav:
- waitset_in_c.md
- iceensemble.md
- singleprocess.md
- icecubetray.md
- ice_access_control.md
- iceperf.md
- icecrystal.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,4 @@
title: Configuring access rights for shared memory segments
---

{! ./../iceoryx_examples/icecubetray/README.md !}
{! ./../iceoryx_examples/ice_access_control/README.md !}
23 changes: 11 additions & 12 deletions doc/website/getting-started/installation.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ All iceoryx libraries are deployed as independent CMake packages. Posh is using

## Prerequisites

### Dependencies
### :octicons-package-dependencies-16: Dependencies

- 64-bit hardware (e.g. x86_64 or aarch64; 32-bit hardware might work, but is not supported)
- [CMake](https://cmake.org), 3.10 or later
Expand All @@ -27,7 +27,7 @@ Furthermore, you have to install:
!!! hint
If you are behind a corporate firewall you may have to adjust the proxy settings of maven in `/etc/maven/settings.xml`. See: [Maven Proxy Configuration](https://maven.apache.org/settings.html#proxies)

### Mac OS
### :material-apple: Mac OS

Before installing iceoryx you need to install XCode and git. Optionally, ncurses library is required for
the introspection client. To install ncurses locally into your build folder follow these steps
Expand All @@ -45,7 +45,7 @@ make -j12
make install
```

### Linux
### :fontawesome-brands-linux: Linux

Although we strive to be fully POSIX-compliant, we recommend using Ubuntu 18.04 and at least GCC 7.5.0 for development.

Expand All @@ -57,7 +57,7 @@ sudo apt install gcc g++ cmake libacl1-dev libncurses5-dev pkg-config

Additionally, there is an optional dependency to the [cpptoml](https://github.com/skystrife/cpptoml) library, which is used to parse the RouDi config file containing mempool configuration.

### QNX
### :fontawesome-brands-blackberry: QNX

QNX SDP 7.0 and 7.1 are supported (shipping with gcc 5.4 and gcc 8.3 respectively).

Expand All @@ -79,7 +79,7 @@ X86_64:
!!! attention
Please ensure that the folder `/var/lock` exist and the filesystem supports file locking.

## Build with CMake
## :material-triangle: Build with CMake

!!! note
Building with CMake is the preferred way, for more complex actions like a coverage scan
Expand Down Expand Up @@ -141,7 +141,7 @@ The `CMakeLists.txt` from `iceoryx_meta` can be used to easily develop iceoryx w
Please take a look at the CMake file [build_options.cmake](https://github.com/eclipse-iceoryx/iceoryx/blob/master/iceoryx_meta/build_options.cmake)
to get an overview of the available build options for enabling additional features.

## Build with script
## :material-powershell: Build with script

As an alternative, we provide a build-test script which we use to integrate iceoryx into our infrastructure.
The intention of the script goes beyond building iceoryx, it is also used for the code coverage scan or the address-sanitizer runs on the CI.
Expand Down Expand Up @@ -172,7 +172,7 @@ You can use the `help` argument for getting an overview of the available options
!!! tip
The examples can be built with `-DEXAMPLES=ON` with iceoryx_meta or by providing the `examples` argument to the build script.

## Build with colcon
## :material-robot: Build with colcon

Alternatively, iceoryx can be built with [colcon](https://colcon.readthedocs.io/en/released/user/installation.html#using-debian-packages) to provide a smooth integration for ROS2 developers.
To build the iceoryx_integrationtest package one requires a minimal [ROS2 installation](https://docs.ros.org/en/foxy/Installation/Linux-Install-Debians.html).
Expand All @@ -195,11 +195,10 @@ colcon build
```

!!! note
If you don't want to install ROS2, you can skip the iceoryx_integrationtest package by calling:
If you don't want to install ROS2, you can skip the iceoryx_integrationtest package by calling:
```bash
colcon build --packages-skip iceoryx_integrationtest
```
```bash
colcon build --packages-skip iceoryx_integrationtest
```
This build method makes the most sense in combination with [rmw_iceoryx](https://github.com/ros2/rmw_iceoryx.git)
1 change: 1 addition & 0 deletions doc/website/getting-started/what-is-iceoryx.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
# What is Eclipse iceoryx?
Binary file added doc/website/images/apex-logo.webp
Binary file not shown.
Binary file added doc/website/images/bosch-logo.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
15 changes: 15 additions & 0 deletions doc/website/images/eclipse-logo.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added doc/website/images/iceoryx-logo-white.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
52 changes: 6 additions & 46 deletions doc/website/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,53 +4,13 @@ title: Home
# Welcome to iceoryx.io

<p align="center">
<img src="https://user-images.githubusercontent.com/8661268/70233652-4aa6d180-175f-11ea-8524-2344e0d3935c.png"
<img src="https://user-images.githubusercontent.com/8661268/114321508-64a6b000-9b1b-11eb-95ef-b84c91387cff.png"
width="50%">
</p>

Eclipse iceoryx is a true zero-copy inter-process communication that allows virtually limitless data transfer at constant time.
Eclipse iceoryx is a true zero-copy inter-process communication that allows virtually limitless data transfer at constant time.

On the follow pages you find everything you need to get started using Eclipse iceoryx:

* [Overview and key concepts](getting-started/overview.md)
* [Installation](getting-started/installation.md)
* [Basic examples](getting-started/basic-examples.md)

<table>
<tr>
<td>Easy</td>
<td>Safe</td>
<td>Fast</td>
</tr>
<tr>
<td>
<ul>
<li>Simple publish-subscribe API with service discovery</li>
<li>Straightforward usage for ROS2 and Adaptive AUTOSAR</li>
<li>Runs on QNX, Linux, MacOS and Windows</li>
<br>
Learn more
</ul>
</td>
<td>
<ul>
<li>Automotive-grade (ISO26262 certification ongoing)</li>
<li>Lock-free algorithms prevent deadlocks</li>
<li>Huge library with safe STL implementations</li>
<br>
Learn more
</ul>
</td>

<td>
<ul>
<li>Written in C++14</li>
<li>C binding available</li>
<li>Zero-copy data transmission with shared memory</li>
<li>Ultra low latency</li>
<br>
Learn more
</ul>
</td>
</tr>
</table>
| <h2>:octicons-stopwatch-16: Easy</h2> | <h2>:material-shield-half-full: Safe</h2> | <h2>:material-truck-fast: Fast</h2> |
|----|----|-----|
|<ul><li>Simple publish-subscribe API with service discovery</li><li>Straightforward usage for ROS2 and Adaptive AUTOSAR</li><li>Runs on QNX, Linux, MacOS and Windows</li></ul>|<ul><li>Automotive-grade (ISO26262 certification ongoing)</li><li>Lock-free algorithms prevent deadlocks</li><li>Huge library with safe STL implementations</li></ul>|<ul><li>Written in C++14</li><li>C binding available</li><li>Zero-copy data transmission with shared memory</li><li>Ultra low latency</li></ul>|
|[Learn more](getting-started/what-is-iceoryx.md#easy){ .md-button }|[Learn more ](getting-started/what-is-iceoryx.md#safe){ .md-button }|[Learn more](getting-started/what-is-iceoryx.md#fast){ .md-button }|
Loading

0 comments on commit ba6051d

Please sign in to comment.