RCU机制以及内存优化屏障


RCU

RCU (ready-copy-update) 是读-拷贝-更新,是linux内核中重要的同步机制,Linux内核已有原子操作,读写信号量等锁机制

  1. RCU 重要的应用场景是链表,有效地提高遍历读取数据的效率,读取链表成员时候,通常只需要rcu_read_lock(),允许多个线程同时读取链表,并且允许一个线程同时修改链表。
  2. RCU 的意思是读复制更新,它是根据原理命名,写者修改对象的流程为:首先复制生成一个副本,然后更新此副本,最后使用新对象替换旧的对象。
  3. 在写者执行复制更新的时候,读者可以读数据信息

写者删除对象,必须等待所有访问被删除对象读者访问结束的时候,才能够执行销毁操作实

Read more

进度优先级与调度策略


基础知识

Linux 内核当中有3中调度策略

  1. SCHED_OTHER 分时调度策略
  2. SCHED_FIFO 实时调度策略,先到先服务;
  3. SCHED_RR 实时调度策略,时间片轮转,公平和平等, 备注:如果有相同优先级的实时进程(根据优先级计算的调度权值是一样的)已经准备好,FIFO时必须等待该进程主动放弃后才能运行这个优先级相同的任务 而RR可以每个任务都执行一段时间。

获取线程设置的最高和最低优先级函数如下:

int sched_get_priority_max(int policy);//获取实时优先级的最大值
int sched_get_priority_min(int policy

Read more

实时调度类及SMP 和NUMA


实时调度类

  1. Linux 进程可分为两大类:实时进程和普通进程,实时进程与普通进程根本不同之处,如果系统中有一个实时进程且可执行,那么调度器总是会选择它,除非另有一个优先级更高实时进程。 SCHED_FIFO: 没有时间片,在被调度器选择之后,可以运行任意时长时间; SCHED_RR: 有时间片,其值在进程运行时会减少

实时调度实体sched_rt_entity 数据结构

表示实时调度实体,包含整个实时调度数据信息,

struct sched_rt_entity {
    struct list_head run_list;//专门用于加入到优先级队列中
    unsigned long

Read more

调度器以及CFS调度器


调度器

Liux 内核中用来安排调度进程的执行模块成为调度scheduler ,它可以切换进程状态(process status) 比如 执行,可中断睡眠,不可中断睡眠,退出,暂停等。

调度器的作用相当于CPU 中央处理器的管理员,主要负责完成做两件事情: 1. 选择某些就绪进程来执行 2. 打断某些执行的进程让他们变为就绪状态

调度

安装某种调度的算法设计,从进程的就绪队列当中选取进程分配CPU ,主要是协调对cpu等等相关资源使用,进程调度的目的:最大限度利用CPU时间 ,如果调度器支持就绪状态切换到执行状态,同时支持执行状态切换到就绪状态,那么该调度器为抢占式调度器

调度类sched

Read more

kafka 高级特性(2)


消费者参数配置

  1. fetch.min.bytes 服务器对每个拉取消息的请求返回的数据量最小值,如果数据量达不到这个值,请求等待,让更多的数据累计,达到这个值之后响应请求,默认设置是1个字节,表示只要有一个字节的数据,就立即响应请求,可以将值设置为大一点的数字,长时间可以累积数据,可以提高吞吐量,代价是额外的延迟时间
  2. fetch.max.wait.ms 如果服务端的数据量达不到fetch.min.bytes 的话,服务器端不能立即响应请求,用来配置服务器阻塞请求的最大时长。
  3. fetch.max.bytes 服务器给单个拉取请求返回的最大数据量,消费者批量拉取消息,如果第一个非空消息批次的值

Read more