mirror of
https://github.com/systemd/systemd.git
synced 2024-10-26 17:27:41 +03:00
core: add SoftRebootStartTimestamp
Will be useful to calculate how long it took to shut down the system before starting in the new root
This commit is contained in:
parent
375d091f71
commit
54f86b86ba
@ -340,6 +340,10 @@ node /org/freedesktop/systemd1 {
|
||||
@org.freedesktop.DBus.Property.EmitsChangedSignal("const")
|
||||
readonly t FinishTimestampMonotonic = ...;
|
||||
@org.freedesktop.DBus.Property.EmitsChangedSignal("const")
|
||||
readonly t SoftRebootStartTimestamp = ...;
|
||||
@org.freedesktop.DBus.Property.EmitsChangedSignal("const")
|
||||
readonly t SoftRebootStartTimestampMonotonic = ...;
|
||||
@org.freedesktop.DBus.Property.EmitsChangedSignal("const")
|
||||
readonly t SecurityStartTimestamp = ...;
|
||||
@org.freedesktop.DBus.Property.EmitsChangedSignal("const")
|
||||
readonly t SecurityStartTimestampMonotonic = ...;
|
||||
@ -1033,6 +1037,10 @@ node /org/freedesktop/systemd1 {
|
||||
|
||||
<variablelist class="dbus-property" generated="True" extra-ref="FinishTimestampMonotonic"/>
|
||||
|
||||
<variablelist class="dbus-property" generated="True" extra-ref="SoftRebootStartTimestamp"/>
|
||||
|
||||
<variablelist class="dbus-property" generated="True" extra-ref="SoftRebootStartTimestampMonotonic"/>
|
||||
|
||||
<variablelist class="dbus-property" generated="True" extra-ref="SecurityStartTimestamp"/>
|
||||
|
||||
<variablelist class="dbus-property" generated="True" extra-ref="SecurityStartTimestampMonotonic"/>
|
||||
@ -1733,17 +1741,19 @@ node /org/freedesktop/systemd1 {
|
||||
<varname>KernelTimestamp</varname>, <varname>KernelTimestampMonotonic</varname>,
|
||||
<varname>InitRDTimestamp</varname>, <varname>InitRDTimestampMonotonic</varname>,
|
||||
<varname>UserspaceTimestamp</varname>, <varname>UserspaceTimestampMonotonic</varname>,
|
||||
<varname>FinishTimestamp</varname>, and <varname>FinishTimestampMonotonic</varname> encode
|
||||
<constant>CLOCK_REALTIME</constant> and <constant>CLOCK_MONOTONIC</constant> microsecond timestamps
|
||||
taken when the firmware first began execution, when the boot loader first began execution, when the
|
||||
kernel first began execution, when the initrd first began execution, when the main systemd instance
|
||||
began execution and finally, when all queued startup jobs finished execution. These values are useful
|
||||
for determining boot-time performance. Note that as monotonic time begins with the kernel startup, the
|
||||
<varname>KernelTimestampMonotonic</varname> timestamp will always be 0 and
|
||||
<varname>FirmwareTimestampMonotonic</varname> and <varname>LoaderTimestampMonotonic</varname> are to
|
||||
be read as negative values. Also, not all fields are always available, depending on the used firmware,
|
||||
boot loader or initrd implementation. In these cases the respective pairs of timestamps are both 0,
|
||||
indicating that no data is available.</para>
|
||||
<varname>FinishTimestamp</varname>, <varname>FinishTimestampMonotonic</varname>,
|
||||
<varname>SoftRebootStartTimestamp</varname> and <varname>SoftRebootStartTimestampMonotonic</varname>
|
||||
encode <constant>CLOCK_REALTIME</constant> and <constant>CLOCK_MONOTONIC</constant> microsecond
|
||||
timestamps taken when the firmware first began execution, when the boot loader first began execution,
|
||||
when the kernel first began execution, when the initrd first began execution, when the main systemd
|
||||
instance began execution, when all queued startup jobs finished execution and finally, when a
|
||||
<citerefentry><refentrytitle>systemd-soft-reboot.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>
|
||||
operation first began execution. These values are useful for determining boot-time performance. Note
|
||||
that as monotonic time begins with the kernel startup, the <varname>KernelTimestampMonotonic</varname>
|
||||
timestamp will always be 0 and <varname>FirmwareTimestampMonotonic</varname> and
|
||||
<varname>LoaderTimestampMonotonic</varname> are to be read as negative values. Also, not all fields
|
||||
are always available, depending on the used firmware, boot loader or initrd implementation. In these
|
||||
cases the respective pairs of timestamps are both 0, indicating that no data is available.</para>
|
||||
|
||||
<para><varname>UnitsLoadTimestamp</varname> and <varname>UnitsLoadTimestampMonotonic</varname> encode
|
||||
<constant>CLOCK_REALTIME</constant> and <constant>CLOCK_MONOTONIC</constant> microseconds timestamps
|
||||
@ -11982,7 +11992,9 @@ $ gdbus introspect --system --dest org.freedesktop.systemd1 \
|
||||
<function>QueueSignalUnit()</function>,
|
||||
<function>SoftReboot()</function>, and
|
||||
<function>DumpUnitFileDescriptorStore()</function> were added in version 254.</para>
|
||||
<para><function>StartAuxiliaryScope()</function> was added in version 256.</para>
|
||||
<para><function>StartAuxiliaryScope()</function>,
|
||||
<varname>SoftRebootStartTimestamp</varname> and
|
||||
<varname>SoftRebootStartTimestampMonotonic</varname> were added in version 256.</para>
|
||||
</refsect2>
|
||||
<refsect2>
|
||||
<title>Unit Objects</title>
|
||||
|
@ -3042,6 +3042,7 @@ const sd_bus_vtable bus_manager_vtable[] = {
|
||||
BUS_PROPERTY_DUAL_TIMESTAMP("InitRDTimestamp", offsetof(Manager, timestamps[MANAGER_TIMESTAMP_INITRD]), SD_BUS_VTABLE_PROPERTY_CONST),
|
||||
BUS_PROPERTY_DUAL_TIMESTAMP("UserspaceTimestamp", offsetof(Manager, timestamps[MANAGER_TIMESTAMP_USERSPACE]), SD_BUS_VTABLE_PROPERTY_CONST),
|
||||
BUS_PROPERTY_DUAL_TIMESTAMP("FinishTimestamp", offsetof(Manager, timestamps[MANAGER_TIMESTAMP_FINISH]), SD_BUS_VTABLE_PROPERTY_CONST),
|
||||
BUS_PROPERTY_DUAL_TIMESTAMP("SoftRebootStartTimestamp", offsetof(Manager, timestamps[MANAGER_TIMESTAMP_SOFTREBOOT_START]), SD_BUS_VTABLE_PROPERTY_CONST),
|
||||
BUS_PROPERTY_DUAL_TIMESTAMP("SecurityStartTimestamp", offsetof(Manager, timestamps[MANAGER_TIMESTAMP_SECURITY_START]), SD_BUS_VTABLE_PROPERTY_CONST),
|
||||
BUS_PROPERTY_DUAL_TIMESTAMP("SecurityFinishTimestamp", offsetof(Manager, timestamps[MANAGER_TIMESTAMP_SECURITY_FINISH]), SD_BUS_VTABLE_PROPERTY_CONST),
|
||||
BUS_PROPERTY_DUAL_TIMESTAMP("GeneratorsStartTimestamp", offsetof(Manager, timestamps[MANAGER_TIMESTAMP_GENERATORS_START]), SD_BUS_VTABLE_PROPERTY_CONST),
|
||||
|
@ -2129,6 +2129,8 @@ static int invoke_main_loop(
|
||||
manager_send_reloading(m);
|
||||
manager_set_switching_root(m, true);
|
||||
|
||||
dual_timestamp_now(m->timestamps + MANAGER_TIMESTAMP_SOFTREBOOT_START);
|
||||
|
||||
r = prepare_reexecute(m, &arg_serialization, ret_fds, /* switching_root= */ true);
|
||||
if (r < 0) {
|
||||
*ret_error_message = "Failed to prepare for reexecution";
|
||||
|
@ -3694,7 +3694,17 @@ static void manager_notify_finished(Manager *m) {
|
||||
if (MANAGER_IS_TEST_RUN(m))
|
||||
return;
|
||||
|
||||
if (MANAGER_IS_SYSTEM(m) && detect_container() <= 0) {
|
||||
if (MANAGER_IS_SYSTEM(m) && dual_timestamp_is_set(&m->timestamps[MANAGER_TIMESTAMP_SOFTREBOOT_START])) {
|
||||
/* The soft-reboot case, where we only report data for the last reboot */
|
||||
firmware_usec = loader_usec = initrd_usec = kernel_usec = 0;
|
||||
total_usec = userspace_usec = m->timestamps[MANAGER_TIMESTAMP_FINISH].monotonic - m->timestamps[MANAGER_TIMESTAMP_SOFTREBOOT_START].monotonic;
|
||||
|
||||
log_struct(LOG_INFO,
|
||||
"MESSAGE_ID=" SD_MESSAGE_STARTUP_FINISHED_STR,
|
||||
"USERSPACE_USEC="USEC_FMT, userspace_usec,
|
||||
LOG_MESSAGE("Soft-reboot finished in %s.",
|
||||
FORMAT_TIMESPAN(total_usec, USEC_PER_MSEC)));
|
||||
} else if (MANAGER_IS_SYSTEM(m) && detect_container() <= 0) {
|
||||
char buf[FORMAT_TIMESPAN_MAX + STRLEN(" (firmware) + ") + FORMAT_TIMESPAN_MAX + STRLEN(" (loader) + ")]
|
||||
= {};
|
||||
char *p = buf;
|
||||
@ -5041,6 +5051,7 @@ static const char *const manager_timestamp_table[_MANAGER_TIMESTAMP_MAX] = {
|
||||
[MANAGER_TIMESTAMP_INITRD] = "initrd",
|
||||
[MANAGER_TIMESTAMP_USERSPACE] = "userspace",
|
||||
[MANAGER_TIMESTAMP_FINISH] = "finish",
|
||||
[MANAGER_TIMESTAMP_SOFTREBOOT_START] = "softreboot-start",
|
||||
[MANAGER_TIMESTAMP_SECURITY_START] = "security-start",
|
||||
[MANAGER_TIMESTAMP_SECURITY_FINISH] = "security-finish",
|
||||
[MANAGER_TIMESTAMP_GENERATORS_START] = "generators-start",
|
||||
|
@ -120,6 +120,9 @@ typedef enum ManagerTimestamp {
|
||||
MANAGER_TIMESTAMP_INITRD_GENERATORS_FINISH,
|
||||
MANAGER_TIMESTAMP_INITRD_UNITS_LOAD_START,
|
||||
MANAGER_TIMESTAMP_INITRD_UNITS_LOAD_FINISH,
|
||||
|
||||
MANAGER_TIMESTAMP_SOFTREBOOT_START,
|
||||
|
||||
_MANAGER_TIMESTAMP_MAX,
|
||||
_MANAGER_TIMESTAMP_INVALID = -EINVAL,
|
||||
} ManagerTimestamp;
|
||||
|
Loading…
Reference in New Issue
Block a user