扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
Can use ntpdate or rdate command to sync the datetime with remote server.
创新互联公司:自2013年创立以来为各行业开拓出企业自己的“网站建设”服务,为上千公司企业提供了专业的成都网站建设、网站制作、网页设计和网站推广服务, 按需策划设计由设计师亲自精心设计,设计的效果完全按照客户的要求,并适当的提出合理的建议,拥有的视觉效果,策划师分析客户的同行竞争对手,根据客户的实际情况给出合理的网站构架,制作客户同行业具有领先地位的。
i.e.:
# ntpdate remote_server
or
# rdate -s remote_server
Also, sync the remote server periodically is a good idea!
# crontab -e
# auto sync with time server at 0:00 everyday
0 0 * * * rdate -t 60 -s stdtime.gov.hk记住,更新完后要用 clock -w 或 hwclock -w 实时间写入到BIOS中,这样下次启动机子时,时间就会自动更新了。 1.在虚拟终端中使用date命令来查看和设置系统时间查看系统时钟的操作:# date设置系统时钟的操作:# date 091713272003.30通用的设置格式:# date 月日时分年.秒2.使用hwclock或clock命令查看和设置硬件时钟查看硬件时钟的操作:# hwclock --show 或# clock --show2003年09月17日 星期三 13时24分11秒 -0.482735 seconds设置硬件时钟的操作:# hwclock --set --date="09/17/2003 13:26:00"或者# clock --set --date="09/17/2003 13:26:00"通用的设置格式:hwclock/clock --set --date=“月/日/年 时:分:秒”。3.同步系统时钟和硬件时钟Linux系统(笔者使用的是Red Hat 8.0,其它系统没有做过实验)默认重启后,硬件时钟和系统时钟同步。如果不大方便重新启动的话(服务器通常很少重启),使用clock或hwclock命令来同步系统时钟和硬件时钟。硬件时钟与系统时钟同步:# hwclock --hctosys或者# clock --hctosys上面命令中,--hctosys表示Hardware Clock to SYStem clock。系统时钟和硬件时钟同步:# hwclock --systohc或者# clock --systohc使用图形化系统设置工具设置时间对于初学者来,笔者推荐使用图形化的时钟设置工具,如Red Hat 8.0中的日期与时间设置工具,可以在虚拟终端中键“redhat-config-time”命令,或者选择“K选单/系统设置/日期与时间”来启动日期时间设置工具。使用该工具不必考虑系统时间和硬件时间,只需从该对话框中设置日期时间,可同时设置、修改系统时钟和硬件时钟。
关于linux的Jiffies/Tick/HZlinux核心几个重要跟时间有关的几个名词: HZ、tick、jiffies。1.linux HZlinux核心每隔固定周期会发出timer interrupt (IRQ 0),HZ是用来定义每一秒有几次timer interrupts。举例来说,HZ为1000,代表每秒有1000次timer interrupts,比较常见的设置是HZ=100。可以通过 cat /proc/interrupt 查看timer中断次数,并于一秒后再次观察其值,通过前后差值可以估算HZ的值。要检查内核源码中HZ的值是什么,可以执行命令:#cat kernel/.config grep 'CONFIG_HZ='还可以直接更改文件param.h2.TickTick是HZ的倒数,意即timer interrupt每发生一次中断的时间。如HZ为250时,tick为4毫秒(millisecond)。3.JiffiesJiffies为linux核心变数(32位元变数,unsigned long),它被用来纪录系统自开机以来,已经过多少的tick。每发生一次timer interrupt,Jiffies变数会被加一。在ARM体系结构中,jiffies被初始化为jiffies_64,而jiffies_64是一个u64位元变数,在kernel/timer.c中定义:u64 jiffies_64 __cacheline_aligned_in_smp = INITIAL_JIFFIES;即jiffies在系统开机时,并非初始化成零,而是被设为INITAL_JIFFIES(在文件include/linux/jiffies.h中定义为-300*HZ),即代表系统于开机五分钟后,jiffies便会溢位。那溢位怎么办?事实上,linux核心定义几个macro(timer_after、time_after_eq、time_before与time_before_eq),即便是溢位,也能藉由这几个macro正确地取得jiffies的内容。
如果是获取 cpu 时钟 的 tick:
clock_t tick1,tick2;
tick1=clock(); // 开机到执行这句时的毫秒数 ms
等待一会
tick2=clock(); // 开机到执行这句时的毫秒数 ms
dt = (double) (tick2 - tick1); // 或得时间差。
===============
如果是 获取 CPU cycle count
#include stdint.h
// Windows
#ifdef _WIN32
#include intrin.h
uint64_t rdtsc(){
return __rdtsc();
}
// Linux/GCC
#else
uint64_t rdtsc(){
unsigned int lo,hi;
__asm__ __volatile__ ("rdtsc" : "=a" (lo), "=d" (hi));
return ((uint64_t)hi 32) | lo;
}
#endif
===================
获取高精度时间(MS VC++ 6.0编译器):
// Pentium instruction "Read Time Stamp Counter".
__forceinline unsigned _int64 My_clock(void)
{
_asm _emit 0x0F
_asm _emit 0x31
}
unsigned _int64 Start(void) { return My_clock();}
unsigned _int64 Stop(unsigned _int64 m_start, unsigned _int64 m_overhead)
{return My_clock()-m_start - m_overhead; }
==========
获取cpu 速度(MS VC++ 6.0编译器):
void get_CPU_speed()
{
unsigned _int64 m_start=0, m_overhead=0;
unsigned int CPUSpeedMHz;
m_start = My_clock();
m_overhead = My_clock() - m_start - m_overhead;
printf("overhead for calling My_clock=%I64d\n", m_overhead);
m_start = My_clock();
wait_ms(2000);
CPUSpeedMHz=(unsigned int) ( (My_clock()- m_start - m_overhead) / );
printf("CPU_Speed_MHz: %u\n",CPUSpeedMHz);
}
有几个概率需要了解
1.时间周期(Clock Cycle)的频率:晶体振荡器在1秒以内时钟周期的个数=1秒以内时钟脉冲的个数,Linux里面用
#define CLOCK_TICK_RATE 1193180 /* Underlying HZ */
单位为HZ
2.时钟滴答(Clock Tick):
当PIT通道0的计数器减到0值时,它就在IRQ0上产生一次时钟中断,也即一次时钟滴答。PIT通道0的计数器的初始值决定了要过多少时钟周期才产生一次时钟中断。
3.时钟滴答的频率(HZ):1秒以内产生时间滴答个数
HZ在arm和i386上定义为100,ALPHA和IA62为1024 ,IBM Power PC为1000
i386 1个时钟滴答时间为1000ms/100=10ms。
4.时钟滴答的时间间隔(tick)
long tick = (1000000 + HZ/2) / HZ; /* timer interrupt period */ 单位为us ,tick=10ms,也可以通过HZ来计算
linux中#define TICK_SIZE= tick
1s=1,000,000us
(5)宏LATCH:Linux用宏LATCH来定义要写到PIT通道0的计数器中的值,它表示PIT将没隔多少个时钟周期产生一次时钟中断。
LATCH=(1秒之内的时钟周期个数)÷(1秒之内的时钟中断次数)=(CLOCK_TICK_RATE)÷(HZ)
Linux为取整 #define LATCH=(CLOCK_TICK_RATE + HZ/2) / HZ。
时钟周期理解:时钟脉冲,电平从0到1(或者相反)。
CLOCK_TICK_RATE和HZ都是 频率 :1秒以内时钟周期 频率 ,1秒以内时钟滴答 频率 。
TSC使用CPU频率,在现代计算机中CPU可能降频也可能超率,TSC时钟不准确。
顺序为HPET APCI PMTPICTSC
local cpu APIC只在单CPU场景上使用,如进程调度时间.
参考:
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流