remote forking and scheduling

Has anyone worked on or thought about remote forking in the context of Internet of Things?

The idea is to have a fork which creates a process on another machine of the same network. Then, there would be also a scheduler to schedule those remote processes.

Is there anything there related to a distributed forking and scheduling of processes and threads?

Would such thing be useful for IoT applications?

Hey,

Has anyone worked on or thought about remote forking in the context of Internet of Things?

Well, without MMU and with the little memory we're targeting, even local forking is hard to impossible to do efficiently.

Would such thing be useful for IoT applications?

What use-case(s) do you have in mind?

Kaspar

Hi Arash,

forking a process for this purpose hasn’t been on my mind yet. Do you actually need to transfer processes or is the goal to offload work depending on collected input data or … what is the advantage of forking over, let’s say, message passing? You could run a process on a backend server that accepts messages, performs your calculations.

I do mention message passing because we are working to port the C++ Actor Framework (CAF) [1] to RIOT. Actors are lightweight entities that communicate via messages and are scheduled in a thread pool. We already got the core library working (although a lot has changed since), but the network layer still needs a lot of work to be suitable for IoT scenarios.

Would this fit your use-case? Are you looking for things like distributed scheduling or (pointing to a comment from one of your earlier emails) do you imagine the offloading process to be more automated and without the need for developers to implement the backend themselves?

Raphael

[1] https://github.com/actor-framework/actor-framework

Hi Raphael,

Thanks for the explanations. I need to learn more about the Actor Model.

Actually message passing would be fine I guess.

There are two scenarios I am thinking about.

The first scenario is when you are programming on a particular device (let’s say for a washing machine) and you use the sensor data which are not available on the device itself but rather available in the smart home as a whole (let’s say the programmer of the washing machine needs to check the time, but only the clock has the time. the programmer of the washing machine writes the program as if the washing machine has the time but in fact in the lower level there are message passing to find the sensor data).

Basically in this first scenario, the programmer of each device write a program as if the device knows everything but in the lower level, devices communicate in order to get information from each other.

In the second scenario, the programmer writes a code which is heavy for the device (let’s say some video processing application on a wearable camera). There will be profile data available for this piece of code. At run-time, the decision is made to offload part of this code automatically without the user knowing about it. Again there is a concept of smart environment where CPUs and memories are available and main scheduler can determine how long a computation can take, so the device can decide if it is worth to offload the computation or not.

In both scenarios the programmer is unaware of the details and s/he knows only programming for a smart environment/home/health system.