|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH] libxl: support for "rtc_timeoffset" and "localtime"
On Mon, Mar 19, 2012 at 10:24 AM, Lin Ming <mlin@xxxxxxxxxxxxx> wrote:
> On Mon, Mar 19, 2012 at 10:09 AM, Teck Choon Giam
> <giamteckchoon@xxxxxxxxx> wrote:
>> On Mon, Mar 19, 2012 at 9:22 AM, Lin Ming <mlin@xxxxxxxxxxxxx> wrote:
>>> On Mon, Mar 19, 2012 at 5:57 AM, Teck Choon Giam
>>> <giamteckchoon@xxxxxxxxx> wrote:
>>>> Hi Lin Ming,
>>>
>>> Hi Teck,
>>>
>>>>
>>>> Thanks for this patch. I am actually working to backport this patch
>>>> to xen-4.1-testing for self-testing. I have a question as below about
>>>> one of your code.
>>>>
>>>> On Sun, Mar 18, 2012 at 7:50 PM, Lin Ming <mlin@xxxxxxxxxxxxx> wrote:
>>>>> Implement "rtc_timeoffset" and "localtime" options compatible as xm.
>>>>>
>>>>> rtc_timeoffset is the offset between host time and guest time.
>>>>> localtime means to specify whether the emulted RTC appears as UTC or is
>>>>> offset by the host.
>>>>>
>>>>> Signed-off-by: Lin Ming <mlin@xxxxxxxxxxxxx>
>>>>> ---
>>>>> tools/libxl/libxl_dom.c | 3 +++
>>>>> tools/libxl/libxl_types.idl | 1 +
>>>>> tools/libxl/xl_cmdimpl.c | 13 +++++++++++++
>>>>> tools/libxl/xl_sxp.c | 1 +
>>>>> 4 files changed, 18 insertions(+), 0 deletions(-)
>>>>>
>>>>> diff --git a/tools/libxl/libxl_dom.c b/tools/libxl/libxl_dom.c
>>>>> index 9b33267..0bdd654 100644
>>>>> --- a/tools/libxl/libxl_dom.c
>>>>> +++ b/tools/libxl/libxl_dom.c
>>>>> @@ -91,6 +91,9 @@ int libxl__build_pre(libxl__gc *gc, uint32_t domid,
>>>>> if (libxl_defbool_val(info->disable_migrate))
>>>>> xc_domain_disable_migrate(ctx->xch, domid);
>>>>>
>>>>> + if (info->rtc_timeoffset)
>>>>> + xc_domain_set_time_offset(ctx->xch, domid, info->rtc_timeoffset);
>>>>> +
>>>>> if (info->type == LIBXL_DOMAIN_TYPE_HVM) {
>>>>> unsigned long shadow;
>>>>> shadow = (info->shadow_memkb + 1023) / 1024;
>>>>> diff --git a/tools/libxl/libxl_types.idl b/tools/libxl/libxl_types.idl
>>>>> index 413a1a6..56f760c 100644
>>>>> --- a/tools/libxl/libxl_types.idl
>>>>> +++ b/tools/libxl/libxl_types.idl
>>>>> @@ -238,6 +238,7 @@ libxl_domain_build_info = Struct("domain_build_info",[
>>>>> ("target_memkb", MemKB),
>>>>> ("video_memkb", MemKB),
>>>>> ("shadow_memkb", MemKB),
>>>>> + ("rtc_timeoffset", uint32),
>>>>> ("disable_migrate", libxl_defbool),
>>>>> ("cpuid", libxl_cpuid_policy_list),
>>>>>
>>>>> diff --git a/tools/libxl/xl_cmdimpl.c b/tools/libxl/xl_cmdimpl.c
>>>>> index 1d59b89..b080a2b 100644
>>>>> --- a/tools/libxl/xl_cmdimpl.c
>>>>> +++ b/tools/libxl/xl_cmdimpl.c
>>>>> @@ -697,6 +697,19 @@ static void parse_config_data(const char
>>>>> *configfile_filename_report,
>>>>> }
>>>>> }
>>>>>
>>>>> + if (!xlu_cfg_get_long(config, "rtc_timeoffset", &l, 0))
>>>>> + b_info->rtc_timeoffset = l;
>>>>> +
>>>>> + if (!xlu_cfg_get_long(config, "localtime", &l, 0) && l) {
>>>>> + time_t t;
>>>>> + struct tm *tm;
>>>>> +
>>>>> + t = time(NULL);
>>>>> + tm = localtime(&t);
>>>>> +
>>>>> + b_info->rtc_timeoffset -= tm->tm_gmtoff;
>>>>
>>>> If tm->tm_gmtoff is 28800 for example (GMT +8) tested with
>>>> Asia/Singapore and Asia/Hong_Kong, then what is the
>>>> b_info->rct_timeoffset?
>>>> Is it b_info->rtc_timeoffset = b_info->rtc_timeoffset - tm->tm_gmtoff?
>>>> If this is so, then I guess it is not right. Shouldn't this be as
>>>> below instead?
>>>>
>>>> b_info->rtc_timeoffset += tm->tm_gmtoff;
>>>
>>> You are right.
>>>
>>> Python time.altzone/timezone is the offset in seconds "west" of UTC,
>>> while tm->tm_gmtoff is "east" of UTC.
>>
>> I actually tested with the following summary for my backport patch
>> based on yours except the "b_info->rtc_timeoffset += tm->tm_gmtoff;"
>> to xen-4.1-testing and things look the same.
>>
>> -----------------------------------------------------------------------------------
>> | Results | HVM domU config |
>> -----------------------------------------------------------------------------------
>> | xm | xl | localtime | rtc_timeoffset |
>> -----------------------------------------------------------------------------------
>> | same | same | Not Set | Not Set |
>> -----------------------------------------------------------------------------------
>> | same | same | Not Set | 0 |
>> -----------------------------------------------------------------------------------
>> | same | same | Not Set | 28800 |
>> -----------------------------------------------------------------------------------
>> | same | same | 0 | Not Set |
>> -----------------------------------------------------------------------------------
>> | same | same | 1 | Not Set |
>> -----------------------------------------------------------------------------------
>
> Great!
>
> "same" means xl localtime/rtc_timeoffset option works same as xm, right?
Yes, same here means the results of xm and xl are the same.
>
>>
>>>
>>> I just realized another problem: does ->tm_gmtoff already check
>>> DST(day light saving) zone?
>>
>> This will need to ask those C experts... ... my testing didn't include
>> changing DST/tm_isdst = 1 though.
>> I tried to google about it and found
>> http://unix.derkeiler.com/Newsgroups/comp.unix.programmer/2004-07/0044.html
>> might be useful?
>
> Yes.
>
> I'll set my timezone to some US timezone which actually uses day light saving,
> then check tm_gmtoff value.
Hopefully it will be like the link I posted... it gives you the
current offset but that is FreeBSD... ...
I tested in Linux and one result as below:
[x58.localdomain:/home/choon]# cp -pf /usr/share/zoneinfo/US/Eastern
/etc/localtime
cp: overwrite `/etc/localtime'? y
[x58.localdomain:/home/choon]# date
Sun Mar 18 22:45:09 EDT 2012
[x58.localdomain:/home/choon]# ./checktimeoffset
tm_isdst = 1
tm_gmtoff = -14400
So it is UTC-4 right? If so, from http://en.wikipedia.org/wiki/UTC-4
the offset does include DST?
Thanks.
Kindest regards,
Giam Teck Choon
>
> Thanks,
> Lin Ming
>
>>
>>>
>>> Will check.
>>
>> Thanks for your patch and prompt reply.
>>
>> Kindest regards,
>> Giam Teck Choon
>>
>>
>>>
>>> Thanks,
>>> Lin Ming
>>>
>>>>
>>>> In python, time.altzone and time.timezone will return the offset with
>>>> negative for Asia or non-US/most of Western Europe depending it is
>>>> time.altzone or time.timezone according to
>>>> http://docs.python.org/library/time.html... someone correct me if I am
>>>> wrong :p
>>>>
>>>> Tested with python in Scientific Linux 6:
>>>>
>>>> Python 2.6.6 (r266:84292, Jan 4 2012, 16:09:22)
>>>> [GCC 4.4.6 20110731 (Red Hat 4.4.6-3)] on linux2
>>>> Type "help", "copyright", "credits" or "license" for more information.
>>>>>>> import time
>>>>>>> print time.altzone
>>>> -28800
>>>>>>> print time.timezone
>>>> -28800
>>>>>>> print time.tzname
>>>> ('SGT', 'SGT')
>>>>
>>>>
>>>> So unless tm->tm_gmtoff return the same value including negative as
>>>> python time function, then I am totally wrong and sorry about it.
>>>>
>>>> Thanks.
>>>>
>>>> Kindest regards,
>>>> Giam Teck Choon
>>>>
>>>>
>>>>> + }
>>>>> +
>>>>> if (!xlu_cfg_get_long (config, "videoram", &l, 0))
>>>>> b_info->video_memkb = l * 1024;
>>>>>
>>>>> diff --git a/tools/libxl/xl_sxp.c b/tools/libxl/xl_sxp.c
>>>>> index c68b6df..bb1f3da 100644
>>>>> --- a/tools/libxl/xl_sxp.c
>>>>> +++ b/tools/libxl/xl_sxp.c
>>>>> @@ -92,6 +92,7 @@ void printf_info_sexp(int domid, libxl_domain_config
>>>>> *d_config)
>>>>> printf("\t\t\t(firmware %s)\n", b_info->u.hvm.firmware);
>>>>> printf("\t\t\t(video_memkb %"PRId64")\n", b_info->video_memkb);
>>>>> printf("\t\t\t(shadow_memkb %"PRId64")\n", b_info->shadow_memkb);
>>>>> + printf("\t\t\t(rtc_timeoffset %"PRId32")\n",
>>>>> b_info->rtc_timeoffset);
>>>>> printf("\t\t\t(pae %s)\n",
>>>>> libxl_defbool_to_string(b_info->u.hvm.pae));
>>>>> printf("\t\t\t(apic %s)\n",
>>>>> libxl_defbool_to_string(b_info->u.hvm.apic));
>>>>> --
>>>>> 1.7.2.5
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |