[[TOC(heading=OMF Documentation, OMF/*, reverse, depth=1)]] = OMF Documentation = == What is OMF? == OMF is a generic framework for controlling and managing networking testbeds. From an experimenter's perspective OMF provides: * a domain-specific language, named OEDL, which allows the user to: * describe the resources needed for an experiment, and their required configuration * describe the applications to use in an experiment, and the measurements to collect from them * describe the different tasks to perform during an experiment, and the time or event that trigger them * a set of software tools, which: * accept as an input the previously described experiment * initialize and configure the needed resources with the required configuration and applications * send commands to the resources to effectively execute the described experiment tasks at the appropriate time/events * collect measurement data from the applications and/or the resources * access and analyse the resulting experimental data This overview of OMF from an user's perspective is illustrated in the Figure 1: Figure 1: OMF Overview As mentioned earlier, the input to OMF is an experiment described with OEDL. OMF deploys and configures this experiment on the testbeds based on the user's description. It then initiates and controls the execution of the experiment. While the experiment is being executed, data is measured and collected according to the user's description. This data is stored in a database for later analysis, or re-used by the OMF's control functions to steer some aspects of the experiment. == System Architecture from a User's Perspective == Figure 2 shows the OMF system architecture and entity interactions when running an experiment. The OMF entities are represented in red and yellow boxes on this figure. Please refer to the OMF Glossary for the detailed definition of the terms on this figure. Figure 2: OMF System Architeture These are the steps and interactions that occur when an experiment is ran with OMF: * The experimenter Alice starts a new instance of an Experiment Controller (EC), and passes her Experiment Description (ED) to it * The EC interprets the ED, and sends some requests to the Aggregate Manager (AM) of the testbed to ask for the initialisation and configuration of Alice's required resources * The multiple services of the AM initialise and configure these resources (e.g. copy an entire disk image or just some application packages on the resources, etc...) * When the resources are ready, the EC sends commands to the Resource Controllers (RCs), which run on each of these resources * The RCs interpret these commands and execute the actions, such as starting up application M, changing the parameters of application N, etc... * At this stage the experiment is "running"... * While the experiment is running, the applications may send measurement data to the Measurement Library (ML) * The ML may execute some pre-processing filter operation on the measurements (e.g. compute average over a window, etc...) * The ML sends the pre-processed measurements to the Measurement Collection Service, which stores them in a unique database for this experiment As illustrated on Figure 2, OMF allows multiple researchers to run many experiments concurrently. However, the current OMF release does not support resource virtualization yet. Therefore, concurrent experiments have to use disjoint set of resources (e.g. Alice's experiment uses resource 1, 2, and 3, while Bob's experiment uses resources 7 and 8). Furthermore, when using wireless resources, concurrent experiments need to use disjoint separate channels to avoid interferences. The testbed booking/scheduling service allows such selection. Please refer to the OMF Glossary for the detailed definition of the OMF entities on Figure 2. == More on Data Measurement, Collection and Analysis == OMF uses the OMF Measurement Library (OML) for collecting experiment results. OML enables real-time collection of data from the various applications being run during an experiment. It provides a Measurement Library, which enables experimenters to define measurement points inside their C/C++ application source code. OML also allows experimenters to define and configure filters to apply some pre-processing function to the data collected from a measurement points. Furthermore, in case the source code of an application is not available, OML provide a simple scheme to "wrap" around such an application, and collect its outputs as measurements. The following Figure 3 provides a schematic view of OML interaction with OMF Figure 3: OML interaction with OMF OML is based on a client/server architecture, and comprises an OML Collection Server and an OML Measurement Library (Client). The Collection Server constantly runs as a daemon on a testbed server (e.g. the server running the AM). It collects results from the various resources specified in the experiment. An OML Client is available as a library on each resources used by an experiment. The applications running on a given resources forward the required measurements to their OML Client. The OML Client applies any defined pre-processing filters on this data and sends the result to the OML Collection Server. Once an experiment is complete, the stored measurements or results can be accessed for further analysis. Currently, these measurements are stored in an SQLite database. User can then manipulate these data using SQL queries or export them in some other format for further processing and analysis. For detailed information on using OML with OMF, refer to the [wiki:/OMF/OMF60/user/guide OMF User Guide]. === Note about OMF/OML: === OML has been designed and developed as a set of software completely independent from OMF (although OMF has some ''hooks'' included to work seamlessly with OML when present). In other words, OML can be used without OMF, and it is in fact being used in such context by third party institutions at the moment. Similarly, OMF can also be used without OML, i.e. as long as your experiment or applications are not using OML measurement points, OMF will run your experiment happily. However, you will then need to deploy your own measurement collection scheme. == Next... == * You are an OMF users, e.g. researchers, experimenters, go on to the [wiki:/OMF/OMF60/user/guide OMF User Guide] * You are a testbed operator, you may want to download and install OMF on your testbed * You are a developer, you may want to check out OMF's development notes, or [https://github.com/mytestbed/omf browse the source repository], or check out the [https://github.com/mytestbed/omf/issues open development issues] Each OMF version has a separate set of documentation pages: * [wiki:/OMF/OMF60 OMF version 6.0] * [wiki:/OMF/OMF54 OMF version 5.4] * [wiki:/OMF/OMF53 OMF version V5.3] * [wiki:/OMF/OMF52 OMF version V5.2] * [wiki:/OMF/OMF51 OMF version V5.1]