I would like to have coded a Windows service which dynamically manages the level of processor utilization allocated to each user.
The Windows service would be automatically launched on startup. It would read some configuration data from the Windows registry and would start its work according to three different algorithms:
**- Maximum CPU per application:** (for instance, 80%)This means that if one application is executed, it won’t be able to use more than 80% of the CPU. If several instances of the same application are started, the sum of their CPU utilization should also be under the application limit.
**- User group management:** Three static user groups are defined: system, admits and users. For these three groups, another perceptual value will be assigned in the registry, for instance:
- System: 50%
- Admits: 25%
- Users: 25%
This means that if there are system processes running, they will have up to the 50% of the CPU. In such a scenario, user processes will be limited to 25%, but if no admin processes or system processes are reaching their CPU limit, user processes will be able to use more than their assigned percentage.
The service has to monitor dynamically the system to manage user logons and logoffs (in a event based way).
**- Application clamping:** The previous two algorithms must be applied automatically by the service. After that, using some polling mechanism, the service should detect CPU utilization above an overall limit, let’s say, 90%.
In such an scenario, every process in the system using more than, for instance, 10% (another constant defined in the windows registry) must be automatically clamped (let’s say, 5%) to force CPU utilization to be again under the overall limit.
This process should be done and undone dynamically.
1) Complete and fully-functional working program(s) in executable form as well as complete source code of all work done. 2) Installation package that will install the software (in ready-to-run condition) on the platform(s) specified in this bid request. 3) Complete ownership and distribution copyrights to all work purchased.
4) The application should be deployed using Visual C++ 2003 (or Visual Basic 2003). Any library used has to be freely redistributable even for commercial purposes.
5) A detailed proposal of how to implement every algorithm must be included in the bid. Some kind of prototype would be appreciated.
6) Object oriented coding style is mandatory. Documentation using OOP tools and diagrams would be appreciated.
7) Any improvement or suggestion is welcome. For further explanations please contact via email.
8) No GUI interface is needed.
9) It might be assumed that the configuration data will be stored in the windows registry using another tool. The application might assume that HKLM/Software/MyCompany/CPUManager already includes every data needed. However, the service has to check the correctness of such data.
10) Every taken action should be logged in the application event log, for instance:
- Application X has been limited to 80% CPU
- Users have been limited to 25% CPU because of a system process need
- CPU Limit for users has been removed
- Word, Excel and SAP GUI have been clamped to be under 90% CPU
This bid will be the basis for a new bid, which would be directly assigned to the coder of this one.
It must support windows 2000 and windows 2003 multi-user environments. NT 4 is not mandatory but appreciated.
It must support terminal services environments.
It must support multiprocessor environments.