1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 03:07:43 +00:00
serenity/Kernel
Nico Weber 323e727a4c Kernel+LibC: Add adjtime(2)
Most systems (Linux, OpenBSD) adjust 0.5 ms per second, or 0.5 us per
1 ms tick. That is, the clock is sped up or slowed down by at most
0.05%.  This means adjusting the clock by 1 s takes 2000 s, and the
clock an be adjusted by at most 1.8 s per hour.

FreeBSD adjusts 5 ms per second if the remaining time adjustment is
>= 1 s (0.5%) , else it adjusts by 0.5 ms as well. This allows adjusting
by (almost) 18 s per hour.

Since Serenity OS can lose more than 22 s per hour (#3429), this
picks an adjustment rate up to 1% for now. This allows us to
adjust up to 36s per hour, which should be sufficient to adjust
the clock fast enough to keep up with how much time the clock
currently loses. Once we have a fancier NTP implementation that can
adjust tick rate in addition to offset, we can think about reducing
this.

adjtime is a bit old-school and most current POSIX-y OSs instead
implement adjtimex/ntp_adjtime, but a) we have to start somewhere
b) ntp_adjtime() is a fairly gnarly API. OpenBSD's adjfreq looks
like it might provide similar functionality with a nicer API. But
before worrying about all this, it's probably a good idea to get
to a place where the kernel APIs are (barely) good enough so that
we can write an ntp service, and once we have that we should write
a way to automatically evaluate how well it keeps the time adjusted,
and only then should we add improvements ot the adjustment mechanism.
2020-11-10 19:03:08 +01:00
..
ACPI Meta+Kernel: Make clang-format-10 clean 2020-09-25 21:18:17 +02:00
API Kernel+LibC: Add adjtime(2) 2020-11-10 19:03:08 +01:00
Arch Kernel: Add mechanism to queue deferred function calls 2020-11-04 21:21:37 +01:00
Devices Revert "Kernel: Implement an asynchronous device request stack" 2020-11-04 21:25:26 +01:00
FileSystem Ext2FS: Zero out inode metadata when deleting them 2020-11-07 17:48:22 +01:00
Heap Kernel: Defer kmalloc heap contraction 2020-11-04 21:21:37 +01:00
Interrupts Kernel: Don't remap IOAPIC registers every time we try to read/write 2020-11-01 10:30:20 +01:00
Modules Kernel: Module symbol declarations for type-checking 2020-08-12 20:40:59 +02:00
Net IPv4: Include IP headers when receiving from a raw socket 2020-10-31 13:56:21 +01:00
PCI Kernel: Reduce code duplication in the PCI IO access read helpers 2020-11-01 10:19:17 +01:00
Syscalls Kernel+LibC: Add adjtime(2) 2020-11-10 19:03:08 +01:00
Tasks Kernel: Make Thread refcounted 2020-09-27 19:46:04 +02:00
Time Kernel+LibC: Add adjtime(2) 2020-11-10 19:03:08 +01:00
TTY Everywhere: Fix more typos 2020-10-03 12:36:49 +02:00
VM Kernel: Flush TLB when quick-mapping PD/PT that was mapped on other CPU 2020-11-01 18:48:36 +01:00
.gitignore Meta: Removed all gitignore in the source tree only keeping the root one 2019-06-30 10:41:26 +02:00
Assertions.h Kernel: List all CPUs in /proc/cpuinfo 2020-07-01 12:07:01 +02:00
CMakeLists.txt Revert "Kernel: Implement an asynchronous device request stack" 2020-11-04 21:25:26 +01:00
CMOS.cpp Kernel: Absorb LibBareMetal back into the kernel 2020-05-16 12:00:04 +02:00
CMOS.h Meta: Add license header to source files 2020-01-18 09:45:54 +01:00
CommandLine.cpp Meta+Kernel: Make clang-format-10 clean 2020-09-25 21:18:17 +02:00
CommandLine.h Kernel: Copy command line to a safe place 2020-08-25 09:48:48 +02:00
Console.cpp Meta+Kernel: Make clang-format-10 clean 2020-09-25 21:18:17 +02:00
Console.h Kernel: Make copy_to/from_user safe and remove unnecessary checks 2020-09-13 21:19:15 +02:00
DoubleBuffer.cpp Kernel: Make copy_to/from_user safe and remove unnecessary checks 2020-09-13 21:19:15 +02:00
DoubleBuffer.h Kernel: Make copy_to/from_user safe and remove unnecessary checks 2020-09-13 21:19:15 +02:00
Forward.h Kernel: Make copy_to/from_user safe and remove unnecessary checks 2020-09-13 21:19:15 +02:00
init.cpp Kernel: Set up and calibrate APIC timer, and enable timer on all CPUs 2020-10-25 21:18:35 +01:00
IO.h Kernel: Absorb LibBareMetal back into the kernel 2020-05-16 12:00:04 +02:00
KBuffer.h Kernel: Make Inode::read_entire() return a KBuffer (not ByteBuffer) 2020-08-11 20:29:14 +02:00
KBufferBuilder.cpp AK+Kernel: Escape JSON keys & values 2020-11-02 12:56:36 +01:00
KBufferBuilder.h AK+Kernel: Escape JSON keys & values 2020-11-02 12:56:36 +01:00
kprintf.cpp Kernel: Stop supporting sprintf 2020-08-22 20:55:10 +02:00
KResult.h Meta+Kernel: Make clang-format-10 clean 2020-09-25 21:18:17 +02:00
kstdio.h Kernel: Stop supporting sprintf 2020-08-22 20:55:10 +02:00
KSyms.cpp Kernel: Make copy_to/from_user safe and remove unnecessary checks 2020-09-13 21:19:15 +02:00
KSyms.h Kernel: Update cryptically-named functions related to symbolication 2020-04-08 17:19:46 +02:00
linker.ld Kernel: Invoke heap constructors separately early on 2020-08-10 20:05:18 +02:00
Lock.cpp Meta+Kernel: Make clang-format-10 clean 2020-09-25 21:18:17 +02:00
Lock.h AK: Add ALWAYS_INLINE, NEVER_INLINE and FLATTEN macros 2020-04-30 11:43:25 +02:00
mkmap.sh Build: Switch to CMake :^) 2020-05-14 20:15:18 +02:00
Module.h Kernel: Move all code into the Kernel namespace 2020-02-16 01:27:42 +01:00
Multiboot.h Meta: Add license header to source files 2020-01-18 09:45:54 +01:00
PerformanceEventBuffer.cpp Kernel: Don't use copy_from_user() for kernelspace read in perf events 2020-08-17 09:57:18 +02:00
PerformanceEventBuffer.h Kernel: PID/TID typing 2020-08-10 11:51:45 +02:00
PhysicalAddress.h Meta+Kernel: Make clang-format-10 clean 2020-09-25 21:18:17 +02:00
Process.cpp Kernel: Fix a few deadlocks with Thread::m_lock and g_scheduler_lock 2020-10-26 08:57:25 +01:00
Process.h Kernel+LibC: Add adjtime(2) 2020-11-10 19:03:08 +01:00
ProcessGroup.cpp Kernel: Distinguish between new and old process groups with equal pgids 2020-08-19 21:21:34 +02:00
ProcessGroup.h Kernel: Distinguish between new and old process groups with equal pgids 2020-08-19 21:21:34 +02:00
Profiling.cpp AK: Rename KB, MB, GB to KiB, MiB, GiB 2020-08-16 16:33:28 +02:00
Profiling.h Kernel: More PID/TID typing 2020-08-10 11:51:45 +02:00
Ptrace.cpp Kernel: Make copy_to/from_user safe and remove unnecessary checks 2020-09-13 21:19:15 +02:00
Ptrace.h Meta+Kernel: Make clang-format-10 clean 2020-09-25 21:18:17 +02:00
Random.cpp Kernel: Switch singletons to use new Singleton class 2020-08-25 09:48:48 +02:00
Random.h Kernel: Switch singletons to use new Singleton class 2020-08-25 09:48:48 +02:00
RTC.cpp Kernel: Minor tweak to now() computation 2020-08-26 08:52:07 +02:00
RTC.h Meta: Add license header to source files 2020-01-18 09:45:54 +01:00
Scheduler.cpp Kernel: Only consider scheduler Running threads if they're the current 2020-10-26 08:57:25 +01:00
Scheduler.h Kernel: Make Thread refcounted 2020-09-27 19:46:04 +02:00
SharedBuffer.cpp Kernel: Unbreak building with extra debug macros, part 2 2020-08-30 09:43:49 +02:00
SharedBuffer.h Kernel: PID/TID typing 2020-08-10 11:51:45 +02:00
SpinLock.h Kernel: Do not wait before first attempt at locking SpinLock (#3212) 2020-08-19 11:10:53 +02:00
StdLib.cpp Kernel: Make copy_to/from_user safe and remove unnecessary checks 2020-09-13 21:19:15 +02:00
StdLib.h Kernel: Add checks for is_trivially_copyable to copy_to/from_user 2020-10-02 15:38:07 +02:00
Syscall.cpp Meta+Kernel: Make clang-format-10 clean 2020-09-25 21:18:17 +02:00
Thread.cpp Kernel: Fix a few deadlocks with Thread::m_lock and g_scheduler_lock 2020-10-26 08:57:25 +01:00
Thread.h Kernel: Fix a few deadlocks with Thread::m_lock and g_scheduler_lock 2020-10-26 08:57:25 +01:00
ThreadTracer.cpp Kernel: PID/TID typing 2020-08-10 11:51:45 +02:00
ThreadTracer.h Kernel: PID/TID typing 2020-08-10 11:51:45 +02:00
TimerQueue.cpp Kernel: Switch singletons to use new Singleton class 2020-08-25 09:48:48 +02:00
TimerQueue.h Kernel: Switch singletons to use new Singleton class 2020-08-25 09:48:48 +02:00
UnixTypes.h Kernel: Implement _SC_OPEN_MAX 2020-09-27 01:02:11 +02:00
UserOrKernelBuffer.cpp AK: Add StringBuilder::appendff using the new format. 2020-09-22 15:06:40 +02:00
UserOrKernelBuffer.h FileSystem: Use OutputMemoryStream instead of BufferStream. 2020-09-15 20:36:45 +02:00
VirtualAddress.h Meta+Kernel: Make clang-format-10 clean 2020-09-25 21:18:17 +02:00
WaitQueue.cpp Meta+Kernel: Make clang-format-10 clean 2020-09-25 21:18:17 +02:00
WaitQueue.h SinglyLinkedList: Remove unused includes 2020-10-08 09:54:41 +02:00