Blog

Hyperledger Iroha on Raspberry PI

Install Hyperledger Iroha on Raspberry PI.

If you tried to build Iroha on Raspberry from source, you might encounter a problem of virtual memory exhaustion when building irohad (specifically during the build of on_demand_ordering_init.o), or one of the errors listed in this page: Common Errors when building Hyperledger Iroha from source code.

virtual memory exhausted: Cannot allocate memory make[3]: *** [irohad/main/CMakeFiles/application.dir/build.make:76: irohad/main/CMakeFiles/application.dir/impl/on_demand_ordering_init.o] Error 1

If you haven’t yet installed all the dependencies for iroha, you may also want to have a look at this page: Install dependencies of Hyperledger Iroha manually.

At this moment, there are no official Hyperledger docker images of Iroha for Raspberry PI. There are some implementations out there, such as the iroha-pi (https://github.com/tkyonezu/iroha-pi), an environment for building and running hyperledger/iroha more easily, but you need to trust where these implementations come from. I have personally not tried it, so I can’t really say much about it.

The following shows how to build Hyperledger Iroha on Raspberry PI. No custom software of docker images involved.

USE THIS INFORMATION AT YOUR RISK. THE FOLLOWING IS PROVIDED ON A “AS IS” BASIS, WITHOUT WARRANTIES OF ANY KIND.

Disclaimer: All product names, logos, and brands are property of their respective owners. All company, product and service names used in this article are for identification purposes only. Use of these names, logos, and brands does not imply endorsement.

Tested on the following hardware/software:

  • Raspberry PI 3 Model B+ (armv7l)
  • Raspbian GNU/Linux 10 (buster) – also tested on Raspbian 9 (stretch)
  • Hyperledger Iroha v1.1.3 – also tested on 1.1.1

Table of Contents

  1. Executive Summary
  2. On “virtual memory exhausted: Cannot allocate memory”
  3. Step by step Building
    1. Dependencies
    2. Build on Raspberry armv7l
    3. Build on Debian x86_64
    4. Cross-compile for armv7l on x86_64
    5. Quick check that the cross-compiling was successful and correct
  4. Conclusion
  5. References & Useful links

0) Straight to the solution: Cross-compiling for armv7l on x86_64

If you want to go straight to the point (this works for me, hope it does for you too) on how to compile on_demand_ordering_init.o for armv7l on x86_64, then here it is.

In the following, we use the arm-linux-gnueabihf-g++-8 compiler (because we are compiling on stretch), which you may need to install it first on your machine with: sudo apt-get install g++-arm-linux-gnueabihf gdb-multiarch. In the command below, the secret sauce, the magic formula, the abracadabra is provided by these options: -mfloat-abi=hard -mfpu=vfp -mtls-dialect=gnu -marm -march=armv6+fp.

The following is to be run from the Debian desktop and it assumes that the iroha source code is contained in /home/user/PKG/CROSS/iroha.

Before launching the build, move to the build/irohad/main directory:
cd /home/pi/PKG/CROSS/iroha/build/irohad/main and then run:

arm-linux-gnueabihf-g++-8 -mfloat-abi=hard -mfpu=vfp -mtls-dialect=gnu -marm -march=armv6+fp -DBOOST_ALL_NO_LIB -DBOOST_FILESYSTEM_DYN_LINK -DBOOST_NO_IOSTREAM -DBOOST_NO_RTTI -DBOOST_SYSTEM_DYN_LINK -DBOOST_THREAD_DYN_LINK -DFMT_HEADER_ONLY -I/home/pi/PKG/CROSS/iroha/irohad -I/home/pi/PKG/CROSS/iroha/libs -I/home/pi/PKG/CROSS/iroha/shared_model -I/home/pi/PKG/CROSS/iroha/build/schema -isystem /home/pi/PKG/CROSS/grpc/include -isystem /usr/local/include/soci -isystem /usr/include/postgresql -isystem /usr/include -Wall -fdiagnostics-color=always -g -g -Wextra -Wno-unused-parameter -Wno-deprecated-declarations -O0 -fPIC -std=gnu++14 -o CMakeFiles/application.dir/impl/on_demand_ordering_init.o -c /home/pi/PKG/CROSS/iroha/irohad/main/impl/on_demand_ordering_init.cpp

An easy way to get this command right is given by simply building iroha on the Debian desktop using the default build command (iroha uses cmake) and add the abracadabra above. You can see the precise command by running ps ax | grep c++ while on_demand_ordering_init is being built.

1) Executive Summary

Very briefly, the method consists in:

  1. building iroha on Raspberry (which is armv7l) until (most likely) the virtual memory of the Raspberry is exhausted,
  2. cross-compiling the file on_demand_ordering_init.o for arm on a x86_64 Debian Linux machine,
  3. copying the generated on_demand_ordering_init.o back to the Raspberry and keep the building process of irohad.

A FEW IMPORTANT POINTS TO KEEP IN MIND (namely, taking into account the following items has worked for me):

  • The very same Debian distribution and version is used on both the Raspberry (Raspbian 10 buster) and the Linux machine (Debian 10 buster). This is just to ensure that the versions of the libraries used are the same.
  • The version of the compiler used on Raspbian and Debian should be the same (actually this is not really necessary; the important thing is that the cross-compiler can generate a file compatible with the files built on the Raspberry. For more info, please refer to the links at the end of the page.
  • In the following of this page, iroha is built on both the armv7l raspberry and the x64 debian machine, then only on_demand_ordering_init.o is cross-compiled. Another way, potentially faster is to run the gcc preprocessor on the file (-E flag) in Raspberry and then cross-compile only this file on the x64 Debian, as described here (https://raspberrypi.stackexchange.com/questions/93610/how-to-compile-project-on-raspberry-pi-even-when-gs-virtual-memory-exhausted/93612). Have not tried this way.

2) On “virtual memory exhausted: Cannot allocate memory”

Compiling iroha on Raspberry fails because of the large virtual memory needed to build the iroha daemon irohad. In fact, the build fails even when the Raspberry PI is configured with very large swaps (4GB or even 8GB are not enough), so that’s not a way out.

It is still recommended to configure the Raspberry with 2GB of swap.

Actually, while compiling on_demand_ordering_init.o, the Raspberry does not use more than 1300-1400MB and when the compilation error occurs, there is still free memory available:

pi@raspberry:~ $ free -m
     total   used   free shared buff/cache available
Mem:   926    862     25      0         37        20
Swap: 2047   1376    671

virtual memory exhausted: Cannot allocate memory make[3]: *** [irohad/main/CMakeFiles/application.dir/build.make:76: irohad/main/CMakeFiles/application.dir/impl/on_demand_ordering_init.o] Error 1

3) Step by step Building

3.1) Dependencies

Iroha currently uses the vcpkg dependency manager (https://iroha.readthedocs.io/en/master/build/index.html). If this method does not work on your raspberry, you may want to install each dependency manually. Luckily, it is easy to find what iroha dependencies are: they are simply listed in this file: iroha/vcpkg/build_iroha_deps.sh. If you look into it, then you’ll see that the dependencies are contained in just two files:

  • VCPKG_DEPS_LIST
  • VCPKG_HEAD_DEPS_LIST

While installing each dependency, you just need to be careful to install the right version for iroha. You can find here Install dependencies of Hyperledger Iroha manually a step-by-step guide on how to install each dependency manually. Some care must be taken if you plan on building the dependencies from source, as some need very specific options at build time.

3.2) Build on Raspberry armv7l

On Raspberry we disable the tests (-DTESTING=OFF) to build iroha faster (it will still take around one day or so, so be patient…)

cmake -H. -Bbuild -DTESTING=OFF

Keep an eye on the errors, if any. In some cases you may need to explicitly pass the directory where you’ve installed the oneTBB dependency:

cmake -H. -Bbuild -DTESTING=OFF -Dtbb_INCLUDE_DIR=/home/pi/PKG/oneTBB/include -Dtbb_LIBRARY=/home/pi/PKG/oneTBB/build/linux_armv7_gcc_cc8.3.0_libc2.28_kernel4.19.97_release/libtbb.so -LA

then

mkdir build
cd build
cmake ..
make -j4

If the building stops and exits with the infamous “virtual memory exhausted: Cannot allocate memory”, from your x86_64 linux machine copy the glorious cross-compiled on_demand_ordering_init.o to build/irohad/main/CMakeFiles/application.dir/impl/on_demand_ordering_init.o and simply re-launch from the build/ directory cmake -j4 and now it should be OK.

Building iroha-cli should not throw errors.

3.3) Build on Debian x86_64

The command to build on x86 is the same. Depending on how you’ve installed the dependencies, you may need to configure the library locations explicitly, or not, so always keep an eye on the output of cmake -H. -Bbuild -DTESTING=OFF if you see any “library not found” message.

For instance, the following command explicitly specifies a number of libraries needed by iroha: tbb, grpc, gpr, SOCI, SOCI_postgresql, address_sorting.

cmake -H. -Bbuild -DTESTING=OFF -Dtbb_INCLUDE_DIR=/home/pi/PKG/CROSS/oneTBB/include -Dtbb_LIBRARY=/home/pi/PKG/CROSS/oneTBB/ -Dgrpc_LIBRARY=/home/pi/PKG/CROSS/grpc/cmake/build/libgrpc.so -Dgrpc_INCLUDE_DIR=/home/pi/PKG/CROSS/grpc/include -Dgrpc_CPP_PLUGIN=/home/pi/PKG/CROSS/grpc/cmake/build/grpc_cpp_plugin -Dgrpc_grpc++_LIBRARY=/home/pi/PKG/CROSS/grpc/cmake/build/libgrpc++.so -Dgpr_LIBRARY=/home/pi/PKG/CROSS/grpc/cmake/build/libgpr.so -DSOCI_LIBRARY=/usr/local/lib64/libsoci_core.a -DSOCI_postgresql_PLUGIN=/usr/local/lib64/libsoci_postgresql.so -Daddress_sorting_LIBRARY=/home/pi/PKG/CROSS/grpc/cmake/build/libaddress_sorting.so -LA

3.4) Cross-compile for armv7l on x86_64

This command builds for armv7l on x86_64: arm-linux-gnueabihf-g++-8 -mfloat-abi=hard -mfpu=vfp -mtls-dialect=gnu -marm -march=armv6+fp.

The remaining part of the command is the same as the default building process. It can be seen during the build process on your Debian Linux machine by launching a ps ax | grep c++ while on_demand_ordering_init is being built.

The file you need will be saved to CMakeFiles/application.dir/impl/on_demand_ordering_init.o and this is the file you’ll need to copy to the same path on your raspberry.

3.5) Quick check that the cross-compiling was successful and correct

Run this on your Debian Linux machine (the iroha source code is assumed to be in this directory: /home/user/PKG/CROSS/iroha).

user@linux:~$ arm-linux-gnueabihf-readelf -A PKG/CROSS/iroha/build/irohad/main/CMakeFiles/application.dir/impl/on_demand_ordering_init.o
Attribute Section: aeabi
File Attributes
Tag_CPU_name: “6”
Tag_CPU_arch: v6
  Tag_ARM_ISA_use: Yes
  Tag_THUMB_ISA_use: Thumb-1
  Tag_FP_arch: VFPv2
  Tag_ABI_PCS_wchar_t: 4
  Tag_ABI_FP_denormal: Needed
  Tag_ABI_FP_exceptions: Needed
  Tag_ABI_FP_number_model: IEEE 754
  Tag_ABI_align_needed: 8-byte
  Tag_ABI_align_preserved: 8-byte, except leaf SP
  Tag_ABI_enum_size: int
  Tag_ABI_VFP_args: VFP registers
  Tag_ABI_optimization_goals: Aggressive Debug
  Tag_CPU_unaligned_access: v6

If you run the same command readelf -A on the raspberry, on any .o file of the iroha build, you should get the same output:

pi@raspberry:~ $ readelf -A PKG/iroha/build/shared_model/backend/protobuf/CMakeFiles/shared_model_proto_backend.dir/queries/impl/proto_get_peers.o
Attribute Section: aeabi
File Attributes
  Tag_CPU_name: “6”
  Tag_CPU_arch: v6
  Tag_ARM_ISA_use: Yes
  Tag_THUMB_ISA_use: Thumb-1
  Tag_FP_arch: VFPv2
  Tag_ABI_PCS_wchar_t: 4
  Tag_ABI_FP_denormal: Needed
  Tag_ABI_FP_exceptions: Needed
  Tag_ABI_FP_number_model: IEEE 754
  Tag_ABI_align_needed: 8-byte
  Tag_ABI_align_preserved: 8-byte, except leaf SP
  Tag_ABI_enum_size: int
  Tag_ABI_VFP_args: VFP registers
  Tag_ABI_optimization_goals: Aggressive Debug
  Tag_CPU_unaligned_access: v6

4) Conclusion

Done!

5) References and useful links

Was this useful?

Let us know at:

Common Errors when building Hyperledger Iroha from source code

Please find here a step by step guide on how to build Hyperledger Iroha on Raspberry PI from source: Iroha on Raspberry.

[ 14%] Building CXX object schema/CMakeFiles/ordering_grpc.dir/ordering.pb.o
[ 14%] Built target block_creator_common
[ 14%] Generating loader.grpc.pb.h, loader.grpc.pb.cc
[ 14%] Generating loader.pb.h, loader.pb.cc

/home/pi/iroha/irohad/main/server_runner.cpp: In member function 'iroha::expected::Result<int, std::__cxx11::basic_string<char> > ServerRunner::run()':
/home/pi/iroha/irohad/main/server_runner.cpp:47:3: error: 'serverInstanceCV_' was not declared in this scope
   serverInstanceCV_.notify_one();
   ^~~~~~~~~~~~~~~~~

/home/pi/iroha/irohad/main/server_runner.cpp:47:3: note: suggested alternative: 'serverInstance_'
   serverInstanceCV_.notify_one();
   ^~~~~~~~~~~~~~~~~
   serverInstance_

Scanning dependencies of target loader_grpc
[ 14%] Building CXX object schema/CMakeFiles/loader_grpc.dir/loader.pb.o
/home/pi/iroha/irohad/main/server_runner.cpp: In member function 'void ServerRunner::waitForServersReady()':

/home/pi/iroha/irohad/main/server_runner.cpp:60:5: error: 'serverInstanceCV_' was not declared in this scope
     serverInstanceCV_.wait(lock);
     ^~~~~~~~~~~~~~~~~

/home/pi/iroha/irohad/main/server_runner.cpp:60:5: note: suggested alternative: 'serverInstance_'
     serverInstanceCV_.wait(lock);
     ^~~~~~~~~~~~~~~~~
     serverInstance_

[ 15%] Linking CXX static library libyac_grpc.a
make[3]: *** [irohad/main/CMakeFiles/server_runner.dir/build.make:63: irohad/main/CMakeFiles/server_runner.dir/server_runner.o] Error 1
make[2]: *** [CMakeFiles/Makefile2:1340: irohad/main/CMakeFiles/server_runner.dir/all] Error 2
make[2]: *** Waiting for unfinished jobs....

[ 21%] Building CXX object schema/CMakeFiles/endpoint.dir/endpoint.grpc.pb.o

In file included from /home/pi/PKG/iroha11/irohad/main/server_runner.cpp:6:
/home/pi/PKG/iroha11/irohad/main/server_runner.hpp:62:8: error: 'condition_variable' in namespace 'std' does not name a type
   std::condition_variable serverInstanceCV_;
    ^~~~~~~~~~~~~~~~~~

/home/pi/PKG/iroha11/irohad/main/server_runner.hpp:62:3: note: 'std::condition_variable' is defined in header '<condition_variable>'; did you forget to '#include <condition_variable>'?
/home/pi/PKG/iroha11/irohad/main/server_runner.hpp:13:1:
+#include <condition_variable>
/home/pi/PKG/iroha11/irohad/main/server_runner.hpp:62:3:
   std::condition_variable serverInstanceCV_;
   ^~~

/home/pi/PKG/iroha11/irohad/main/server_runner.cpp: In member function 'iroha::expected::Result<int, std::__cxx11::basic_string<char> > ServerRunner::run()': /home/pi/PKG/iroha11/irohad/main/server_runner.cpp:47:3: error: 'serverInstanceCV_' was not declared in this scope    serverInstanceCV_.notify_one();    ^~~~~~~~~~~~~~~~~ /home/pi/PKG/iroha11/irohad/main/server_runner.cpp:47:3: note: suggested alternative: 'serverInstance_'    serverInstanceCV_.notify_one();    ^~~~~~~~~~~~~~~~~    serverInstance_ /home/pi/PKG/iroha11/irohad/main/server_runner.cpp: In member function 'void ServerRunner::waitForServersReady()': /home/pi/PKG/iroha11/irohad/main/server_runner.cpp:60:5: error: 'serverInstanceCV_' was not declared in this scope      serverInstanceCV_.wait(lock);      ^~~~~~~~~~~~~~~~~ /home/pi/PKG/iroha11/irohad/main/server_runner.cpp:60:5: note: suggested alternative: 'serverInstance_'      serverInstanceCV_.wait(lock);      ^~~~~~~~~~~~~~~~~      serverInstance_ [ 22%] Building CXX object irohad/ordering/CMakeFiles/on_demand_ordering_gate.dir/impl/ordering_gate_cache/on_demand_cache.o make[3]: *** [irohad/main/CMakeFiles/server_runner.dir/build.make:63: irohad/main/CMakeFiles/server_runner.dir/server_runner.o] Error 1 make[2]: *** [CMakeFiles/Makefile2:1340: irohad/main/CMakeFiles/server_runner.dir/all] Error 2 make[2]: *** Waiting for unfinished jobs....

SOLUTION: add

#include <condition_variable>

to: irohad/main/server_runner.hpp

Install dependencies of Hyperledger Iroha manually

This page describes how to install the dependencies of Hyperledger iroha manually. Since some time now, iroha has moved to vcpkg as a tool to deal with the dependencies needed to install iroha. VCPKG is a very convenient tool to use in order to keep and maintain the dependencies for Hyperledger IROHA.

Unfortunately, however, vcpkg does not support (as of today) all platforms, especially arm. Specifically, vcpkg does not support arm-linux architectures such as armv7l, i.e. Rapberry.

[See, for instance: https://github.com/microsoft/vcpkg/issues/8216. Note: it does support some other arm architectures, such as arm-windows and arm64-windows (https://github.com/Microsoft/vcpkg/issues/2360)]

Increase the SWAP space of your Raspberry to 2GB

Before starting, increase the SWAP space of your Raspberry to 2GB. To see how this can be done, you can refer to: https://raspberrypi.stackexchange.com/questions/70/how-to-set-up-swap-space.

Installing dependencies with Vcpkg Dependency Manager

https://iroha.readthedocs.io/en/master/build/index.html#installing-dependencies-with-vcpkg-dependency-manager

This part is meant as a way to find out which exact versions to install of each iroha dependency and therefore to survive the current stable release of iroha, which as of today is 1.1.3.

pi@raspberry~ $ lsb_release -a
No LSB modules are available.
Distributor ID: Raspbian
Description:    Raspbian GNU/Linux 10 (buster)
Release:    10
Codename:   buster
pi@rasbiblack:~/iroha $ git show
commit 561526112dc2666cdfdbd888984a9fef9b8ed66d (HEAD, tag: latest, tag: 1.1.3, origin/support/1.1.x)

The files you should be looking at are:

  • iroha/vcpkg/VCPKG_DEPS_LIST
  • iroha/vcpkg/VCPKG_HEAD_DEPS_LIST

Basically, in order to find out which version you should install for each dependency, you can simply launch the following command:

 vcpkg/vcpkg install name_of_dependency_from_file

where name_of_dependency_from_file comes from the two files above.

And the output will tell you what version vcpkg would install if arm-linux was supported. For some dependencies the latest version will be installed, while for others a specific version will be chosen.

Additionally, in the light of this post: https://www.wirelessblockchain.com/blog/2019/09/hyperledger-iroha-on-raspberry-pi/ you may want to try to install the same version on the desktop used to cross-compile and on the raspberry. Perhaps this is not necessary but it is just an extra point to be careful.

Sometimes you can also run apt-cache search  libz and see if the version from apt matches or is newer than the dependency needed and you may give it a try in order to save time from building from source.

Pay attention to lines like this:

soci[boost,postgresql]

This means soci should be built with boost and postgresql support.

Example: install soci from source with boost and postgresql support.

https://stackoverflow.com/questions/35392767/how-to-build-soci-with-postgresql#35732467

git clone https://github.com/SOCI/soci.git
cd soci/
git checkout 4.0.0
mkdir build
cd build/
cmake -G "Unix Makefiles" -DWITH_BOOST=ON -DWITH_POSTGRESQL=ON ../

Examples: Some versions for iroha 1.1.3 and Raspberry PI 3 B+

The following are the versions of some dependencies that work for me

cmake 3.14 installed with curl and lz support.

The support for curl and lz is paramount, so make sure you don’t forget it!

Before installing cmake remember to sudo apt install zlib1g-dev libssl-dev (will be needed in a second stage to install the elliptic curves package.

cd CMake
./bootstrap --system-curl

ninja-1.8.2

boost 1.71

protobuf 3.12.1

git clone https://github.com/protocolbuffers/protobuf.git
cd protobuf
git checkout v3.12.1
git submodule update --init --recursive

Install according to:
https://github.com/protocolbuffers/protobuf/blob/master/src/README.md

./autogen.sh && ./configure && make -j4
make –j4 test
sudo make install
sudo ldconfig # refresh shared library cache. 

ed25519

$ git clone https://github.com/hyperledger/iroha-ed25519.git
cd iroha-ed25519/
git checkout 2.0.2
mkdir build
cd build/
cmake ../ -DHASH=sha3_brainhub -DBUILD=SHARED -DEDIMPL=ref10
make && sudo make install

Some References/Links [some are not relevant, to be removed from this list]

  • https://github.com/protocolbuffers/protobuf/blob/master/src/README.md
  • https://stackoverflow.com/questions/10404027/cant-compile-example-from-google-protocol-buffers
  • https://github.com/tensorflow/tensorflow/issues/5684
  • https://stackoverflow.com/questions/24096807/dso-missing-from-command-line
  • https://stackoverflow.com/questions/37613415/c-undefined-reference-to-atomic-load-16
  • https://github.com/gflags/gflags/blob/master/INSTALL.md
  • https://github.com/microsoft/vcpkg/issues/8185
  • https://github.com/Microsoft/CNTK/issues/2198
  • http://www.linuxfromscratch.org/blfs/view/8.3/general/ninja.html
  • https://github.com/google/googletest
  • https://github.com/google/googletest/blob/master/googletest/README.md
  • https://grpc.io/
  • https://github.com/google/benchmark
  • https://github.com/google/benchmark#installation
  • https://github.com/grpc/grpc/issues/22396
  • https://github.com/grpc/grpc-node/issues/1240
  • https://stackoverflow.com/questions/35392767/how-to-build-soci-with-postgresql#35732467
  • https://github.com/grpc/grpc/tree/master/src/cpp
  • https://github.com/grpc/grpc/blob/master/BUILDING.md
  • https://github.com/grpc/grpc/blob/master/test/distrib/cpp/run_distrib_test_cmake_module_install.sh
  • https://cmake.org/cmake/help/latest/variable/CMAKE_INSTALL_PREFIX.html
  • https://github.com/Tencent/rapidjson
  • http://soci.sourceforge.net/doc/index.html
  • http://soci.sourceforge.net/doc/release/4.0/installation/
  • https://github.com/gabime/spdlog
  • https://github.com/ReactiveX/RxCpp
  • https://github.com/catchorg/Catch2
  • https://stackoverflow.com/questions/24096807/dso-missing-from-command-line
  • https://stackoverflow.com/questions/19901934/libpthread-so-0-error-adding-symbols-dso-missing-from-command-line
  • https://github.com/pytorch/pytorch/issues/22898
  • https://github.com/grpc/grpc/issues/15587
  • https://github.com/redis/redis/issues/6275
  • https://github.com/PurpleI2P/i2pd/issues/897
  • https://github.com/grpc/grpc/pull/21341
  • https://github.com/grpc/grpc/pull/20414
  • https://github.com/llvm-mirror/llvm/blob/master/cmake/modules/CheckAtomic.cmake
  • https://github.com/grpc/grpc/pull/21341/commits/2f4cf1d9265c8e10fb834f0794d0e4f3ec5ae10e
  • https://github.com/grpc/grpc/blob/master/BUILDING.md
  • https://github.com/grpc/grpc/pull/21341/files
  • https://github.com/grpc/grpc/issues/11768
  • https://cmake.org/cmake/help/v3.10/envvar/CXXFLAGS.html?highlight=cmake_cxx_flags
  • https://stackoverflow.com/questions/13693842/why-am-i-getting-the-error-cin-does-not-name-a-type
  • https://github.com/dashpay/dash/issues/1751
  • https://stackoverflow.com/questions/18546540/narrowing-conversion-of-unsigned-int-to-short-unsigned-int
  • https://software.intel.com/content/www/us/en/develop/documentation/tbb-tutorial/top.html
  • http://www.metagenomics.wiki/tools/bowtie2/install/libtbb-so-2

Edge Computing: Key enabler for 5G

The concept of edge computing was first introduced as Mobile Edge Computing (MEC) by ETSI in 2015 and later renamed as Multi-Access Edge Computing in 2017 in order to widen its scope beyond its initial focus on mobile radio access networks (RAN). According to ETSI: “Mobile edge computing provides an IT service environment and cloud computing capabilities at the edge of the mobile network, within the radio access network and in close proximity to mobile subscribers”. In other words, the basic idea of MEC is to provide IT and cloud computing capabilities within the RAN. This is achieved by co-locating local computing servers with base stations or access points, or at least deploying the MEC servers in their close vicinity.

By shortening the physical distance between the locations where the data or the computation is consumed (i.e. the mobile device) and where it is stored or provided (i.e. the MEC server), metrics such as delay and bandwidth can be greatly improved compared to the case when the same services are provided by centralized cloud servers. Additionally, edge computing promises to reduce the energy consumption of mobile devices through the computation offloading of intensive tasks to the edge of the network. An array of disparate applications may benefit from the low latency and the high bandwidth provided by MEC. Examples of applications that MEC enables include: augmented reality, content delivery and caching, video analytics, automated driving and mobile data analytics. Additionally, edge computing plays a central role in providing computational capabilities for IoT.

Edge computing is considered as a key enabler for 5G networks in order to be able to meet the stringent requirements set by some of the verticals supported in 5G, such as automotive, healthcare and the aforementioned Internet of Things.