当前位置: 互联网>综合
本页文章导读:
▪[Oracle] RAC 之 - 负载均衡 负载均衡是指把负载平均分配到集群中的各个节点,从而提高整体性能。Oracle RAC提供两种方式实现负载均衡,第一种是纯技术手段,即在用户连接时,根据系统当前的负载情况决定由哪个节.........
▪contiki学习笔记 clock部分 1.前言
contiki是一款小型开源,易于移植的多任务操作系统,专门为无线传感网设计,适合内存受限制的网络系统。国内的研究和应用还处于初级阶段,甚至还不知道这个contiki如何.........
▪wordpress setup_postdata 后 get_post() 失效的问题。 setup_postdata($post) 的作用把某个 post 声明成全局的 post, 这样可以方便的用 get_permalink() 等模板函数,在我做的项目中,发现这个函数不起作用:setup_postdata($item);
var_dump(get_the_ID());// 这里是n.........
[1][Oracle] RAC 之 - 负载均衡
来源: 互联网 发布时间: 2013-10-25
负载均衡是指把负载平均分配到集群中的各个节点,从而提高整体性能。Oracle RAC提供两种方式实现负载均衡,第一种是纯技术手段,即在用户连接时,根据系统当前的负载情况决定由哪个节点处理用户请求;第二种是面向业务,人为的把应用切分成很多service,通过某个service过来的连接请求都由某个节点处理。下面来具体看看这两种手段:
1. 客户端负载均衡
配置方法是在客户端tnsnames.ora文件中设置LOAD_BALANCE=YES,当客户端发起连接时,会从地址列表中随机选取一个,把连接请求随机分散给各个实例。
这个技术的最大缺点在于不能根据各个实例的真实负载情况来分散请求,太过粗糙,因此很少使用。
2. 服务器端负载均衡
服务器端负载均衡依赖于Listener收集的负载信息,在数据库运行过程中,pmon进程会收集系统的负载信息,定期更新至Listener中。如果你配置了Remote_listener参数,pmon进程不但能把负载信息注册到本地Listener,也可以注册到其它实例的Listener。这样有了pmon自动注册机制后,集群的每个节点的Listener都掌握了所有节点的负载信息,当收到客户端请求时,会把连接分配给负载最小的实例。
上面介绍了纯技术手段进行的负载均衡,看起来很美好,但在实际使用中,可能会带来非常大的性能问题。大家都知道,RAC由于其share-disk的架构,它的性能很大程度上依赖于内存融合(Cache Fusion),纯技术手段无法知道业务的具体情况,因此它可能把同一个业务的连接分散到各个实例中,导致大量的内存融合,性能急剧下降。
如果我们换一种思路,把同一种应用程序的连接分到同一个实例上,比如A应用程序的连接都连在A实例,B应用程序的连接都连在B实例上,这样就能够有效地减少内存融合。
对应用的划分可以通过service实现,这需要DBA和开放人员合作,在了解业务特点的情况下配置service
作者:u010415792 发表于2013-6-14 14:57:48 原文链接
阅读:77 评论:0 查看评论
[2]contiki学习笔记 clock部分
来源: 互联网 发布时间: 2013-10-25
1.前言
3.2 clock_timer()函数
3.3睡眠定时器中断
3.4辅助部分clock_delay()和clock_seconds()
contiki是一款小型开源,易于移植的多任务操作系统,专门为无线传感网设计,适合内存受限制的网络系统。国内的研究和应用还处于初级阶段,甚至还不知道这个contiki如何发音,也没有那么响亮的中文名称。如果还没有中文名称的话,就干脆叫它“康提基”(来自wifi百科)。
本文先详细描述clock部分,clock部分是contiki运行的基础,和任务调度、网络协议都有关系。从clock部分的分析也可获得移植contiki的一般方法。
平台说明
硬件平台:CC2530
软件平台:IAR EW8051
2.相关文件
contiki的组织结构应该是清晰的,但是由于开发者众多便出现了若干矛盾的地方。最严重的便是同名文件,出现最多的地方便是 contiki/cpu/中的某个CPU文件夹和contiki/platform/某个平台文件夹。其实两个文件夹中的文件放在任何一个文件夹中都可以,也可以实现相同的功能,关键是把功能看懂熟悉。
2.1 clock.h
clock.h位于contiki/core/sys。该文件为内核文件,定义了clock模块实现的接口和必要条件。最好保持不变。
2.2 clcok.c文件
有clock.h必有clock.c,该文件可以位于contiki/cpu/cc253x,也可以位于contiki/platform/cc2530dk。
2.3 contiki-conf.h
该文件中有非常多的定义,其中和clock模块有关的定义有两个
/* Time type. */ typedef unsigned short clock_time_t; /* Defines tick counts for a second. */ #define CLOCK_CONF_SECOND 128
clock_time_t被定义为无符号16位整数,在IAR平台int和short同为16位长度。CLOCK_CONF_SECOND为clock经历一秒的嘀嗒总数。选择128是因为clcok模块的参考时钟源为32768Hz。
3.clock模块的实现
clock模块实现需要4个步骤。初始化函数clock_init(),获得时钟时间clock_time(),更新时钟中断函数,简单的软件延时函数clock_delay()。
3.1 clock_init()函数
在CC2530这个平台上,zigbee和contiki不约而同的选择睡眠定时器,睡眠定时器有一个计数寄存器和一个捕获寄存器组成,值得说明的是计数寄存器和捕获寄存器均由三个8位寄存器组成。在clcok_init()函数中初始化了CC2530的时钟,该部分对系统运行和rtimer模块都非常重要。
具体代码如下:
void clock_init(void) { /* Make sure we know where we stand */ CLKCONCMD = CLKCONCMD_OSC32K | CLKCONCMD_OSC; /* Stay with 32 KHz RC OSC, Chance System Clock to 32 MHz */ CLKCONCMD &= ~CLKCONCMD_OSC; while(CLKCONSTA & CLKCONCMD_OSC); /* Tickspeed 500 kHz for timers[1-4] */ CLKCONCMD |= CLKCONCMD_TICKSPD2 | CLKCONCMD_TICKSPD1; while(CLKCONSTA != CLKCONCMD); /*Initialize tick value*/ timer_value = ST0; timer_value += ((unsigned long int) ST1) << 8; timer_value += ((unsigned long int) ST2) << 16; timer_value += TICK_VAL; ST2 = (unsigned char) (timer_value >> 16); ST1 = (unsigned char) (timer_value >> 8); ST0 = (unsigned char) timer_value; STIE = 1; /* IEN0.STIE interrupt enable */ }
几点说明
1.32K时钟源选择片内RC。
2.系统时钟源选择片外OSC,32MHz
3.定时器时钟选择500K,和之后的rtimer有关
4.系统运行时钟选择32M。
5.休眠定时器的累加值为256。和时钟源23768有关。
6.使能休眠定时器中断,勿忘其他函数中应启动全局中断。
CLKCONCMD寄存器配置可以查看下图。
非常简单,返回一个counter即可。该counter应在睡眠定时器中不断增加。
CCIF clock_time_t clock_time(void) { return count; }
睡眠定时器中断主要做三件事情
1.更新睡眠定时器捕获寄存器
2.更新etimer模块(以后会详细分析etimer和rtimer)
3.若经历一个整数秒,增累加second
4.最后清除中断标志位。
请查看代码:
#pragma vector=ST_VECTOR __near_func __interrupt void clock_isr(void) { DISABLE_INTERRUPTS(); ENERGEST_ON(ENERGEST_TYPE_IRQ); timer_value = ST0; timer_value += ((unsigned long int) ST1) << 8; timer_value += ((unsigned long int) ST2) << 16; timer_value += TICK_VAL; ST2 = (unsigned char) (timer_value >> 16); ST1 = (unsigned char) (timer_value >> 8); ST0 = (unsigned char) timer_value; ++count; if(count % CLOCK_CONF_SECOND == 0) { ++seconds; } if(etimer_pending() && (etimer_next_expiration_time() - count - 1) > MAX_TICKS) { etimer_request_poll(); } STIF = 0; /* IRCON.STIF */ ENERGEST_OFF(ENERGEST_TYPE_IRQ); ENABLE_INTERRUPTS(); }
[3]wordpress setup_postdata 后 get_post() 失效的问题。
来源: 互联网 发布时间: 2013-10-25
setup_postdata($post) 的作用把某个 post 声明成全局的 post, 这样可以方便的用 get_permalink() 等模板函数,在我做的项目中,发现这个函数不起作用:
不知到我的用法是不是不对。通过对函数的查看,我找到了临时的解决办法:
问题出在setup_postdata() 并没有对 $GLOBALS['post']赋值,所以我不知道是用法不对还是其他的问题。有明白的大佬帮忙解释一下,谢谢。
setup_postdata($item); var_dump(get_the_ID());// 这里是null或者是其他的id
不知到我的用法是不是不对。通过对函数的查看,我找到了临时的解决办法:
$globalpost = $GLOBALS['post']; $GLOBALS['post'] = $item; setup_postdata($item); var_dump(get_the_ID());//这里就正常输出了。 $GLOBALS['post'] = $globalpost;
问题出在setup_postdata() 并没有对 $GLOBALS['post']赋值,所以我不知道是用法不对还是其他的问题。有明白的大佬帮忙解释一下,谢谢。
作者:wang350 发表于2013-6-17 11:00:42 原文链接
阅读:47 评论:0 查看评论
最新技术文章:
 
站内导航:
特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!