mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-08-06 23:27:04 +02:00
MINOR: cpu-set: add a new function to print cpu-sets in human-friendly mode
The new function "print_cpu_set()" will print cpu sets in a human-friendly way, with commas and dashes for intervals. The goal is to keep them compact enough.
This commit is contained in:
parent
3955f151b1
commit
571573874a
@ -60,6 +60,14 @@ int ha_cpuset_size(void);
|
|||||||
*/
|
*/
|
||||||
int parse_cpu_set(const char **args, struct hap_cpuset *cpu_set, char **err);
|
int parse_cpu_set(const char **args, struct hap_cpuset *cpu_set, char **err);
|
||||||
|
|
||||||
|
/* Print a cpu-set as compactly as possible and returns the output length.
|
||||||
|
* Returns >size if it cannot emit anything due to length constraints, in which
|
||||||
|
* case it will match what is at least needed to go further, and may return 0
|
||||||
|
* for an empty set. It will emit series of comma-delimited ranges in the form
|
||||||
|
* "beg[-end]".
|
||||||
|
*/
|
||||||
|
int print_cpu_set(char *output, size_t size, const struct hap_cpuset *cpu_set);
|
||||||
|
|
||||||
/* Parse a linux cpu map string representing to a numeric cpu mask map
|
/* Parse a linux cpu map string representing to a numeric cpu mask map
|
||||||
* The cpu map string is a list of 4-byte hex strings separated by commas, with
|
* The cpu map string is a list of 4-byte hex strings separated by commas, with
|
||||||
* most-significant byte first, one bit per cpu number.
|
* most-significant byte first, one bit per cpu number.
|
||||||
|
54
src/cpuset.c
54
src/cpuset.c
@ -213,6 +213,60 @@ int parse_cpu_set(const char **args, struct hap_cpuset *cpu_set, char **err)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Print a cpu-set as compactly as possible and returns the output length.
|
||||||
|
* Returns >size if it cannot emit anything due to length constraints, in which
|
||||||
|
* case it will match what is at least needed to go further, and may return 0
|
||||||
|
* for an empty set. It will emit series of comma-delimited ranges in the form
|
||||||
|
* "beg[-end]".
|
||||||
|
*/
|
||||||
|
int print_cpu_set(char *output, size_t size, const struct hap_cpuset *cpu_set)
|
||||||
|
{
|
||||||
|
struct hap_cpuset set = *cpu_set;
|
||||||
|
int cpus = ha_cpuset_size();
|
||||||
|
int first = -1;
|
||||||
|
int len = 0;
|
||||||
|
int cpu;
|
||||||
|
|
||||||
|
for (cpu = 0; cpu < cpus; cpu++) {
|
||||||
|
if (!ha_cpuset_isset(&set, cpu))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
ha_cpuset_clr(&set, cpu);
|
||||||
|
|
||||||
|
/* check if first of a series*/
|
||||||
|
if (first < 0) {
|
||||||
|
first = cpu;
|
||||||
|
len += snprintf(output + len, size - len, "%d", cpu);
|
||||||
|
if (len >= size)
|
||||||
|
return len + 1;
|
||||||
|
|
||||||
|
/* check if belongs to a range */
|
||||||
|
if (cpu < cpus - 1 && ha_cpuset_isset(&set, cpu + 1)) {
|
||||||
|
if (len + 1 >= size)
|
||||||
|
return len + 2;
|
||||||
|
output[len++] = '-';
|
||||||
|
output[len] = 0;
|
||||||
|
} else
|
||||||
|
first = -1;
|
||||||
|
}
|
||||||
|
else if (cpu >= cpus - 1 || !ha_cpuset_isset(&set, cpu + 1)) {
|
||||||
|
/* end of a series and not first */
|
||||||
|
len += snprintf(output + len, size - len, "%d", cpu);
|
||||||
|
if (len >= size)
|
||||||
|
return len + 1;
|
||||||
|
first = -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (first < 0 && ha_cpuset_count(&set) > 0) {
|
||||||
|
if (len + 1 >= size)
|
||||||
|
return len + 2;
|
||||||
|
output[len++] = ',';
|
||||||
|
output[len] = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return len;
|
||||||
|
}
|
||||||
|
|
||||||
/* Parse a linux cpu map string representing to a numeric cpu mask map
|
/* Parse a linux cpu map string representing to a numeric cpu mask map
|
||||||
* The cpu map string is a list of 4-byte hex strings separated by commas, with
|
* The cpu map string is a list of 4-byte hex strings separated by commas, with
|
||||||
* most-significant byte first, one bit per cpu number.
|
* most-significant byte first, one bit per cpu number.
|
||||||
|
Loading…
Reference in New Issue
Block a user