├── cvem ├── cvem │ ├── __init__.py │ ├── CMPInfo.py │ ├── config.py │ └── Monitor.py ├── connectors │ ├── __init__.py │ └── one │ │ ├── __init__.py │ │ ├── config_one.py │ │ └── OpenNebula.py ├── NOTICE ├── README ├── MANIFEST.in ├── changelog ├── logging.conf ├── etc │ ├── one.cfg │ └── cvem.cfg ├── cvemd.py ├── setup.py ├── INSTALL ├── README.md ├── scripts │ └── cvem └── LICENSE ├── doc └── source │ ├── _static │ ├── Lato-Bold.ttf │ ├── Lato-Regular.ttf │ ├── RobotoSlab-Bold.ttf │ ├── Inconsolata-Bold.ttf │ ├── Inconsolata-Regular.ttf │ ├── RobotoSlab-Regular.ttf │ ├── fontawesome-webfont.eot │ ├── fontawesome-webfont.ttf │ ├── fontawesome-webfont.woff │ ├── badge_only.css │ ├── theme_overrides.css │ ├── theme.js │ └── modernizr.min.js │ ├── sphinx_rtd_theme │ ├── static │ │ ├── fonts │ │ │ ├── Lato-Bold.ttf │ │ │ ├── Lato-Regular.ttf │ │ │ ├── RobotoSlab-Bold.ttf │ │ │ ├── Inconsolata-Bold.ttf │ │ │ ├── RobotoSlab-Regular.ttf │ │ │ ├── Inconsolata-Regular.ttf │ │ │ ├── fontawesome-webfont.eot │ │ │ ├── fontawesome-webfont.ttf │ │ │ └── fontawesome-webfont.woff │ │ ├── css │ │ │ └── badge_only.css │ │ └── js │ │ │ ├── theme.js │ │ │ └── modernizr.min.js │ ├── theme.conf │ ├── searchbox.html │ ├── versions.html │ ├── breadcrumbs.html │ ├── search.html │ ├── footer.html │ ├── layout.html │ └── layout_old.html │ ├── index.rst │ ├── intro.rst │ ├── Makefile │ ├── make.bat │ ├── install.rst │ └── conf.py ├── .gitignore ├── opennebula └── im │ └── cloudvamp-probes.d │ ├── poll.sh │ └── cloudvamp.rb ├── onegate_scripts ├── old │ ├── onegate_init.sh │ └── onegate_publisher.sh ├── onegate_init.sh └── onegate_publisher.sh ├── README.md └── LICENSE /cvem/cvem/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cvem/connectors/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cvem/connectors/one/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cvem/NOTICE: -------------------------------------------------------------------------------- 1 | CVEM - Cloud Virtual Elasticity Manager 2 | -------------------------------------------------------------------------------- /doc/source/_static/Lato-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/grycap/cloudvamp/HEAD/doc/source/_static/Lato-Bold.ttf -------------------------------------------------------------------------------- /doc/source/_static/Lato-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/grycap/cloudvamp/HEAD/doc/source/_static/Lato-Regular.ttf -------------------------------------------------------------------------------- /doc/source/_static/RobotoSlab-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/grycap/cloudvamp/HEAD/doc/source/_static/RobotoSlab-Bold.ttf -------------------------------------------------------------------------------- /doc/source/_static/Inconsolata-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/grycap/cloudvamp/HEAD/doc/source/_static/Inconsolata-Bold.ttf -------------------------------------------------------------------------------- /doc/source/_static/Inconsolata-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/grycap/cloudvamp/HEAD/doc/source/_static/Inconsolata-Regular.ttf -------------------------------------------------------------------------------- /doc/source/_static/RobotoSlab-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/grycap/cloudvamp/HEAD/doc/source/_static/RobotoSlab-Regular.ttf -------------------------------------------------------------------------------- /doc/source/_static/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/grycap/cloudvamp/HEAD/doc/source/_static/fontawesome-webfont.eot -------------------------------------------------------------------------------- /doc/source/_static/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/grycap/cloudvamp/HEAD/doc/source/_static/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /doc/source/_static/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/grycap/cloudvamp/HEAD/doc/source/_static/fontawesome-webfont.woff -------------------------------------------------------------------------------- /cvem/README: -------------------------------------------------------------------------------- 1 | ---------------------------------------- 2 | CVEM - Cloud Virtual Elasticity Manager 3 | ---------------------------------------- 4 | 5 | -------------------------------------------------------------------------------- /doc/source/sphinx_rtd_theme/static/fonts/Lato-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/grycap/cloudvamp/HEAD/doc/source/sphinx_rtd_theme/static/fonts/Lato-Bold.ttf -------------------------------------------------------------------------------- /doc/source/sphinx_rtd_theme/static/fonts/Lato-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/grycap/cloudvamp/HEAD/doc/source/sphinx_rtd_theme/static/fonts/Lato-Regular.ttf -------------------------------------------------------------------------------- /doc/source/sphinx_rtd_theme/static/fonts/RobotoSlab-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/grycap/cloudvamp/HEAD/doc/source/sphinx_rtd_theme/static/fonts/RobotoSlab-Bold.ttf -------------------------------------------------------------------------------- /doc/source/sphinx_rtd_theme/static/fonts/Inconsolata-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/grycap/cloudvamp/HEAD/doc/source/sphinx_rtd_theme/static/fonts/Inconsolata-Bold.ttf -------------------------------------------------------------------------------- /doc/source/sphinx_rtd_theme/static/fonts/RobotoSlab-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/grycap/cloudvamp/HEAD/doc/source/sphinx_rtd_theme/static/fonts/RobotoSlab-Regular.ttf -------------------------------------------------------------------------------- /doc/source/sphinx_rtd_theme/static/fonts/Inconsolata-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/grycap/cloudvamp/HEAD/doc/source/sphinx_rtd_theme/static/fonts/Inconsolata-Regular.ttf -------------------------------------------------------------------------------- /doc/source/sphinx_rtd_theme/static/fonts/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/grycap/cloudvamp/HEAD/doc/source/sphinx_rtd_theme/static/fonts/fontawesome-webfont.eot -------------------------------------------------------------------------------- /doc/source/sphinx_rtd_theme/static/fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/grycap/cloudvamp/HEAD/doc/source/sphinx_rtd_theme/static/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /doc/source/sphinx_rtd_theme/static/fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/grycap/cloudvamp/HEAD/doc/source/sphinx_rtd_theme/static/fonts/fontawesome-webfont.woff -------------------------------------------------------------------------------- /cvem/MANIFEST.in: -------------------------------------------------------------------------------- 1 | include scripts/cvem 2 | include etc/cvem.cfg 3 | include etc/one.cfg 4 | include LICENSE 5 | include INSTALL 6 | include NOTICE 7 | include changelog 8 | include logging.conf 9 | -------------------------------------------------------------------------------- /doc/source/sphinx_rtd_theme/theme.conf: -------------------------------------------------------------------------------- 1 | [theme] 2 | inherit = basic 3 | stylesheet = css/theme.css 4 | 5 | [options] 6 | typekit_id = hiw1hhg 7 | analytics_id = 8 | sticky_navigation = False 9 | logo_only = 10 | collapse_navigation = False 11 | display_version = True 12 | -------------------------------------------------------------------------------- /cvem/changelog: -------------------------------------------------------------------------------- 1 | CVEM 0.10 2 | 3 | * Initial version 4 | 5 | CVEM 0.20 6 | 7 | * Add CLUES support 8 | 9 | CVEM 0.21 10 | 11 | * Bugfix of not finding logging.conf file 12 | * Enable to specify MEM_FREE_MIN and MEM_OVER per VM 13 | * Bugfix with exponential backoff 14 | * Code refactoring -------------------------------------------------------------------------------- /doc/source/sphinx_rtd_theme/searchbox.html: -------------------------------------------------------------------------------- 1 | {%- if builder != 'singlehtml' %} 2 |
{{ _('Your search did not match any documents. Please make sure that all words are spelled correctly and that you\'ve selected enough categories.') }}
36 | {% endif %} 37 | {% endif %} 38 |{{ context|e }}
45 |asdf asdf asdf asdf 22
202 | {%- endblock %} 203 | 204 | 205 | 206 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # CloudVAMP - Cloud Virtual Machine Automatic Memory Procurement 2 | 3 | ## ABOUT 4 | 5 | ### What is CloudVAMP? 6 | 7 | CloudVAMP stands for "Cloud Virtual Machine Automatic Memory Procurement" and it is an automatic system that enables and manages memory oversubscription in a Cloud on-premises platform based in OpenNebula. 8 | 9 | ### Why CloudVAMP? 10 | 11 | Users typically deploy Virtual Machines (VMs) with more resources allocated (e.g. memory) than actually needed by the applications running in the VMs. This might happen for different reasons: i) Users are unaware of the actual requirements of applications due to a lack of profiling; ii) The applications might show dynamic memory consumption during their execution; iii) The Cloud Management Framework (e.g. OpenNebula, OpenStack) determines the amount of memory allocated for the VM out of a set of predefined templates. 12 | 13 | ### How does CloudVAMP work? 14 | 15 | CloudVAMP steals the memory that is not used in the running VMs on an OpenNebula Cloud, and makes it available for other VMs. If the memory is later needed by the original VM, it is returned to it. 16 | 17 | ### What are the technical details? 18 | 19 | If an excess of free memory for a VM is detected, CloudVAMP changes the amount of memory allocated to the VM via the underlying hypervisor (i.e. KVM) so that it fits the used memory (plus an additional margin of memory), thus considering the running applications. The host that is hosting the VM will then have an extra amount of "stolen memory" that can be used for the deployment of additional VMs on that host. Therefore, CloudVAMP introduces the ability of oversubscription for an on-premises Cloud. 20 | 21 | CloudVAMP also prevents overloading, i.e. when the sum of memory allocated to the VMs within a host is greater than the physical amount of memory available for the host. For this, if additional memory is reclaimed by a VM, CloudVAMP uses live migration of VMs across hosts in order to safely prevent overloading without VM downtime. 22 | 23 | ## Installation 24 | 25 | The current version of CloudVAMP is available for OpenNebula. It has been tested in version 4.8 but it is likely to work with newer versions. The installation consists of three steps: 26 | 27 | 1. Cloud Vertical Elasticity Manager (CVEM), installed in the OpenNebula front-end host. 28 | 2. Memory Reporter (MR), installed in the VM 29 | 3. Memory Oversubscription Granter (MOG), installed in the OpenNebula front-end host. 30 | 31 | ### Getting CloudVAMP from git 32 | 33 | #### Download CloudVAMP from git: 34 | ``` 35 | $ cd /tmp 36 | $ git clone https://github.com/grycap/cloudvamp 37 | ``` 38 | or 39 | ``` 40 | $ cd /tmp 41 | $ wget https://github.com/grycap/cloudvamp/archive/master.zip 42 | $ unzip cloudvamp-master.zip 43 | $ mv cloudvamp-master cloudvamp 44 | ``` 45 | 46 | ### Installing CVEM 47 | 48 | #### Requirements 49 | 50 | CVEM uses the library [cpyutils](https://github.com/grycap/cpyutils). Follow the instructions there to install it. 51 | 52 | #### Install in the system path 53 | 54 | Enter the CVEM directory in the downloaded files and perform the setup installation. 55 | ``` 56 | $ cd /tmp/cloudvamp/cvem 57 | $ python setup install 58 | ``` 59 | 60 | #### Install in a specific path 61 | 62 | Select a proper path where to install the CVEM service (i.e. `/usr/local/cvem`, `/opt/cvem` or other). This path will be called `CVEM_PATH`. 63 | ``` 64 | $ cp -r cd /tmp/cloudvamp/cvem /usr/local 65 | ``` 66 | 67 | Finally you must copy (or link) `$CVEM_PATH/scripts/cvem` file to `/etc/init.d` directory. 68 | ``` 69 | $ ln -s /usr/local/cvem/scripts/cvem /etc/init.d 70 | ``` 71 | 72 | #### Configuration 73 | 74 | If you want the CVEM service to be automatically started at boot time, execute the following commands: 75 | 76 | On RedHat Systems: 77 | ``` 78 | $ chkconfig cvem on 79 | ``` 80 | On Debian Systems: 81 | ``` 82 | $ update-rc.d cvem start 99 2 3 4 5 . stop 05 0 1 6 . 83 | ``` 84 | Or you can do it manually: 85 | ``` 86 | $ ln -s /etc/init.d/cvem /etc/rc2.d/S99cvem 87 | $ ln -s /etc/init.d/cvem /etc/rc3.d/S99cvem 88 | $ ln -s /etc/init.d/cvem /etc/rc5.d/S99cvem 89 | $ ln -s /etc/init.d/cvem /etc/rc1.d/K05cvem 90 | $ ln -s /etc/init.d/cvem /etc/rc6.d/K05cvem 91 | ``` 92 | Adjust the installation path by setting the DAEMON variable at `/etc/init.d/cvem` to the path where the CVEM `cvemd.py` file is installed (e.g. `/usr/local/cvem/cvemd.py`), or set the name of the script file (`cvemd.py`) if the file is in the environment variable `PATH`. 93 | 94 | Finally edit the configurations files *.cfg located in the etc/ directory where the CVEM is installed (e.g `/opt/cvem/etc`) or in the `/etc/cvem` directory: 95 | 96 | * `cvem.cfg`: CVEM configuration file. 97 | * `one.cfg`: OpenNebula specific configuration file. 98 | 99 | ### Installing the Memory Reporter (MR) 100 | 101 | The memory reporter relies on the OpenNebula contextualization scripts. Therefore, it must be installed on the Virtual Machine images used in the platform. See more information in the [OpenNebula Documentation](http://docs.opennebula.org/4.12/user/virtual_machine_setup/bcont.html). 102 | 103 | It uses the OneGate system to publish and get the monitored information so OneGate must be installed and configured, as indicated in the [OpenNebula's OneGate Documentation](http://archives.opennebula.org/documentation:rel4.4:onegate_usage). 104 | 105 | The first step is to upload the contextualization scripts (`onegate_init.sh`, `onegate_publisher.sh`) to the OpenNebula "Files & Kernels" section. If you are using OpenNebula versions 4.8 or newer the files are located in `/tmp/cloudvamp/onegate_scripts/` however if you are using versions 4.6 or older the files are located in `/tmp/cloudvamp/onegate_scripts/old` 106 | 107 | Then all the templates of the VMs must be configured to activate the OpenNebula contextualization Token, include both files, and set `onegate_init.sh` as an init script: 108 | 109 | ``` 110 | CONTEXT = [ 111 | FILES_DS = "$FILE[IMAGE_ID=