[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Minios-devel] [UNIKRAFT PATCH v4] plat/*: Make timer interrupt frequency selectable
Hi Yuri, Thanks for your review. Please see my comments inline. On 11/5/18 7:47 PM, Yuri Volchkov wrote: > Hi Florian, > > generally looks good to me, just a couple of comments inline. > > - Yuri. > > Florian Schmidt <florian.schmidt@xxxxxxxxx> writes: > >> Add new configuration options for choosing a timer interrupt frequency. >> The configured frequency is converted to the timer tick length which can >> be of use for other modules (e.g., preemptive schedulers). >> >> Previously, the tick was 100 Hz on KVM and 1000 Hz on Xen. The default >> value is now 100 Hz across both platforms. >> >> Signed-off-by: Costin Lupu <costin.lupu@xxxxxxxxx> >> Signed-off-by: Florian Schmidt <florian.schmidt@xxxxxxxxx> >> --- >> include/uk/arch/time.h | 2 ++ >> include/uk/plat/time.h | 4 ++++ >> plat/Config.uk | 7 +++++++ >> plat/kvm/x86/tscclock.c | 10 ++++------ >> plat/linuxu/include/linuxu/time.h | 3 ++- >> plat/linuxu/time.c | 2 -- >> plat/xen/x86/arch_time.c | 2 +- >> 7 files changed, 20 insertions(+), 10 deletions(-) >> >> diff --git a/include/uk/arch/time.h b/include/uk/arch/time.h >> index 262fd3b..5a5aa22 100644 >> --- a/include/uk/arch/time.h >> +++ b/include/uk/arch/time.h >> @@ -57,6 +57,8 @@ typedef __s64 __snsec; >> #define __SNSEC_MAX (__S64_MAX) >> #define __SNSEC_MIN (__S64_MIN) >> >> +#define NSEC_PER_SEC 1000000000ULL > Now, since it is in the public header, should we add a prefix to the > define to avoid possible conflicts? > I'd rather revert this change and keep it for a next patch because: - It's also defined in plat/common/arm/time.c - In deed it needs a prefix, but it shouldn't have anything to do with arch since it's just an utility definition, just like the ukarch_time_nsec_to_* macros. I'd rather move all these time related definitions into a time library. And since we have uktimeconv, I would even rename that to uktime and use it as the library for all time functions in Unikraft. @Simon, what do you think? >> + >> #define ukarch_time_nsec_to_sec(ns) ((ns) / 1000000000ULL) >> #define ukarch_time_nsec_to_msec(ns) ((ns) / 1000000ULL) >> #define ukarch_time_nsec_to_usec(ns) ((ns) / 1000UL) >> diff --git a/include/uk/plat/time.h b/include/uk/plat/time.h >> index 202e0f9..d38e3c6 100644 >> --- a/include/uk/plat/time.h >> +++ b/include/uk/plat/time.h >> @@ -47,6 +47,10 @@ void ukplat_time_fini(void); >> >> __nsec ukplat_monotonic_clock(void); >> >> +/* Time tick length */ >> +#define UKPLAT_TIME_TICK_NSEC (NSEC_PER_SEC / CONFIG_HZ) >> +#define UKPLAT_TIME_TICK_MSEC >> ukarch_time_nsec_to_msec(UKPLAT_TIME_TICK_NSEC) >> + >> #ifdef __cplusplus >> } >> #endif >> diff --git a/plat/Config.uk b/plat/Config.uk >> index b776c45..ae96487 100644 >> --- a/plat/Config.uk >> +++ b/plat/Config.uk >> @@ -17,3 +17,10 @@ config EARLY_PRINT_PL011_UART_ADDR >> Pl011 serial address used by early debug console. >> >> endmenu >> + >> +config HZ >> + int >> + prompt "Timer frequency (Hz)" >> + default 100 >> + help >> + Configure the timer interrupt frequency. > I would to the help message "change only if you are sure you know what > you are doing" > I totally agree. >> diff --git a/plat/kvm/x86/tscclock.c b/plat/kvm/x86/tscclock.c >> index f3fa55a..d3cdb16 100644 >> --- a/plat/kvm/x86/tscclock.c >> +++ b/plat/kvm/x86/tscclock.c >> @@ -60,8 +60,6 @@ >> #include <uk/assert.h> >> #include <uk/bitops.h> >> >> -#define NSEC_PER_SEC 1000000000ULL >> - >> #define TIMER_CNTR 0x40 >> #define TIMER_MODE 0x43 >> #define TIMER_SEL0 0x00 >> @@ -131,7 +129,7 @@ static void i8254_delay(unsigned int n) >> { >> unsigned int cur_tick, initial_tick; >> int remaining; >> - const unsigned long timer_rval = TIMER_HZ / 100; >> + const unsigned long timer_rval = TIMER_HZ / CONFIG_HZ; > I guess at least we need to check if TIMER_HZ / CONFIG_HZ >= 1 at > compile time. > This makes sense. >> >> initial_tick = i8254_gettick(); >> >> @@ -211,10 +209,10 @@ int tscclock_init(void) >> { >> __u64 tsc_freq, rtc_boot; >> >> - /* Initialise i8254 timer channel 0 to mode 2 at 100 Hz */ >> + /* Initialise i8254 timer channel 0 to mode 2 at CONFIG_HZ frequency */ >> outb(TIMER_MODE, TIMER_SEL0 | TIMER_RATEGEN | TIMER_16BIT); >> - outb(TIMER_CNTR, (TIMER_HZ / 100) & 0xff); >> - outb(TIMER_CNTR, (TIMER_HZ / 100) >> 8); >> + outb(TIMER_CNTR, (TIMER_HZ / CONFIG_HZ) & 0xff); >> + outb(TIMER_CNTR, (TIMER_HZ / CONFIG_HZ) >> 8); >> >> /* >> * Read RTC "time at boot". This must be done just before tsc_base is >> diff --git a/plat/linuxu/include/linuxu/time.h >> b/plat/linuxu/include/linuxu/time.h >> index 2df881e..c1a875a 100644 >> --- a/plat/linuxu/include/linuxu/time.h >> +++ b/plat/linuxu/include/linuxu/time.h >> @@ -35,9 +35,10 @@ >> #ifndef __LINUXU_TIME_H__ >> #define __LINUXU_TIME_H__ >> >> +#include <uk/plat/time.h> >> #include <linuxu/signal.h> >> >> -#define TIMER_INTVAL_MSEC 10 >> +#define TIMER_INTVAL_NSEC UKPLAT_TIME_TICK_NSEC >> #define TIMER_SIGNUM SIGALRM >> >> >> diff --git a/plat/linuxu/time.c b/plat/linuxu/time.c >> index ead07f5..13439ad 100644 >> --- a/plat/linuxu/time.c >> +++ b/plat/linuxu/time.c >> @@ -40,8 +40,6 @@ >> #include <linuxu/syscall.h> >> #include <linuxu/time.h> >> >> -#define TIMER_INTVAL_NSEC ukarch_time_msec_to_nsec(TIMER_INTVAL_MSEC) >> - >> static k_timer_t timerid; >> >> >> diff --git a/plat/xen/x86/arch_time.c b/plat/xen/x86/arch_time.c >> index 95d7b10..a4b77b9 100644 >> --- a/plat/xen/x86/arch_time.c >> +++ b/plat/xen/x86/arch_time.c >> @@ -233,7 +233,7 @@ void time_block_until(__snsec until) >> static void timer_handler(evtchn_port_t ev __unused, >> struct __regs *regs __unused, void *ign __unused) >> { >> - __nsec until = ukplat_monotonic_clock() + ukarch_time_msec_to_nsec(1); >> + __nsec until = ukplat_monotonic_clock() + UKPLAT_TIME_TICK_NSEC; >> >> HYPERVISOR_set_timer_op(until); >> } >> -- >> 2.19.1 >> >> >> _______________________________________________ >> Minios-devel mailing list >> Minios-devel@xxxxxxxxxxxxxxxxxxxx >> https://lists.xenproject.org/mailman/listinfo/minios-devel > _______________________________________________ Minios-devel mailing list Minios-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/minios-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |