{'fraction_non_alphanumeric': 0.028860914952410194, 'fraction_numerical': 0.00276327909118821, 'mean_word_length': 5.413385826771654, 'pattern_counts': {'":': 0, '<': 0, '<?xml version=': 0, '>': 0, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
Component-Dependency based Micro-Rejuvenation Scheduling

With the growth of Internet, “always on” services are becoming increasingly important. Software rejuvenation is a well-known proactive technique to prevent failures due to software aging and extend the lifetime of longrunning software such as Internet Servers, billing systems, telecommunication switches [1]. However, doing a machine reboot to rejuvenate takes time in the order of minutes and can be expensive for large-scale Internet systems, even when clusters are employed[2]. To reduce the downtime caused by machine reboot, a fine-grained reboot technique called micro-reboot, which reboots components, was proposed in [2]. Micro-reboot has been shown to be an order of magnitude faster than machine reboot and systems can be rejuvenated by parts without ever doing a full reboot. Micro-rejuvenation [2] is a proactive technique that uses micro-reboot to prevent ageing failures. Since micro-rejuvenation involves rebooting components, it is necessary to rejuvenate a component’s transitive closure of dependents [2]. A complete rejuvenation schedule specifies the rejuvenation time instants so that the cost of rejuvenation is minimized. The complete rejuvenation can occur due to periodic or random timer trigger, transaction load trigger, or failure prediction trigger [1,3,4]. Similarly, micro-rejuvenation can occur due to all three of these triggers. However, a micro-rejuvenation schedule should specify both the rejuvenation time instants as well as the component(s) to be rejuvenated. The micro-rejuvenation schedules are less well-studied in the literature than complete rejuvenation. One approach to micro-rejuvenation scheduling proposed in [2] rejuvenates if utilization of system resources, such as memory, is above a certain threshold. The components are rejuvenated until the system resources reach a normal level. The components rejuvenated are selected in the order of amount of resources released in earlier rejuvenations. Another approach can be to adapt the complete rejuvenation schedule to micro-rejuvenation schedule. For example, if the complete-rejuvenation schedule is load-triggered, that is, the system is rejuvenated when the load is greater than a threshold; the adapted micro-rejuvenation schedule will use component load-triggered, that is, the component is rejuvenated if the component load is greater than a threshold. We refer these two approaches as simple scheduling, because both approaches take the simplified approach that all components are independent and will have the same cost in rejuvenating. Both the simple scheduling approaches are easy to implement, however, they do not take into account the dependency of the components and therefore, can yield non-optimum schedules. When a component is rejuvenated, all its dependent components are rejuvenated and therefore, any optimum schedule must take into account the fact that dependent components will be rejuvenated twice or more. In this paper, we propose a dependency-aware microrejuvenation scheduling policy that uses load-based trigger and rejuvenate independent components only. We develop a SAN model that closely reflects the real system and used it for evaluating our scheduling policy.