关闭
当前搜索:

Zookeeper C Client分析

每个zookeeper API必须有一个zhandle。当初始化一个zhandle时(zookeeper_init)首先初始化zhandle的相应字段然后创建两个线程:do_io,do_completion;并且等待这两个线程初始化完成后才返回,这两个线程也要等待彼此初始化完成后,才提供服务(notify_thread_ready)。 1 IO线程/do_io 显然这个线程用于处理io请求(使...
阅读(8564) 评论(0)

innodb学习(一)——innodb如何使用aio

Innodb从5.5开始使用linux的Native AIO(后面简称N-AIO),告别之前仿真的方式。我们下面从5.6.10的源码分析Innodb的Native AIO使用架构。        Innodb有N个io handler threads(N=1个ibuf_io_thread + 1个log_io_thread + innodb_read_io_threads个read_io_t...
阅读(4682) 评论(1)

innodb事务隔离级别

事务隔离级别 SQL标准定义了4类隔离级别,包括了一些具体规则,用来限定事务内外的哪些改变是可见的,哪些是不可见的。低级别的隔离级一般支持更高的并发处理,并拥有更低的系统开销。 Read Uncommitted(读取未提交内容)       在该隔离级别,所有事务都可以看到其他未提交事务的执行结果。本隔离级别很少用于实际应用,因为它的性能也不比其他级别好多少。读取未提交的数据,也被称之为脏读...
阅读(5965) 评论(0)

linux调度器(十)——调度器/proc信息解读

注下面的时间或时刻都是从rq->clock中获得的,而这个值是由update_rq_clock底层cpu来更新的。并且很多信息是需要内核配置CONFIG_SCHEDSTATS才有。 /proc//sched $cat /proc/28733/sched     cpu_test (28733, #threads: 1) --------------------------...
阅读(11931) 评论(0)

linux调度器(九)——调度器的配置参数

调度器的配置参数 /proc/sys/kernel/sched_min_granularity_ns(4000000ns):sysctl_sched_min_granularity,表示进程最少运行时间,防止频繁的切换,对于交互系统(如桌面),该值可以设置得较小,这样可以保证交互得到更快的响应(见周期调度器的check_preempt_tick过程) /proc/sys/kernel/sc...
阅读(9771) 评论(0)

linux调度器(八)——实时调度与SMP

实时调度器类 实时调度类有两类进程: 循环进程SCHED_RR:循环进程有时间片,随着进程的运行时间会减少。当时间片用完时又将其置为初值,并将进程置于队列末尾。 先进先出SCHED_FIFO:没有时间片调度,运行后可执行任意长时间直到自己放弃CPU。 实际上两类进程在相同优先级队列上都是先进先出的,只是一个有时间片一个没有时间片。     现在实时进程的调度其实就是使用之前内核的O(1)...
阅读(5725) 评论(0)

linux调度器(七)——other cfs class api and functions

OTHER CFS CLASS API set_curr_task_fair(rq):将cpu运行队列里的当前运行进程设置为cfs运行队列里当前运行的进程(set_curr_task_fair),对于组调度则必须把它上级的se也设置为相应cfs_rq的当前运行进程。该接口主要用于修改某个进程的调度策略(__sched_setscheduler调度器类的运行队列信息也需要更新)或把一个进程从一个g...
阅读(4213) 评论(0)

linux调度器(六)——应用层理解CFS及组调度

上面我们介绍了CFS及组调度相关的主要内容,但可能很多人还跟我一样有点云里雾里的,下面我们直接从应用层面上也查看CFS及组调度的效果。首先对于非组调度,决定它们运行时间的唯一因素就是weight,也就是我们知道的nice,我们可以通过renice来重新调整进程的优先级,然后再使用taskset将它们限定在同一个CPU上(CFS只是保证一个CPU的公平,所以你可以看到一个有趣的现象:如指定两个进程的...
阅读(6577) 评论(0)

linux调度器(五)——进程管理与CFS

进程调度初始化          由于该过程涉及到进程的管理模块,这个模块的详细过程我们将在以后的机会介绍,所以这里,我们主要扣出与调度相关的内容。进程的创建内核入口为do_fork,首先我们简单的看一下它的主要行为: 图 do_fork与CFS的交互          上图我们只是画了do_fork最普通的fork操作,及正常的启动状态,上面的三个sched_class函数调用就是...
阅读(5091) 评论(0)

linux调度器(四)——主调度器与CFS

当内核从系统调用返回,或者从中断处理程序返回,内核都会检查当前进程是否设置了TIF_NEED_RESCHED标志;或者进程主动放弃CPU时(sched_yield,sleep或者收到SIGSTOP,SIGTTOP信号)都会进入主调度器。同样的我们先看一下主调度的框架部分,该部分就是sched.c:schedule(void): 关闭内核抢占 如果进程之前是不可运行并且被内核抢占了,那么如果它现...
阅读(5191) 评论(1)

linux调度器(三)——周期性调度器与CFS

注:这里并没有详细分析到每个内部函数,如果要了解这些细节的话,可以看后面的OTHER CFS CLASS API及CFS主要的内部函数。     周期性调度器在调度框架上由scheduler_tick完成:在每一个cpu的时钟周期都触发一次该函数调用,它更新运行队列的时钟及load,然后调用当前进程的调度器类的周期调度函数。 update_rq_clock(rq); /* 更新运行队列的时钟rq...
阅读(5554) 评论(0)

linux调度器(二)——CFS模型

本系列文章阅读的core是:2.6.32-220 这里使用“模型”而不是“算法”是因为这东西实在不好用算法描述(但是它却运行得很好,包括性能)。          核心思想: 把CPU总时间按运行队列的所有se的权重分配给每个se。每个se使用cpu的顺序由它们已使用的cpu虚拟时间(vruntime)决定的,已使用的虚拟时间越少,它在运行队列的位置越靠左,那么它再次被调度执行的概率也就越高。...
阅读(6121) 评论(0)

linux调度器(一)——概述

本次分析的kernel代码为2.6.32-220。并且我们先不考虑SMP。当前linux的调度程序由两个调度器组成:主调度器,周期性调度器(两者又统称为核心调度器);并且每个调度器包括两个内容:调度框架(其实质就是两个函数框架)及调度器类。调度器类是实现了不同调度策略的实例,如 CFS、RT class。它们的关系如下图: 图 调度器的组成 当前的内核支持两种调度器类(sched_se...
阅读(12364) 评论(0)

cgroup学习(八)——CPUSET子系统

对于CPUSET子系统我们主要解释对cpuset.cpus的操作。Read操作根据《cgroup学习(三)——伪文件》可以很容易的跟踪到代码,并解读,所以我们这里就不赘述,直接解释write及attach操作。首先我们看一下write操作的bt(使用systemtap见《使用systemtap获得内核函数的局部变量》): sudo sh -c "echo 0-3 > cpuset.cpus" 1...
阅读(5774) 评论(0)

cgroup学习(七)——cpu子系统

CPU子系统         对于CPU子系统最常见的参数就是cpu.shares,我们来通过《cgroup学习(三)——伪文件》的表格来跟踪一下对该参数的读写操作。         通过systemtap我们可以看到读的bt:(cat cpu.shares) 2327 (cat) cpu_shares_read_u64 call trace: 0xffffffff8104d0a0 : c...
阅读(5707) 评论(0)
58条 共4页1 2 3 4 下一页 尾页
    个人资料
    • 访问:280026次
    • 积分:3451
    • 等级:
    • 排名:第10895名
    • 原创:52篇
    • 转载:6篇
    • 译文:0篇
    • 评论:20条
    我的微博
    文章分类
    最新评论