Linux查看系统IO

Linux查看IO的工具主要有两个,iostat(集成于sysstat包中)和iotop。前者经常用于查看分区的IO情况,后者常用来查看每个进程的IO占用。

[root@bogon ~]# yum install sysstat
[root@bogon ~]# iostat -x 1       #每隔一秒显示一次
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.00    0.00    0.00    0.00    0.00  100.00

Device:         rrqm/s   wrqm/s   r/s   w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %
sda               0.00     0.00  0.00  0.00     0.00     0.00     0.00     0.00    0.00   0.00   
sda1              0.00     0.00  0.00  0.00     0.00     0.00     0.00     0.00    0.00   0.00   
sda2              0.00     0.00  0.00  0.00     0.00     0.00     0.00     0.00    0.00   0.00   
dm-0              0.00     0.00  0.00  0.00     0.00     0.00     0.00     0.00    0.00   0.00   
dm-1              0.00     0.00  0.00  0.00     0.00     0.00     0.00     0.00    0.00   0.00   
hdc               0.00     0.00  0.00  0.00     0.00     0.00     0.00     0.00    0.00   0.00

继续阅读

Linux内核调拭之printk用法(2)

本文演示了一下printk的基本用法,实验环境为CentOS 5.9 64bit

1,下载内核源码
下载地址是https://www.kernel.org/pub/linux/kernel/v2.6/
CentOS 5.9用的是2.6.18版,CentOS 6用的是2.6.32,下载对应版本的内核文件就可以了

# wget https://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.18.tar.gz
# tar -zxvf linux-2.6.18.tar.gz
# cd linux-2.6.18

2,修改内核

vim init/main.c  

查找start_kernel,在大约456行有如下内容:
……
asmlinkage void __init start_kernel(void)
{
        char * command_line;
        extern struct kernel_param __start___param[], __stop___param[];

        smp_setup_processor_id();

        /*  
         * Need to run as early as possible, to initialize the
         * lockdep hash:
         */
        lockdep_init();
……

系统从start_kernel()函数开始启动。所以我们要把printk()添加到这个函数里 继续阅读

CentOS5安装配置OpenVZ

CentOS5安装配置OpenVZ的过程,网上的教程大多都有问题,所以这里还是亲自记录一下吧。系统环境为CentOS 5.9 64bit

请linuxde点net转载本博客文章的时候加上链接http://www.zhukun.net/archives/6658/

1,事前准备

将系统内核升级到2.6.18.308.8.2.el5以上,否则不受支持
# yum install kernel.x86_64

调整内核参数
# vi /etc/sysctl.conf
...
net.ipv4.ip_forward = 1
kernel.sysrq = 1
...

关闭selinux
# vi /etc/sysconfig/selinux
...
SELINUX=disabled
...

2,安装OpenVZ 继续阅读

Linux内核调拭之printk用法

内核通过 printk() 输出相关信息,在调用 printk() 函数时必须要指定日志级别。

在 include/linux/kernel.h 中定义了如下几个日志级别

#define	KERN_EMERG	"<0>"	/* 系统崩溃 */
#define	KERN_ALERT	"<1>"	/* 必须紧急处理 */
#define	KERN_CRIT	"<2>"	/* 临界条件,严重的硬软件错误 */
#define	KERN_ERR	"<3>"	/* 报告错误 */
#define	KERN_WARNING	"<4>"	/* 警告 */
#define	KERN_NOTICE	"<5>"	/* 普通但还是须注意 */
#define	KERN_INFO	"<6>"	/* 信息 */
#define	KERN_DEBUG	"<7>"	/* 调试信息 */

这里也可以看出数值越小,其紧急和严重程度就越高。

printk()用法

printk(<2> "Hello, world!\n");          /* 直接用数字指定日志级别,用尖括号括起来 */
printk(KERN_ALERT "Hello, world!\n");   /* 也可以这么用 */

继续阅读

Linux grep命令用法

一直以为grep只能进行单个文件的筛选,今天才发现,它可以进行多个文件的筛选。这个功能真是太强大了。还是记录一下吧。

假设我要找一个start_kernel函数,但我不知道此函数在哪个文件里,于是可以用如下命令:

grep -wrI "start_kernel" ./*

以下是一些其它的用法,也记录一下,算是巩固吧

grep命令主要参数:

-c:只输出匹配行的计数。
-I:不处理二进制文件
-i:不区分大小写(只适用于单字符)。
-r:递归处理目录下的所有文件。
-h:查询多文件时不显示文件名。
-l:查询多文件时只输出包含匹配字符的文件名。
-n:显示匹配行及 行号。
-s:不显示不存在或无匹配文本的错误信息。
-v:显示不包含匹配文本的所有行。
-w:包含正则表达式。

继续阅读

请linuxde点net转载本博客文章的时候加上链接

请linuxde点net转载本博客文章的时候加上链接,谢谢!

您不声不响的转走了我的文章,也不送我一个返回的链接,您觉得好意思吗?

我也是湖北人,咱湖北人不能干这种事,对吧。

您的网站要是缺少文章,可以随便拿,但是希望你注明一下文章来源!

我们都是Linux业者,搞IT的人,都是善良的,你说呢?

将驱动程序添加到Linux内核

一,概述
在linux内核中增加程序需要完成以下三项工作:
1.将编写的源代码复制到Linux内核源代码的相应目录
2.在目录的Kconfig文件中增加新源代码对应项目的编译配置选项
3.在目录的Makefile文件中增加对新源代码的编译条目

二,实例
1,把驱动代码usbtmc(文件夹)复制到/usr/src/linux-headers-2.6.32-31-generic/drivers/char下。
注意:
(1),设备驱动程序存放在内核源码树根目录drivers/的子目录下,在其内部,设备驱动文件进一步按照类别,类型等有序地组织起来。
a,字符设备存在于drivers/char/目录下
b,块设备存放在drivers/block/目录下
c,USB设备则存放在drivers/usb/目录下。
(2),此处的文件组织规则并非绝对不变,例如:USB设备也属于字符设备,也可以存放在drivers/usb/目录下。
(3),例如我们把驱动程序usbtmc(文件夹)存放在drivers/char/目录下,那么你要注意,在该目录下同时会存在大量的C源代码文件和许多其他目录。所有对于仅仅只有一两个源文件的设备驱动程序,可以直接存放在该目录下,但如果驱动程序包含许多源文件和其他辅助文件,那么可以创建一个新子目录。 继续阅读