Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F147588574
D53633.id166015.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
2 KB
Referenced Files
None
Subscribers
None
D53633.id166015.diff
View Options
diff --git a/sys/dev/acpica/acpi_cpu.c b/sys/dev/acpica/acpi_cpu.c
--- a/sys/dev/acpica/acpi_cpu.c
+++ b/sys/dev/acpica/acpi_cpu.c
@@ -92,6 +92,7 @@
int cpu_non_c2; /* Index of lowest non-C2 state. */
int cpu_non_c3; /* Index of lowest non-C3 state. */
u_int cpu_cx_stats[MAX_CX_STATES];/* Cx usage history. */
+ uint64_t cpu_cx_duration[MAX_CX_STATES];/* Cx cumulative sleep */
/* Values for sysctl. */
struct sysctl_ctx_list cpu_sysctl_ctx;
struct sysctl_oid *cpu_sysctl_tree;
@@ -185,6 +186,7 @@
static void acpi_cpu_quirks_piix4(void);
static int acpi_cpu_usage_sysctl(SYSCTL_HANDLER_ARGS);
static int acpi_cpu_usage_counters_sysctl(SYSCTL_HANDLER_ARGS);
+static int acpi_cpu_duration_counters_sysctl(SYSCTL_HANDLER_ARGS);
static int acpi_cpu_set_cx_lowest(struct acpi_cpu_softc *sc);
static int acpi_cpu_cx_lowest_sysctl(SYSCTL_HANDLER_ARGS);
static int acpi_cpu_global_cx_lowest_sysctl(SYSCTL_HANDLER_ARGS);
@@ -1055,6 +1057,12 @@
"cx_usage_counters", CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_MPSAFE,
(void *)sc, 0, acpi_cpu_usage_counters_sysctl, "A",
"Cx sleep state counters");
+ SYSCTL_ADD_PROC(&sc->cpu_sysctl_ctx,
+ SYSCTL_CHILDREN(device_get_sysctl_tree(sc->cpu_dev)), OID_AUTO,
+ "cx_duration_counters", CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_MPSAFE,
+ (void *)sc, 0, acpi_cpu_duration_counters_sysctl, "A",
+ "Cx sleep duration cumulative time");
+
#if defined(__i386__) || defined(__amd64__)
SYSCTL_ADD_PROC(&sc->cpu_sysctl_ctx,
SYSCTL_CHILDREN(device_get_sysctl_tree(sc->cpu_dev)), OID_AUTO,
@@ -1168,6 +1176,7 @@
if (!cx_next->do_mwait && curthread->td_critnest == 0)
end_time = min(end_time, 500000 / hz);
sc->cpu_prev_sleep = (sc->cpu_prev_sleep * 3 + end_time) / 4;
+ sc->cpu_cx_duration[cx_next_idx] += end_time;
return;
}
@@ -1224,6 +1233,7 @@
else
end_time = ((end_ticks - start_ticks) << 20) / cpu_tickrate();
sc->cpu_prev_sleep = (sc->cpu_prev_sleep * 3 + end_time) / 4;
+ sc->cpu_cx_duration[cx_next_idx] += end_time;
}
#endif
@@ -1408,6 +1418,26 @@
return (error);
}
+static int
+acpi_cpu_duration_counters_sysctl(SYSCTL_HANDLER_ARGS)
+{
+ struct acpi_cpu_softc *sc = (struct acpi_cpu_softc *)arg1;
+ struct sbuf sb;
+ char buf[128];
+ int error, i;
+
+ sbuf_new_for_sysctl(&sb, buf, sizeof(buf), req);
+ for (i = 0; i < sc->cpu_cx_count; i++) {
+ if (i > 0)
+ sbuf_putc(&sb, ' ');
+ sbuf_printf(&sb, "%ju", (uintmax_t) sc->cpu_cx_duration[i]);
+ }
+ error = sbuf_finish(&sb);
+ sbuf_delete(&sb);
+ return (error);
+}
+
+
#if defined(__i386__) || defined(__amd64__)
static int
acpi_cpu_method_sysctl(SYSCTL_HANDLER_ARGS)
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Fri, Mar 13, 3:46 AM (2 h, 35 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
29607484
Default Alt Text
D53633.id166015.diff (2 KB)
Attached To
Mode
D53633: acpi: add counters for cumulative time spent in each sleep state.
Attached
Detach File
Event Timeline
Log In to Comment