Question: what is the effective overhead of Windows Azure?
Problem: If memory is swapped out often, the application will come to a grinding halt. Renting a larger instance costs money. By knowing what I need, I can simply calculate what I should rent.
I've been running Azure compute roles for quite some time now. However, something that I still don't have a firm grip on is the 'overhead' that Microsoft Azure adds to the instances. Overhead is primarily 'memory' here.
More details: these are .NET role instances, 1 role per VM.
Basically what I would like to do is calculate how much memory my application uses and relate that to the instance size (e.g. if I have an application that I know to effectively use 400 MB of memory, I want to calculate if I should use a 768 MB role or a 1.3 GB role).
Reasons for this question
The reasons why I want to do this are plentyful; I can choose to optimize the memory pressure in the program if I'm just above a certain memory limit, I can choose to rent another instance if that's more cost-effective, I can decide to use more instances, etc. Without the proper information, I find it impossible to make these business cases.
Examples of information I'm looking for
Overhead comes in a variety of ways:
- Overhead of worker role VM. Cost in terms of memory / CPU?
- Enabling remote desktop / remote debugger. Cost in terms of memory / CPU?
- Overallocation of virtual machines on physical machines. E.g. if I have 14 XS instances that use 768 MB on 1 physical machine, and that physical machine has 8 GB of memory, it means 2 GB will be swapped out. How much memory (%) can I effectively count on?
- Other stuff that affects memory?
Basically I'm happy with anything that boils down to
[effective memory] = [program memory cost] * a + b; where
b can be a configuration setting, a feature or a constant.