All Projects → SUSE → phoebe

SUSE / phoebe

Licence: BSD-3-Clause license
Phoebe

Programming Languages

c
50402 projects - #5 most used programming language
python
139335 projects - #7 most used programming language
Meson
512 projects
shell
77523 projects
C++
36643 projects - #6 most used programming language

Projects that are alternatives of or similar to phoebe

lwprintf
Lightweight printf library optimized for embedded systems
Stars: ✭ 98 (+18.07%)
Mutual labels:  systems
Cs Video Courses
List of Computer Science courses with video lectures.
Stars: ✭ 27,209 (+32681.93%)
Mutual labels:  systems
Cmu 15 213 Intro To Computer Systems
CS 15-213: Introduction to Computer Systems in 2017 Spring, CMU
Stars: ✭ 121 (+45.78%)
Mutual labels:  systems
Awesome Engineering Team Management
👔 How to transition from software development to engineering management
Stars: ✭ 319 (+284.34%)
Mutual labels:  systems
Trigger
Trigger is a robust network automation toolkit written in Python that was designed for interfacing with network devices.
Stars: ✭ 521 (+527.71%)
Mutual labels:  systems
Illixr
ILLIXR: Illinois Extended Reality Testbed
Stars: ✭ 33 (-60.24%)
Mutual labels:  systems
skylight
A clean, well-written minimalist operating system designed to be used as an educational material for operating system development. [My flagship repo.]
Stars: ✭ 45 (-45.78%)
Mutual labels:  systems
halp
Display a message in morse code on your capslock LED, keyboard backlight or using your screen brightness!
Stars: ✭ 25 (-69.88%)
Mutual labels:  systems
Surprise
A Python scikit for building and analyzing recommender systems
Stars: ✭ 5,151 (+6106.02%)
Mutual labels:  systems
Cybernetics Club
🔃 Cybernetics Reading Club
Stars: ✭ 113 (+36.14%)
Mutual labels:  systems
Kneed
Knee point detection in Python 📈
Stars: ✭ 328 (+295.18%)
Mutual labels:  systems
Pynamical
Pynamical is a Python package for modeling and visualizing discrete nonlinear dynamical systems, chaos, and fractals.
Stars: ✭ 458 (+451.81%)
Mutual labels:  systems
Virtual Assistant
A linux based Virtual assistant on Artificial Intelligence in C
Stars: ✭ 88 (+6.02%)
Mutual labels:  systems
Librec
LibRec: A Leading Java Library for Recommender Systems, see
Stars: ✭ 3,045 (+3568.67%)
Mutual labels:  systems
Signals And Systems Lecture
Continuous- and Discrete-Time Signals and Systems - Theory and Computational Examples
Stars: ✭ 166 (+100%)
Mutual labels:  systems
lwjson
Lightweight JSON parser for embedded systems
Stars: ✭ 66 (-20.48%)
Mutual labels:  systems
Swift Win32
A Win32 application framework for Swift
Stars: ✭ 586 (+606.02%)
Mutual labels:  systems
malleable.systems
Website for the malleable systems and software community
Stars: ✭ 49 (-40.96%)
Mutual labels:  systems
CS110Notes
1st time TAing for CS110 at Stanford: Principles of Computer Systems? - Stars are appreciated :)
Stars: ✭ 59 (-28.92%)
Mutual labels:  systems
Lwmem
Lightweight dynamic memory manager library for embedded systems with memory constraints. It implements malloc, calloc, realloc and free functions
Stars: ✭ 92 (+10.84%)
Mutual labels:  systems

Phoeβe

CI

Idea

Phoeβe (/ˈfiːbi/) wants to add basic artificial intelligence capabilities to the Linux OS.

What problem Phoeβe wants to solve

System-level tuning is a very complex activity, requiring the knowledge and expertise of several (all?) layers which compose the system itself, how they interact with each other and (quite often) it is required to also have an intimate knowledge of the implementation of the various layers.

Another big aspect of running systems is dealing with failure. Do not think of failure as a machine turning on fire rather as an overloaded system, caused by misconfiguration, which could lead to starvation of the available resources.

In many circumstances, operators are used to deal with telemetry, live charts, alerts, etc. which could help them identifying the offending machine(s) and (re)act to fix any potential issues.

However, one question comes to mind: wouldn't it be awesome if the machine could auto-tune itself and provide a self-healing capability to the user? Well, if that is enough to trigger your interest then this is what Phoeβe aims to provide.

Phoeβe uses system telemetry as the input to its brain and produces a big set of settings which get applied to the running system. The decision made by the brain is continuously reevaluated (considering the grace_period setting) to offer eventually the best possible setup.

Architecture

Phoeβe is designed with a plugin architecture in mind, providing an interface for new functionality to be added with ease.

Plugins are loaded at runtime and registered with the main body of execution. The only requirement is to implement the interface dictated by the structure plugin_t. The network_plugin.c represents a very good example of how to implement a new plugin for Phoeβe.

Disclaimer

The mathematical model implemented is a super-basic one, which implements a machine-learning 101 approach: input * weight + bias. It does not use any fancy techniques and the complexity is close to zero.

The plan is to eventually migrate towards a model created in Tensorflow and exported so to be used by Phoeβe, but we are not there yet.

10,000 feet view

The code allows for both training and inference: — all the knobs which can modify the run-time behavior of the implementation are configurable via the settings.json file, where each parameter is explained in detail.

For the inference case, when a match is found, then the identified kernel parameters are configured accordingly.

The inference loop runs every N seconds and the value is configurable via the inference_loop_period. Depending on how quick we want the system to react to a situation change, then the value given to the inference_loop_period will be bigger or smaller.

The code has a dedicated stats collection thread which periodically collects system statistics and populates structures used by the inference loop. The statistics are collected every N seconds, and this value is configurable via the stats_collection_period. Depending on the overall network demands, the value of stats_collection_period will be bigger or smaller to react slower or quicker to network events.

In case a high traffic rate is seen on the network and a matching entry is found, then the code will not consider any lower values for a certain period of time: the value is configurable via the grace_period in the settings.json file.

That behavior has been implemented to avoid causing too much reconfiguration on the system and to prevent sudden system reconfiguration due to network spikes.

The code also supports few approximation functions, also available via the settings.json file.

The approximation functions can tune the tolerance value - runtime calculated - to further allow the user for fine tuning of the matching criteria. Depending on the approximation function, obviously, the matching criteria could be narrower or broader.

Settings

Below is a detailed an explanation of what configurations are available in settings.json, the possible values and what effect they have. (Note that this is not really valid JSON; please remove the lines with double-forward-slashes if you use it.)

{
    "app_settings": {

        // path where application is expecting to find plugins to load
        "plugins_path": "/home/mvarlese/REPOS/phoebe/bin",

        // max_learning_values: number of values learnt per iteration
        "max_learning_values": 1000,

        // save trained data to file every saving_loop value
        "saving_loop": 10,

        // accuracy: the level of accuracy to find a potential entry
        // given the transfer rate considered.
        //
        // MaxValue: Undefined, MinValue: 0.00..1
        // Probably not very intuitive: a higher number correspondes to
        // a higher accuracy level.
        "accuracy": 0.5,

        // approx_function: the approximation function applied
        // to the calculated tolerance value used to find a
        // matching entry in values.
        //
        // Possible values:
        // 0 = no approximation function
        // 1 = square-root
        // 2 = power-of-two
        // 3 = log10
        // 4 = log
        "approx_function": 0,

        // grace_period: the time which must be elapsed
        // before applying new settings for a lower
        // transfer rate than the one previously measured.
        "grace_period": 10,

        // stats_loop_period: the cadence of time which
        // has to be elapsed between stats collection.
        // It is expressed in seconds but it accepts non-integer
        // values; ie. 0.5 represents half-second
        "stats_collection_period": 0.5,

        // inferece_loop_period: the time which must be
        // elapsed before running a new inference evaluation
        "inference_loop_period": 1

    },

    "labels": {
        // geography: valid options are EMEA, NA, LAT, APAC, NOT_SET
        "geography": "NOT_SET",
        // business: valid options are RETAIL, AUTOMOTIVE, SERVICE, NOT_SET
        "business": "NOT_SET",
        // behavior: valid options are THROUGHPUT, LATENCY, POWER
        "behavior": "THROUGHPUT"
    },

    "weights":{
        "transfer_rate_weight": 0.8,
        "drop_rate_weight" : 0.1,
        "errors_rate_weight" : 0.05,
        "fifo_errors_rate_weight" : 0.05
    },

    "bias": 10
}

Building and installation.

See BUILDING.md for build instructions. Packages for various distributions can be found in the OpenBuild service.

Running

The code supports multiple mode of operation:

  • Training mode:
./build/src/phoebe -f ./csv_files/rates.csv -m training -s settings.json
  • Inference
./build/src/phoebe -f ./csv_files/rates_trained_data.csv -i wlan0 -m inference -s settings.json

Feedback / Input / Collaboration

If you are curious about the project and want more information, please, do reach out to [email protected].
I will be more than happy to talk to you more about this project and what other initiatives are in this area.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].