今天在图书馆看书,摘抄一些有意思的细节。
Linux内存布局NUMA:  
    非一致性读取 每个节点;  
    每个节点下有 多个管理区(ZONE)内存块;  
    内存块包括:  
        ZONE_DMA 0~16MB  
        ZONE_NORMAL 16~896MB
        ZONE_HIGHMEM 896MB~结束  
    32位处理器下,用户空间3GB,内核空间1GB;  
        内核空间除去ZONE_DMA和ZONE_NORMAL后只剩下128MB用来vmalloc/kmap等操作;  
        kmap操作用来虚拟化页表数据位,可以在32位处理器下支持64GB内存。 
    NUMA结构下8节点的互连结构,只是3个相互最近的互连;  
    不同节点之间的定时器很难一致,通常选一个做唯一定时。
多处理SMP:  
    松耦合系统:每个处理器都有自己的总线、内存和IO系统;  
    紧耦合系统:只运行一个OS;  
      对称系统均分任务;  
      非对称系统有一个主控处理器;  
        cache是否共享?内存、总线和IO子系统肯定是共享的,cache会带来一致性问题;  
        锁竞争导致的开销,所以N个处理器不能达到N倍效率提升;  
        affinity即绑定进程到CPU,让进程跟cache更近。  
          linux里进程是高权的线程(一般说法是反过来说线程是小型的进程)
集群cluster:  
    高性能:分布式任务并行处理,100+节点,通称为计算机;  
    高可用:故障问题,最多16节点,通常2~4节点,通称为企业服务器。
系统跟踪前提:  
    容量足够;开销较小;场景可重现;尽量无其他进程干扰除非是场景本身需要。
strace命令场景:  
    判断IO阻塞,内存分配及其频率等。
OProfile: opcontrol命令:设置的count要足够大,否则中断本身次数会影响结果。
内核调度器:  
    优先级0~MAX_PRIO(140);  
    0~100为实时任务;  
    101~140为分时任务,即nice命令调整的-20~19。
I/O调度器:  
    deadline:  
      read_expire;  
      seek_cost=(x+stream_unit-1)/stream_unit,默认stream_unit为4字节;  
      write_starved:读优先N次后才写;
文件系统:  
    hdparm:MaxMultSect参数,默认16,当前都支持32位输出了。
网络:  
    tcp_window_scaling、tcp_sack、tcp_fsack等。
进程间通信:  
    ipcs -u查看状态;  
    ipcs -l查看限制。
数据库:  
    OLTP在线事务处理的业务类型类似小文件,一般文件块大小在2KB左右;  
    DSS决策支持系统的业务类型类似大文件,一般文件块大小在8KB以上。
Netflix的Jiffy是客户端收集的开源项目;  
  sqmphoniq即是服务器端分析,也要客户端js的支持;  
  Episodes同上。
类与超类:  
    所有类的超类都是Object;  
    所有类都是类Class的对象。
chukwa监控系统:  
    在HDFS和Map/Reduce的基础上,即意味着日志非tail方式,而是有collector先行合并成大文件再存储到HDFS;  
    致力于2000+节点,1TB+日志量的集群日志分析,即意味着非实时性;  
    数据结果目前还是存MySQL里再web展示,可能会转移到HBase上。  
    流程架构类似如下:  
        N个agents(每台server一个) –HTTP–> M个collectors(每百个agent一个) –sink–> HDFS –map/reduce–> MySQL <–JSP/JS–> Web(HICC)  
    整个流程跟logstash很类似,但是logstash没有固定hadoop平台,所以不用sink这步,实时性更好;而agent的input代码段就类似于执行类似map的工作,output段就是reduce结果了。