1. 消息队列设置长度
先用dev_get_by_name按名称,或dev_get_by_index按ifindex获取net_device结构,也就是“dev->tx_queue_len”中的dev。
2. linux修改消息队列长度
在消息队列中可能有各种各样类型的消息,就像网页一样,有图片,有文字,,怎么区分这些消息呢,就是给不同类型的消息赋予不同的类型值以区分,,,凡是msg_type=1的消息都属于同一类消息。
。
3. 消息队列设置长度在哪
一、创建任务
两个系统都支持创建静态系统任务和动态任务。区别如下:
freertos 创建的任务添加到就绪任务链表,创建完成后,若调度器已经运行,则可直接参与调度。
rtthread 创建的线程添加到挂起任务列表,创建线程后,需要主动调用start_up,将线程移到就绪任务列表,参与调度。
二、delay
两个系统都支持delay和delayutil。区别如下:
freertos 系统有专用的delay超时计数链表。delay的任务按照超时时间依次排列在超时计数链表中,等待超时时间到达,将其移至就绪任务链表参与调度。
rtthread 系统的每个线程控制块结构体中都定义了一个软件定时器结构体,delay延时函数调用时,将会启动线程自带的软件定时器,完成delay操作,delay超时时间满足时,触发软件定时器超时callback,将任务从挂起列表移到就绪列表参与调度。
三、信号量
两个系统都支持使用信号量。区别如下:
freertos 系统的信号量也是队列,只不过队列的长度为0。freertos使用宏定义封装了计数信号量和二值信号量。
rtthread 系统信号量只支持计数信号量,在创建信号量时传入信号量的初始值。系统中没有二值信号量的接口。可以通过初始值设置1,作为二值信号量使用。
四、邮箱
邮箱与消息队列不同,邮箱常用于传输一个地址,可以直接引用数据,进行数据传输。但是消息队列的实现机制是提前分配好队列最大长度个队列项的内存,在传输数据时,将要发送的数据拷贝到申请的队列内存中,实现的是数据的拷贝。
freertos 系统不支持邮箱
rtthread 系统支持邮箱,邮箱传输的数据大小只有4字节,一般用于传输一个地址,引用这个地址进行数据的传输。
五、时间片
两个系统都支持时间片轮转的机制。时间片轮转是指就绪任务列表中有至少两个相同优先级的最高任务。需要按照轮流执行固定的时间tick进行任务调度。共享cpu资源。两个系统的区别如下:
freertos 系统需要主动打开时间片轮转的宏定义才会开启这个功能,在task调度切换时,每个task只能执行1个tick。
rtthread 系统在创建thread的时候可以直接传入时间片参数,在thread调度切换时,将按照创建时传入的时间片占用CPU资源,进行相同优先级thread的调度。
六、优先级
freertos 系统的优先级定义为,优先级数值越大,task的优先级越高。
rtthread 系统的优先级定义为,优先级数值越小,thread的优先级越高。优先级为0的thread,优先级最高。
4. 计算队列长度
当队列尾已经超出最大长度时,队列首可能还没有超出,比如最大长度为100,当队列尾为102时(此时rear里面存的已经是2(即102%100)了),而front可能还是98。此时就不能直接用rear-front来计算队列长度,就得使用(rear-front+MAXQSIZE)%MAXQSIZE计算。即:2-98=-4,错误,而(2-98+100)%100=4,这才正确。
5. 消息队列的长度
相同核心和架构的CPU,主频越大肯定是越好的。
主频也叫时钟频率,单位是兆赫(MHz)或千兆赫(GHz),用来表示CPU的运算、
处理数据的速度。通常,主频越高,CPU处理数据的速度就越快。
CPU的主频=外频×倍频系数。主频和实际的运算速度存在一定的关系,但并不是一个简单的线性关系。所以,CPU的主频与CPU实际的运算能力是没有直接关系的,主频表示在CPU内数字脉冲信号震荡的速度。在Intel的处理器产品中,也可以看到这样的例子:1 GHz Itanium芯片能够表现得差不多跟2.66 GHz至强(Xeon)/Opteron一样快,或是1.5 GHz Itanium 2大约跟4 GHz Xeon/Opteron一样快。CPU的运算速度还要看CPU的流水线、总线等各方面的性能指标。
CPU的其他性能参数:
外频
外频是CPU的基准频率,单位是MHz。CPU的外频决定着整块主板的运行速度。通俗地说,在台式机中,所说的超频,都是超CPU的外频(当然一般情况下,CPU的倍频都是被锁住的)相信这点是很好理解的。但对于服务器CPU来讲,超频是绝对不允许的。前面说到CPU决定着主板的运行速度,两者是同步运行的,如果把服务器CPU超频了,改变了外频,会产生异步运行,(台式机很多主板都支持异步运行)这样会造成整个服务器系统的不稳定。
绝大部分电脑系统中外频与主板前端总线不是同步速度的,而外频与前端总线(FSB)频率又很容易被混为一谈。
总线频率
AMD 羿龙II X4 955黑盒
前端总线(FSB)是将CPU连接到北桥芯片的总线。前端总线(FSB)频率(即总线频率)是直接影响CPU与内存直接数据交换速度。有一条公式可以计算,即数据带宽=(总线频率×数据位宽)/8,数据传输最大带宽取决于所有同时传输的数据的宽度和传输频率。比方,支持64位的至强Nocona,前端总线是800MHz,按照公式,它的数据传输最大带宽是6.4GB/秒。
外频与前端总线(FSB)频率的区别:前端总线的速度指的是数据传输的速度,外频是CPU与主板之间同步运行的速度。也就是说,100MHz外频特指数字脉冲信号在每秒钟震荡一亿次;而100MHz前端总线指的是每秒钟CPU可接受的数据传输量是100MHz×64bit÷8bit/Byte=800MB/s。
倍频系数
倍频系数是指CPU主频与外频之间的相对比例关系。在相同的外频下,倍频越高CPU的频率也越高。但实际上,在相同外频的前提下,高倍频的CPU本身意义并不大。这是因为CPU与系统之间数据传输速度是有限的,一味追求高主频而得到高倍频的CPU就会出现明显的“瓶颈”效应-CPU从系统中得到数据的极限速度不能够满足CPU运算的速度。一般除了工程样版的Intel的CPU都是锁了倍频的,少量的如Intel酷睿2核心的奔腾双核E6500K和一些至尊版的CPU不锁倍频,而AMD之前都没有锁,AMD推出了黑盒版CPU(即不锁倍频版本,用户可以自由调节倍频,调节倍频的超频方式比调节外频稳定得多)。
缓存
缓存大小也是CPU的重要指标之一,而且缓存的结构和大小对CPU速度的影响非常大,CPU内缓存的运行频率极高,一般是和处理器同频运作,工作效率远远大于系统内存和硬盘。实际工作时,CPU往往需要重复读取同样的数据块,而缓存容量的增大,可以大幅度提升CPU内部读取数据的命中率,而不用再到内存或者硬盘上寻找,以此提高系统性能。但是由于CPU芯片面积和成本的因素来考虑,缓存都很小。
L1Cache(一级缓存)是CPU第一层高速缓存,分为数据缓存和指令缓存。内置的L1高速缓存的容量和结构对CPU的性能影响较大,不过高速缓冲存储器均由静态RAM组成,结构较复杂,在CPU管芯面积不能太大的情况下,L1级高速缓存的容量不可能做得太大。一般服务器CPU的L1缓存的容量通常在32-256KB。
L2Cache(二级缓存)是CPU的第二层高速缓存,分内部和外部两种芯片。内部的芯片二级缓存运行速度与主频相同,而外部的二级缓存则只有主频的一半。L2高速缓存容量也会影响CPU的性能,原则是越大越好,以前家庭用CPU容量最大的是512KB,笔记本电脑中也可以达到2M,而服务器和工作站上用CPU的L2高速缓存更高,可以达到8M以上。
L3Cache(三级缓存),分为两种,早期的是外置,内存延迟,同时提升大数据量计算时处理器的性能。降低内存延迟和提升大数据量计算能力对游戏都很有帮助。而在服务器领域增加L3缓存在性能方面仍然有显著的提升。比方具有较大L3缓存的配置利用物理内存会更有效,故它比较慢的磁盘I/O子系统可以处理更多的数据请求。具有较大L3缓存的处理器提供更有效的文件系统缓存行为及较短消息和处理器队列长度。
其实最早的L3缓存被应用在AMD发布的K6-III处理器上,当时的L3缓存受限于制造工艺,并没有被集成进芯片内部,而是集成在主板上。在只能够和系统总线频率同步的L3缓存同主内存其实差不了多少。后来使用L3缓存的是英特尔为服务器市场所推出的Itanium处理器。接着就是P4EE和至强MP。Intel还打算推出一款9MB L3缓存的Itanium2处理器,和以后24MB L3缓存的双核心Itanium2处理器。
但基本上L3缓存对处理器的性能提高显得不是很重要,比方配备1MB L3缓存的Xeon MP处理器却仍然不是Opteron的对手,由此可见前端总线的增加,要比缓存增加带来更有效的性能提升。
6. 队列长度和队列容量
SizeQueue = (real+Maxsize-front)%MaxSize 例:循环队列为最大容量为5的线性表,队首指针指向3,队尾指针指向1,此时队长为: (1+5-3)%5 =3
7. 消息队列的设计
websocket是双向链接的。当成功连接之后,你可以获得一个客户端的socket。在需要主动发送数据的时候,只需要socket.send就可以发送数据了。当然前提是这个socket要依然有效。
8. 消息队列最大容量
三种调度器
FIFO调度器
先进先出,但不适合资源公平性
容量调度器
独立的专门队列保证小作业也可以提交后就启动,队列容量是专门保留的
以整个集群的利用率为代价,与FIFO比,大作业执行的时间要长
公平调度器
不需要预留资源,调度器可以在运行的作业之间动态平衡资源,大作业启动时,因为是唯一运行的,所以获得集群的所有资源,之后小作业启动时,被分配到集群的一半的资源,这样每个作业都能公平共享资源
调度器配置
容量调度器
1) 多个组织共享集群,每个组织配置一个队列,一个队列分配一定的集群资源
2) 同一个队列可以进一步划分,同一个组织不同用户共享队列所分配的资源,使用FIFO调度
3) 队列资源不足时,可以等待其他队列释放的资源或者使用集群中其他空闲资源,这可能会使得实际使用的队列容量超出配置的容量,这叫做“弹性队列”
4) 为队列设置一个最大容量限制,可以防止队列过多侵占其他队列资源
容量调度器配置
在capacity-scheduler.xml配置yarn.scheduler.capacity.<queue-path>.<sub-property>
作业的队列放置
job放置的队列取决于job本身,可以在mapreduce中配置mapreduce.job.queuename,如果队列不存在,则报错,不指定则使用默认default队列
队列名是指队列层次的最后一层,不包含之前路径
公平调度器
既实现了用户队列间的公平调度,也实现了队列内作业间的公平调度
假设用户A,B各自拥有队列Q1,Q2
1) A先启动一个job J1,则J1占用集群所有资源
2) B启动一个job J2,则Q1中的J1需要分一半资源给Q2中的J2
3) B又启动一个job J3,则Q2中的J2需要分一半资源给Q2中的J3
公平调度器配置
1) 因为yarn-site.xml中默认使用容量调度器(CDH除外),首先修改其中yarn.resourcemanager.scheduler.class为公平调度器:
org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler
2) 可以修改队列内的调度策略,默认使用公平调度,也支持FIFO
job的队列放置
1) 使用基于规则的系统确定job队列放置,匹配对应的用户队列直到使用default队列
2) 直接就使用default,所有job公平分配
抢占
允许调度器终止占用资源超过公平共享份额队列的容器,这些容器资源释放后被分配给资源数量低于应得份额的队列
抢占的影响:因为被终止的容器需要重新执行而降低集群效率
抢占超时设置
yarn.scheduler.fair.preemption
设置超时参数,设定时间都是秒级别
1) 最小共享抢占
defaultMinSharePreemptionTimeout
指定时间未获得被承诺的最小共享资源,调度器则抢占其他容器
2) 公平共享抢占
defaultFairSharePreemptionTimeout
指定时间获得资源低于公平共享份额的一半,调度器抢占其他容器。
9. 消息队列深度和消息队列长度
队列长度计算公式:( r e a r − f r o n t + m a x S i z e ) % m a x S i z e ( rear - front + maxSize)% maxSize(rear−front+maxSize)%maxSize
+maxSize:目的是防止rear - front < 0%maxSize:目的是防止当rear - front > 0时,又+ maxSize导致队列长度>maxSize
10. 消息队列大小设置
10公分。因为:
1、队列集体动作训练时,要求人与人之间的前后距离是75公分(约一臂之长)、左右间隔各10公分(约一个拳头),这是队列条令规定的标准空间。
2、跨立是停止间的一个队列动作,无论向左或向右跨立,只是动作的原地变换,并没有移动整个身位,不需再单独预留空间。
3、跨立的动作要领是向右或向左跨半步,双手背到身后,而人体宽度为50公分,跨步宽度约25公分,半个身宽25公分再加原间隔10公分是35公分,从数理上计算跨立不会影响左右邻,因此无需再增加间隔。