No more measure in group

This commit is contained in:
Aoran Zeng 2024-09-04 08:22:39 +08:00
parent bf92473c2b
commit a6e9d4c4d3
No known key found for this signature in database
GPG Key ID: 8F8BA8488E10ED98
2 changed files with 20 additions and 41 deletions

View File

@ -497,13 +497,12 @@ get_max_ele_idx_in_dbl_ary (double *array, int size)
/** /**
* @param size * @param sources
* @param whole_sources * @param size
* @param whole_speeds * @param[out] speed_records
* @param grp_cursor_in_whole
*/ */
void void
measure_speed_in_group (int size, SourceInfo whole_sources[], double whole_speeds[], int grp_cursor_in_whole) measure_speed_for_every_source (SourceInfo sources[], int size, double speed_records[])
{ {
bool get_measured[size]; /* 是否测速了 */ bool get_measured[size]; /* 是否测速了 */
int get_measured_n = 0; /* 测速了几个 */ int get_measured_n = 0; /* 测速了几个 */
@ -515,7 +514,7 @@ measure_speed_in_group (int size, SourceInfo whole_sources[], double whole_speed
for (int i=0; i<size; i++) for (int i=0; i<size; i++)
{ {
SourceInfo src = whole_sources[i+grp_cursor_in_whole]; SourceInfo src = sources[i];
const char *url = src.mirror->__bigfile_url; const char *url = src.mirror->__bigfile_url;
if (NULL==url) if (NULL==url)
{ {
@ -530,7 +529,7 @@ measure_speed_in_group (int size, SourceInfo whole_sources[], double whole_speed
chsrc_warn (xy_strjoin (3, msg1, src.mirror->code, msg2)); chsrc_warn (xy_strjoin (3, msg1, src.mirror->code, msg2));
speed = 0; speed = 0;
} }
whole_speeds[i+grp_cursor_in_whole] = speed; speed_records[i] = speed;
get_measured[i] = false; get_measured[i] = false;
measure_msgs[i] = NULL; measure_msgs[i] = NULL;
} }
@ -565,7 +564,7 @@ measure_speed_in_group (int size, SourceInfo whole_sources[], double whole_speed
{ {
char *curl_result = measure_speed_for_url (url_); char *curl_result = measure_speed_for_url (url_);
double speed = parse_and_say_curl_result (curl_result); double speed = parse_and_say_curl_result (curl_result);
whole_speeds[i+grp_cursor_in_whole] = speed; speed_records[i] = speed;
} }
} }
} }
@ -573,7 +572,7 @@ measure_speed_in_group (int size, SourceInfo whole_sources[], double whole_speed
if (CliOpt_Parallel) if (CliOpt_Parallel)
{ {
/* 一组汇总 */ /* 汇总 */
char **curl_results = xy_malloc0 (sizeof(char *) * size); char **curl_results = xy_malloc0 (sizeof(char *) * size);
for (int i=0; i<size; i++) for (int i=0; i<size; i++)
{ {
@ -590,7 +589,7 @@ measure_speed_in_group (int size, SourceInfo whole_sources[], double whole_speed
{ {
printf ("%s", measure_msgs[i]); printf ("%s", measure_msgs[i]);
double speed = parse_and_say_curl_result (curl_results[i]); double speed = parse_and_say_curl_result (curl_results[i]);
whole_speeds[i+grp_cursor_in_whole] = speed; speed_records[i] = speed;
} }
} }
/* 汇总结束 */ /* 汇总结束 */
@ -604,9 +603,9 @@ measure_speed_in_group (int size, SourceInfo whole_sources[], double whole_speed
* *
* @translation Done * @translation Done
*/ */
#define auto_select(s) auto_select_(s##_sources, s##_sources_n, (char*)#s+3) #define auto_select_mirror(s) select_mirror_autoly(s##_sources, s##_sources_n, (char*)#s+3)
int int
auto_select_ (SourceInfo *sources, size_t size, const char *target_name) select_mirror_autoly (SourceInfo *sources, size_t size, const char *target_name)
{ {
{ {
char *msg = NULL; char *msg = NULL;
@ -649,36 +648,16 @@ auto_select_ (SourceInfo *sources, size_t size, const char *target_name)
/* 总测速记录值 */ /* 总测速记录值 */
double speed_records[size]; double speed_records[size];
measure_speed_for_every_source (sources, size, speed_records);
// 跳过 upstream
speed_records[0] = 0.0;
int grp_cursor = 1;
if (CliOpt_Parallel)
{
// 跳过 upstream
int cpu_cores = chsrc_get_cpucore () ;
int group_size = (size-1) > cpu_cores ? cpu_cores : (size-1);
int ngroup = (size-1) / group_size;
int rest = (size-1) % group_size;
for (int i=0; i<ngroup; i++, grp_cursor+=group_size)
measure_speed_in_group (group_size, sources, speed_records, grp_cursor);
if (rest > 0)
measure_speed_in_group (rest, sources, speed_records, grp_cursor);
}
else
{
measure_speed_in_group (size-1, sources, speed_records, grp_cursor);
}
say (""); say ("");
/* DEBUG */ /* DEBUG */
// for (int i=0; i<size; i++) /*
// { for (int i=0; i<size; i++)
// printf ("speed_records[%d] = %f\n", i, speed_records[i]); {
// } printf ("speed_records[%d] = %f\n", i, speed_records[i]);
}
*/
int fast_idx = get_max_ele_idx_in_dbl_ary (speed_records, size); int fast_idx = get_max_ele_idx_in_dbl_ary (speed_records, size);
@ -705,7 +684,7 @@ auto_select_ (SourceInfo *sources, size_t size, const char *target_name)
#define use_specific_mirror_or_auto_select(input, s) \ #define use_specific_mirror_or_auto_select(input, s) \
(NULL!=(input)) ? find_mirror(s, input) : auto_select(s) (NULL!=(input)) ? find_mirror(s, input) : auto_select_mirror(s)

View File

@ -541,7 +541,7 @@ get_target (const char *input, TargetOp code, char *option)
} }
else if (TargetOp_Measure_Source==code) else if (TargetOp_Measure_Source==code)
{ {
auto_select_ (target->sources, target->sources_n, input); select_mirror_autoly (target->sources, target->sources_n, input);
return true; return true;
} }
return true; return true;