12 2014 档案

proc文件系统探索 之 根目录下的文件[三]
摘要:包括对proc根目录下meminfo文件的解析。> cat /proc/meminfo 读出的内核信息进行解释,下篇文章会简单对读出该信息的代码进行简单的分析。MemTotal: 507480 kBMemFree: 10800 kBBuffers: 34728 kBCached: 98852 ... 阅读全文

posted @ 2014-12-28 02:59 疯子123 阅读(282) 评论(0) 推荐(0) 编辑

proc文件系统探索 之 根目录下的文件[二]
摘要:包括对proc根目录下stat,uptime,swaps三个文件的解析。/proc/stat文件包含了系统启动后的一些系统统计信息。Cat /proc/stat:cpu 77781 1077 7602 390390 13232 216 100 0 0cpu0 77781 1077 7602 390... 阅读全文

posted @ 2014-12-28 02:52 疯子123 阅读(145) 评论(0) 推荐(0) 编辑

proc文件系统探索 之 根目录下的文件[1]
摘要:2.1根目录下的文件2.1.1lock文件内核锁,记录与被打开的文件有关的锁信息。该文件显示当前被内核锁定的文件。该文件包含的内容是内核调试数据,根据使用的系统的这些数据会变化很大。一个/proc/locks文件会和下面的相似:niutao@niutao-desktop:/proc$ cat lo... 阅读全文

posted @ 2014-12-28 02:47 疯子123 阅读(179) 评论(0) 推荐(0) 编辑

proc文件系统探索 之 以数字命名的目录
摘要:在proc根目录下,以数字命名的目录表示当前一个运行的进程,目录名即为进程的pid。其内的目录和文件给出了一些关于该进程的信息。niutao@niutao-desktop:/proc/6584$ lsattr coredump_filter fd maps ... 阅读全文

posted @ 2014-12-28 02:25 疯子123 阅读(140) 评论(0) 推荐(0) 编辑

Linux 性能监控、测试、优化工具
摘要:下面的三张图片分别总结了 Linux 各个子系统以及监控、测试、优化这些子系统所用到的工具。监控测试优化from:http://www.vpsee.com/2014/09/linux-performance-tools/ 阅读全文

posted @ 2014-12-28 02:14 疯子123 阅读(113) 评论(0) 推荐(0) 编辑

理解Linux系统负荷
摘要:一、查看系统负荷如果你的电脑很慢,你或许想查看一下,它的工作量是否太大了。在Linux系统中,我们一般使用uptime命令查看(w命令和top命令也行)。(另外,它们在苹果公司的Mac电脑上也适用。)你在终端窗口键入uptime,系统会返回一行信息。这行信息的后半部分,显示"load averag... 阅读全文

posted @ 2014-12-28 02:05 疯子123 阅读(84) 评论(0) 推荐(0) 编辑

linux:如何指定进程运行的CPU
摘要:coolshell最新的文章《性能调优攻略》在“多核CPU调优”章节,提到“我们不能任由操作系统负载均衡,因为我们自己更了解自己的程序,所以,我们可以手动地为其分配CPU核,而不会过多地占用CPU0,或是让我们关键进程和一堆别的进程挤在一起。”。在文章中提到了Linux下的一个工具,taskset... 阅读全文

posted @ 2014-12-28 01:59 疯子123 阅读(2457) 评论(0) 推荐(0) 编辑

linux:cpu 每-CPU 的变量
摘要:每-CPU 的变量每-CPU 变量是一个有趣的 2.6 内核的特性. 当你创建一个每-CPU变量, 系统中每个处理器获得它自己的这个变量拷贝. 这个可能象一个想做的奇怪的事情, 但是它有自己的优点. 存取每-CPU变量不需要(几乎)加锁, 因为每个处理器使用它自己的拷贝. 每-CPU 变量也可存在... 阅读全文

posted @ 2014-12-28 01:55 疯子123 阅读(121) 评论(0) 推荐(0) 编辑

linux:CPU私有变量(per-CPU变量)
摘要:一、简介2.6内核上一个新的特性就是per-CPU变量。顾名思义,就是每个处理器上有此变量的一个副本。per-CPU的最大优点就是,对它的访问几乎不需要锁,因为每个CPU都在自己的副本上工作。tasklet、timer_list等机制都使用了per-CPU技术。二、API使用注意,2.6内核是抢占... 阅读全文

posted @ 2014-12-28 01:51 疯子123 阅读(323) 评论(0) 推荐(0) 编辑

激活第一个CPU
摘要:回到start_kernel,559行,boot_cpu_init函数,跟start_kernel位于同一文件: 494static void __init boot_cpu_init(void) 495{ 496 int cpu = smp_processor_id(); 497 ... 阅读全文

posted @ 2014-12-28 01:43 疯子123 阅读(169) 评论(0) 推荐(0) 编辑

每CPU变量
摘要:最好的同步技术是把设计不需要同步的临界资源放在首位,这是一种思维方法,因为每一种显式的同步原语都有不容忽视的性能开销。最简单也是最重要的同步技术包括把内核变量或数据结构声明为每CPU变量(per-cpu variable)。每CPU变量主要是数据结构的数组,系统的每个CPU对应数组的一个元素。一个... 阅读全文

posted @ 2014-12-28 01:40 疯子123 阅读(152) 评论(0) 推荐(0) 编辑

linux内核中的每cpu变量
摘要:一、linux中的每cpu变量 看linux内核代码的时候,会发现大量的per_cpu(name, cpu),get_cpu_var(name)等出现cpu字眼的语句。从语句的意思可以看出是要使用与当前cpu相关的一个变量,不过查看这个变量的定义,总是有这样一个宏:DEFINE_PER_CPU(... 阅读全文

posted @ 2014-12-28 01:32 疯子123 阅读(168) 评论(0) 推荐(0) 编辑

Linux测量kernel子模块加载时间的方法
摘要:1. 在文件kernel/init/main.c里面,在接口do_one_initcall( )中,将initcall_debug设置为true,然后编译boot.img2. 使用adb shell cat /proc/kmsg | grep initcall 来查看模块加载时间 阅读全文

posted @ 2014-12-28 01:20 疯子123 阅读(133) 评论(0) 推荐(0) 编辑

Linux 性能监测:Network
摘要:网络的监测是所有 Linux 子系统里面最复杂的,有太多的因素在里面,比如:延迟、阻塞、冲突、丢包等,更糟的是与 Linux 主机相连的路由器、交换机、无线信号都会影响到整体网络并且很难判断是因为 Linux 网络子系统的问题还是别的设备的问题,增加了监测和判断的复杂度。现在我们使用的所有网卡都称... 阅读全文

posted @ 2014-12-28 01:17 疯子123 阅读(270) 评论(0) 推荐(0) 编辑

Linux 性能监测:IO
摘要:磁盘通常是计算机最慢的子系统,也是最容易出现性能瓶颈的地方,因为磁盘离 CPU 距离最远而且 CPU 访问磁盘要涉及到机械操作,比如转轴、寻轨等。访问硬盘和访问内存之间的速度差别是以数量级来计算的,就像1天和1分钟的差别一样。要监测 IO 性能,有必要了解一下基本原理和 Linux 是如何处理硬盘... 阅读全文

posted @ 2014-12-28 01:14 疯子123 阅读(163) 评论(0) 推荐(0) 编辑

Linux 性能监测:Memory
摘要:这里的讲到的 “内存” 包括物理内存和虚拟内存,虚拟内存(Virtual Memory)把计算机的内存空间扩展到硬盘,物理内存(RAM)和硬盘的一部分空间(SWAP)组合在一起作为虚拟内存为计算机提供了一个连贯的虚拟内存空间,好处是我们拥有的内存 ”变多了“,可以运行更多、更大的程序,坏处是把部分... 阅读全文

posted @ 2014-12-28 01:10 疯子123 阅读(152) 评论(0) 推荐(0) 编辑

Linux 性能监测:CPU
摘要:CPU 的占用主要取决于什么样的资源正在 CPU 上面运行,比如拷贝一个文件通常占用较少 CPU,因为大部分工作是由 DMA(Direct Memory Access)完成,只是在完成拷贝以后给一个中断让 CPU 知道拷贝已经完成;科学计算通常占用较多的 CPU,大部分计算工作都需要在 CPU 上... 阅读全文

posted @ 2014-12-28 01:05 疯子123 阅读(187) 评论(0) 推荐(0) 编辑

Linux 性能监测:介绍
摘要:看了某某教程、读了某某手册,按照要求改改某某设置、系统设定、内核参数就认为做到系统优化的想法很傻很天真:)系统优化是一项复杂、繁琐、长期的工作,优化前需要监测、采集、测试、评估,优化后也需要测试、采集、评估、监测,而且是一个长期和持续的过程,不是说现在优化了,测试了,以后就可以一劳永逸了,也不是说... 阅读全文

posted @ 2014-12-28 01:02 疯子123 阅读(161) 评论(0) 推荐(0) 编辑

linux2.6.37内核接两个硬盘导致读写效率变低的问题
摘要:一、问题分析:通过跟踪定位write系统调用的实现发现,在每次调用a_ops->write_end之后,都会去调用balance_dirty_pages_ratelimited,该函数负责检查当前系统总的脏页数是否超过阀值(ratelimit_pages),如果超过,就会去调用balance_di... 阅读全文

posted @ 2014-12-28 00:51 疯子123 阅读(276) 评论(0) 推荐(0) 编辑

使用kprobes查看内核内部信息
摘要:前言:使用printk打印变量等方法,是调试内核的有效方法之一,但是这种方法必须重新构建并用新内核启动,调试效率比较低。以内核模块的方式使用kprobes、jprobes,就可以在任意地址插入侦测器,执行包括printk在内的各种调试工作,而无须重新构建内核,也无须重启。一、首先内核必须支持kpr... 阅读全文

posted @ 2014-12-28 00:47 疯子123 阅读(353) 评论(0) 推荐(0) 编辑

linux下内存大小、起始地址的解析与修改
摘要:在实际的工作中,由于产品型号的不同,经常需要调整linux所管理的内存的大小,而内核在启动阶段,会两次去解析从uboot传递过来的关于内存的信息,具体如下:一、解析从uboot传递过来的tag(在parse_tags中处理)在uboot的do_bootm_linux()函数中,会创建一系列需要传递... 阅读全文

posted @ 2014-12-28 00:40 疯子123 阅读(1064) 评论(0) 推荐(0) 编辑

linux下内存的统计和内存泄露类问题的定位
摘要:在产品的开发中,通过对当前系统消耗内存总量的统计,可以对产品所需内存总量进行精确的评估,从而选择合适的内存芯片与大小,降低产品的成本。在遇到内存泄露类问题时,经常会对此束手无策,本文通过对proc下进程相关的文件进行分析,精确评估系统消耗内存的大小,还可以对内存泄露类问题的解决提供一种定位手段。 ... 阅读全文

posted @ 2014-12-28 00:32 疯子123 阅读(276) 评论(0) 推荐(0) 编辑

linux下数据同步、回写机制分析
摘要:一、前言在linux2.6.32之前,linux下数据同步是基于pdflush线程机制来实现的,在linux2.6.32以上的版本,内核彻底删掉了pdflush机制,改为了基于per-bdi线程来实现数据同步,与pdflush线程相比,在per-bdi线程机制中,每个后备存储器拥有自己唯一的回写线... 阅读全文

posted @ 2014-12-28 00:30 疯子123 阅读(179) 评论(0) 推荐(0) 编辑

pdflush进程详解
摘要:一、简介 由于页高速缓存的缓存作用,写操作实际上会被延迟。当页高速缓存中的数据比后台存储的数据更新时,那么该数据就被称做脏数据。在内存中累积起来的脏页最终必须被写回磁盘。在以下两种情况发生时,脏页被写回磁盘:1、当空闲内存低于一个特定的阈值时,内核必须将脏页写回磁盘,以便释放内存。 2、当... 阅读全文

posted @ 2014-12-28 00:23 疯子123 阅读(262) 评论(0) 推荐(0) 编辑

linux内存管理初始化
摘要:内存管理子系统是linux内核最核心最重要的一部分,内核的其他部分都需要在内存管理子系统的基础上运行。而对其初始化是了解整个内存管理子系统的基础。对相关数据结构的初始化是从全局启动例程start_kernel开始的。本文详细描述了从bootloader跳转到linux内核内存管理子系统初始化期间所... 阅读全文

posted @ 2014-12-28 00:21 疯子123 阅读(486) 评论(0) 推荐(0) 编辑

TCP发送源码学习(3)--tcp_transmit_skb
摘要:一、tcp_transmit_skbstatic int tcp_transmit_skb(struct sock *sk, struct sk_buff *skb, int clone_it, gfp_t gfp_mask){ const struct inet_c... 阅读全文

posted @ 2014-12-28 00:18 疯子123 阅读(164) 评论(0) 推荐(0) 编辑

TCP发送源码学习(2)--tcp_write_xmit
摘要:一、tcp_write_xmit()将发送队列上的SBK发送出去,返回值为0表示发送成功。函数执行过程如下:1、检测拥塞窗口的大小。2、检测当前报文是否完全处在发送窗口内。3、检测报文是否使用nagle算法进行发送。4、通过以上检测后将该SKB发送出去。5、循环检测发送队列上所有未发送的SKB。s... 阅读全文

posted @ 2014-12-28 00:15 疯子123 阅读(199) 评论(0) 推荐(0) 编辑

TCP发送源码学习(1)--tcp_sendmsg
摘要:一、tcp_sendmsg()函数分析:int tcp_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg, size_t size){ struct iovec *iov; /*从通用的stru... 阅读全文

posted @ 2014-12-28 00:07 疯子123 阅读(328) 评论(0) 推荐(0) 编辑

linux:关于Linux系统中 CPU Memory IO Network的性能监测
摘要:我们知道:系统优化是一项复杂、繁琐、长期的工作.通常监测的子系统有以下这些:CPUMemoryIONetwork下面是常用的监测工具Linux 系统包括很多子系统(包括刚刚介绍的CPU,Memory,IO,Network,等),下面这张图片很好的总结了 Linux 各个子系统以及监控这些子系统所需... 阅读全文

posted @ 2014-12-27 23:57 疯子123 阅读(151) 评论(0) 推荐(0) 编辑

linux TCP数据包重传过程----小结
摘要:于TCP/IP协议栈的TCP协议的重传功能是由在linux内核源码(net/ipv4/tcp_output.c)中的函数tcp_retransmit_skb()实现的代码如下:/* This retransmits one SKB. Policy decisions and retransmi... 阅读全文

posted @ 2014-12-27 23:50 疯子123 阅读(440) 评论(0) 推荐(0) 编辑

linux TCP头部的构造的简单分析
摘要:TCP的头部的构造是在函数tcp_transmit_skb()中进行的函数片段如下:/* Build TCP header and checksum it. */ th = tcp_hdr(skb); th->source = inet->inet_sport; th->dest = inet... 阅读全文

posted @ 2014-12-27 23:45 疯子123 阅读(183) 评论(0) 推荐(0) 编辑

linux TCP数据包封装在SKB的过程分析
摘要:在linux中 tcp的数据包的封装是在函数tcp_sendmsg开始的,在函数tcp_sendmsg中用到skb = sk_stream_alloc_skb(sk, select_size(sk, sg),sk->sk_allocation);分配了一个SKB(暂且称之为old_skb)而真正的... 阅读全文

posted @ 2014-12-27 23:38 疯子123 阅读(255) 评论(0) 推荐(0) 编辑

关于 linux中TCP数据包(SKB)序列号的小笔记
摘要:关于 SKB序列号的小笔记为了修改TCP协议,现在遇到了要改动tcp分组的序列号,但是只是在tcp_sendmsg函数中找到了SKB的end_seq 一直没有找到seq 不清楚在那里初始化了,就跟踪了分配SKB的函数 sk_stream_alloc_skb()还是没有找到,最后在函... 阅读全文

posted @ 2014-12-27 23:33 疯子123 阅读(249) 评论(0) 推荐(0) 编辑

TCP的TIME_WAIT状态
摘要:主动关闭的Socket端会进入TIME_WAIT状态,并且持续2MSL时间长度,MSL就是maximum segment lifetime(最大分节生命期),这是一个IP数据包能在互联网上生存的最长时间,超过这个时间将在网络中消失。MSL在RFC 1122上建议是2分钟,而源自berkeley的T... 阅读全文

posted @ 2014-12-27 23:30 疯子123 阅读(123) 评论(0) 推荐(0) 编辑

Linux-2.6.25 TCPIP函数调用大致流程
摘要:插口层系统调用send sys_send sys_sendtosendto sys_sendto sock_sendmsgsendmsg sys_sendmsg sock_sendmsgwrite sys_write ... 阅读全文

posted @ 2014-12-27 23:05 疯子123 阅读(216) 评论(0) 推荐(0) 编辑

Linux 下不经过BIOS重启(i386)
摘要:前段时间有个项目,要求在Linux下不经过BIOS重启,i386平台。一、可行性分析 众所周知,BIOS中包含了CPU及其他各种设备的初始化代码,Linux系统运行之后是否能够将各种用到的设备返回到刚被BIOS初始化后的状态是是否可行的关键。 从项目的条件来看,外设并不是问题。因为要首先开... 阅读全文

posted @ 2014-12-27 22:56 疯子123 阅读(293) 评论(0) 推荐(0) 编辑

Linux块设备加密之dm-crypt分析
摘要:相关的分析工作一年前就做完了,一直懒得写下来。现在觉得还是写下来,以来怕自己忘记了,二来可以给大家分享一下自己的研究经验。 这篇文章算是《Device Mapper代码分析》的后续篇,因为dm-crypt是基于dm框架的,因此与上一篇一样,也以2.6.33内核代码为基础来讲述代码的分析过程。但是本... 阅读全文

posted @ 2014-12-27 22:44 疯子123 阅读(486) 评论(0) 推荐(0) 编辑

Device Mapper 代码分析
摘要:Device Mapper(DM)是Linux 2.6全面引入的块设备新构架,通过DM可以灵活地管理系统中所有的真实或虚拟的块设备。DM以块设备的形式注册到Linux内核中,凡是挂载(或者说“映射”)于DM结构下的块设备,不管他们是如何组织,如何通讯,在Linux看来都是一个完整的DM块设备。因此... 阅读全文

posted @ 2014-12-27 22:21 疯子123 阅读(285) 评论(0) 推荐(0) 编辑

Linux 下的一个全新的性能测量和调式诊断工具 Systemtap, 第 3 部分: Systemtap
摘要:Systemtap的原理,Systemtap与DTrace比较,以及安装要求和安装步骤本系列文章详细地介绍了一个Linux下的全新的调式、诊断和性能测量工具Systemtap和它所依赖的基础kprobe以及促使开发该工具的先驱DTrace并给出实际使用例子使读者更进一步了解和认识这些工具。 本文是... 阅读全文

posted @ 2014-12-27 21:32 疯子123 阅读(241) 评论(0) 推荐(0) 编辑

Linux 下的一个全新的性能测量和调式诊断工具 Systemtap, 第 2 部分: DTrace
摘要:DTrace的原理本系列文章详细地介绍了一个 Linux 下的全新的调式、诊断和性能测量工具 Systemtap 和它所依赖的基础 kprobe 以及促使开发该工具的先驱 DTrace 并给出实际使用例子使读者更进一步了解和认识这些工具。 本文是该系列文章之二,它详细地讲解了 DTrace 的原理... 阅读全文

posted @ 2014-12-27 21:12 疯子123 阅读(232) 评论(0) 推荐(0) 编辑

Linux 下的一个全新的性能测量和调式诊断工具 Systemtap,第 1 部分: kprobe
摘要:kprobe 的原理、编程接口、局限性和使用注意事项本系列文章详细地介绍了一个Linux下的全新的调式、诊断和性能测量工具Systemtap和它所依赖的基础kprobe以及促使开发该工具的先驱DTrace并给出实际使用例子使读者更进一步了解和认识这些工具。 本文是该系列文章之一,它讲解了kprob... 阅读全文

posted @ 2014-12-27 20:53 疯子123 阅读(330) 评论(0) 推荐(0) 编辑

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示