mirror of https://github.com/tongzx/nt5src
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
255 lines
5.7 KiB
255 lines
5.7 KiB
/*++
|
|
|
|
Copyright (c) 1998 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
partctrl.h
|
|
|
|
Abstract:
|
|
|
|
SIS Groveler partition controller headers
|
|
|
|
Authors:
|
|
|
|
John Douceur, 1998
|
|
|
|
Environment:
|
|
|
|
User Mode
|
|
|
|
|
|
Revision History:
|
|
|
|
|
|
--*/
|
|
|
|
#ifndef _INC_PARTCTRL
|
|
|
|
#define _INC_PARTCTRL
|
|
|
|
class PartitionController
|
|
{
|
|
public:
|
|
|
|
PartitionController(
|
|
Groveler *groveler,
|
|
GrovelStatus groveler_status,
|
|
int target_entries_per_extraction,
|
|
int max_extraction_interval,
|
|
int base_grovel_interval,
|
|
int max_grovel_interval,
|
|
int low_confidence_grovel_interval,
|
|
int low_disk_space_grovel_interval,
|
|
int partition_info_update_interval,
|
|
int base_restart_extraction_interval,
|
|
int max_restart_extraction_interval,
|
|
int base_restart_groveling_interval,
|
|
int max_restart_groveling_interval,
|
|
int base_regrovel_interval,
|
|
int max_regrovel_interval,
|
|
int volscan_regrovel_threshold,
|
|
int partition_balance_time_constant,
|
|
int read_time_increase_history_size,
|
|
int read_time_decrease_history_size,
|
|
int file_size_history_size,
|
|
bool error_retry_log_extraction,
|
|
bool error_retry_groveling,
|
|
__int64 base_usn_log_size,
|
|
__int64 max_usn_log_size,
|
|
int sample_group_size,
|
|
double acceptance_p_value,
|
|
double rejection_p_value,
|
|
double base_use_multiplier,
|
|
double max_use_multiplier,
|
|
double peak_finder_accuracy,
|
|
double peak_finder_range,
|
|
double base_cpu_load_threshold,
|
|
double max_cpu_load_threshold,
|
|
double *hash_match_ratio,
|
|
double *compare_match_ratio,
|
|
double *dequeue_hash_ratio,
|
|
double *hash_read_time_estimate,
|
|
double *compare_read_time_estimate,
|
|
double *mean_file_size,
|
|
double *read_time_confidence,
|
|
int *volume_serial_number,
|
|
int partition_index,
|
|
double read_report_discard_threshold,
|
|
int min_file_size,
|
|
int min_file_age,
|
|
bool allow_compressed_files,
|
|
bool allow_encrypted_files,
|
|
bool allow_hidden_files,
|
|
bool allow_offline_files,
|
|
bool allow_temporary_files,
|
|
int num_excluded_paths,
|
|
const _TCHAR **excluded_paths);
|
|
|
|
~PartitionController();
|
|
|
|
bool control_operation(
|
|
DWORD grovel_duration,
|
|
DWORD *count_of_files_hashed,
|
|
DWORDLONG *bytes_of_files_hashed,
|
|
DWORD *count_of_files_matching,
|
|
DWORDLONG *bytes_of_files_matching,
|
|
DWORD *count_of_files_compared,
|
|
DWORDLONG *bytes_of_files_compared,
|
|
DWORD *count_of_files_merged,
|
|
DWORDLONG *bytes_of_files_merged,
|
|
DWORD *count_of_files_enqueued,
|
|
DWORD *count_of_files_dequeued,
|
|
double cpu_load);
|
|
|
|
void advance(
|
|
int time_delta);
|
|
|
|
double priority() const;
|
|
|
|
int wait() const;
|
|
|
|
void demarcate_foreground_batch();
|
|
|
|
void command_full_volume_scan();
|
|
|
|
private:
|
|
|
|
enum ReadType
|
|
{
|
|
RT_hash,
|
|
RT_compare
|
|
};
|
|
|
|
static void control_extraction(
|
|
void *context);
|
|
|
|
static void restart_extraction(
|
|
void *context);
|
|
|
|
static void restart_groveling(
|
|
void *context);
|
|
|
|
static void update_partition_info(
|
|
void *context);
|
|
|
|
void initialize_groveling(
|
|
GrovelStatus groveler_status);
|
|
|
|
bool control_groveling(
|
|
DWORD grovel_duration,
|
|
DWORD *count_of_files_hashed,
|
|
DWORDLONG *bytes_of_files_hashed,
|
|
DWORD *count_of_files_matching,
|
|
DWORDLONG *bytes_of_files_matching,
|
|
DWORD *count_of_files_compared,
|
|
DWORDLONG *bytes_of_files_compared,
|
|
DWORD *count_of_files_merged,
|
|
DWORDLONG *bytes_of_files_merged,
|
|
DWORD *count_of_files_enqueued,
|
|
DWORD *count_of_files_dequeued,
|
|
double cpu_load);
|
|
|
|
bool control_volume_scan(
|
|
int scan_duration,
|
|
DWORD *count_of_files_enqueued);
|
|
|
|
void update_peak_finder(
|
|
ReadType read_type,
|
|
DWORD read_time,
|
|
DWORD read_ops);
|
|
|
|
void calculate_effective_max_grovel_interval();
|
|
|
|
Groveler *groveler;
|
|
int partition_index;
|
|
|
|
IncidentFilter file_size_filter;
|
|
ConfidenceEstimator read_time_confidence_estimator;
|
|
DecayingAccumulator partition_grovel_accumulator;
|
|
|
|
MeanComparator read_mean_comparator;
|
|
PeakFinder *read_peak_finder[2];
|
|
DirectedIncidentFilter *read_time_filter[2];
|
|
double *read_time_estimate[2];
|
|
|
|
bool initiate_full_volume_scan;
|
|
bool performing_full_volume_scan;
|
|
int target_entries_per_extraction;
|
|
int max_extraction_interval;
|
|
int extraction_interval;
|
|
|
|
__int64 base_usn_log_size;
|
|
__int64 max_usn_log_size;
|
|
__int64 current_usn_log_size;
|
|
|
|
int max_grovel_interval;
|
|
int base_grovel_interval;
|
|
int effective_max_grovel_interval;
|
|
int grovel_interval;
|
|
int remaining_grovel_interval;
|
|
|
|
bool ok_to_record_measurement;
|
|
int next_untrusted_measurement_time;
|
|
int untrusted_measurement_interval;
|
|
|
|
double log_max_grovel_interval;
|
|
double log_low_confidence_slope;
|
|
double low_disk_space_slope;
|
|
|
|
double base_use_multiplier;
|
|
double use_multiplier_slope;
|
|
|
|
double base_cpu_load_threshold;
|
|
double cpu_load_threshold_slope;
|
|
|
|
bool error_retry_log_extraction;
|
|
bool error_retry_groveling;
|
|
bool restart_extraction_required;
|
|
|
|
int base_restart_extraction_interval;
|
|
int max_restart_extraction_interval;
|
|
int base_restart_groveling_interval;
|
|
int max_restart_groveling_interval;
|
|
|
|
int restart_extraction_interval;
|
|
int remaining_restart_extraction_interval;
|
|
int restart_groveling_interval;
|
|
|
|
double peak_finder_accuracy;
|
|
|
|
int volscan_regrovel_threshold;
|
|
int partition_info_update_interval;
|
|
|
|
bool restart_volume_scan;
|
|
bool first_extraction;
|
|
bool log_extractor_dead;
|
|
bool groveler_dead;
|
|
bool extended_restart_in_progress;
|
|
|
|
double volume_total_bytes;
|
|
double volume_free_bytes;
|
|
double *hash_match_ratio;
|
|
double *compare_match_ratio;
|
|
double *dequeue_hash_ratio;
|
|
|
|
double *mean_file_size;
|
|
double *read_time_confidence;
|
|
double free_space_ratio;
|
|
int *volume_serial_number;
|
|
|
|
int base_regrovel_interval;
|
|
int max_regrovel_interval;
|
|
double read_report_discard_threshold;
|
|
int min_file_size;
|
|
int min_file_age;
|
|
bool allow_compressed_files;
|
|
bool allow_encrypted_files;
|
|
bool allow_hidden_files;
|
|
bool allow_offline_files;
|
|
bool allow_temporary_files;
|
|
int num_excluded_paths;
|
|
const _TCHAR **excluded_paths;
|
|
};
|
|
|
|
#endif /* _INC_PARTCTRL */
|