
Linux
文章平均质量分 50
bourne1209
压力会成为一种美德。
展开
-
不再为安装软件而烦恼[优化版]-fedora下北邮校内yum的设置
刚学linux之初,大家安装软件,都会遇到软件包依赖的问题,当安装A时,提示缺少B,好不容易找到B,又提示缺少C和D。 那样的日子可不好过~~~ 给初学linux的兄弟姐妹介绍一个好工具:yum《yum.conf文件详解以及yum如何增加北邮源》【简介】yum是一个为rpm系统设转载 2011-07-24 03:30:05 · 830 阅读 · 0 评论 -
两个可用来计算时间的工具小函数
double timems(struct timeval* start, struct timeval* end){ return ((end->tv_sec - start->tv_sec)*1000.0) + ((end->tv_usec - start->tv_usec)/1000.0);}double timeus(struct timeval* start, struct原创 2012-10-23 23:18:29 · 575 阅读 · 0 评论 -
打印函数调用栈信息
01. 02.void XXX_debug_print_trace(void) 03.{ 04. int j, nptrs; 05. void *buffer[100]; 06. char **strings; 07. 08. nptrs = backtrace(buffer, 100); 09. 10. strings = bac原创 2012-10-23 23:11:26 · 574 阅读 · 0 评论 -
linux内核中的特殊用法
__attribute__对于关键字__attribute__,在标准和C语言中是没有的。它是GCC中对C语言的一个扩展用法。可以用来设置一个函数或数据结构定义的属性,对一个函数设置属性的主要目的是使编译器对函数进行可能的优化。可以在同一个定义中,设置多个属性,各个属性用逗号分开即可。如下面的定义就是告诉编译器,它不改变全局变量和该函数不能扩展为内联函数。Int getlim() __原创 2012-10-23 23:36:59 · 687 阅读 · 0 评论 -
epoll+eventfd+libaio实现高效异步IO
转自:http://rdc.taobao.com/blog/cs/?p=1583原创 2012-11-05 00:21:41 · 2531 阅读 · 1 评论 -
通过内核inotify机制向内核程序传输命令
/*debug.h*/#ifndef DEBUG_H_#define DEBUG_H_ #define MAX_EPOLL_FD (1024) typedef struct debug_file{ int fd; char *name; int epoll_fd; int inotify_fd;}debug_file_t; #endif原创 2012-10-25 00:40:23 · 616 阅读 · 0 评论 -
通过增加打印日志调试程序
#define TRACE_BUFF_MAX (4096) #define TRACE_TIME_BUFF_MAX (4096) void trace_print(char *format) { time_t now; struct tm *lt; int written; va_list argument; char bu原创 2012-10-23 22:54:22 · 591 阅读 · 0 评论 -
关于页缓存的几点总结
页缓存(Page Cache),是用来保存磁盘中数据的内存页,主要是为了提高系统IO性能而采用的缓存机制。具体来说,页缓存是:1)以页为单位的文件视图2)属于某文件的缓存页以基树形式组织3)可以从文件inode的address_space对象获取树根。叶子节点对应文件页,从左到右排列,根据index(文件内的页索引)在基树中查找4)是否要预读。 页缓存的mpage机制:原创 2012-10-26 00:17:07 · 825 阅读 · 0 评论 -
不要使用dd测试磁盘性能
dd是LINUX下一个好用的磁盘管理命令,也可以实现对设备的读写。但是,在使得dd时,也有这样几个问题需要考虑:1)dd读操作的缓存区一般是4KB/8KB2)dd读操作是同步读,如果是对块设备进行读,由于不经过文件系统,不过有请求合并。即对一个1MB的读,会有256个4KB的读请求3)先读后写4)同步的读请求在负载重时可能阻塞队列,关闭设备时可能要等一段时间。因为缓存中的数据要原创 2012-10-26 00:00:45 · 1669 阅读 · 0 评论 -
某XXFS分布式文件系统设计概述
一、为应对海量数据,系统架构发生变迁 1. 传统系统架构:Server + SAN 主导厂商:EMC/NetAPP/Oracle/IBM 特点:使用SAN存储(FC),价格昂贵,但速度快,响应时间10ms 应用接口:提供通用POSIX/SQL接口 2. 当前系统架构:IP + Cluster 主导厂商:Go原创 2012-11-05 00:14:52 · 991 阅读 · 0 评论 -
LVM2的理解
LVM2,是LINUX的卷管理工具。它把若干磁盘组成存储池,然后从存储池中创建逻辑卷,向用户提供逻辑块设备。可以说,它代替内核成为了磁盘的管理者,维护物理磁盘和逻辑块设备之间的映射关系,屏蔽了不同物理的差异,更易于做磁盘管理。 基本原理:基于linux 2.6内核后引入的Device Mapper机制实现。但它没有使用Device Mapper在用户态库提供的库,而是在用户态实原创 2012-11-05 00:34:52 · 896 阅读 · 0 评论 -
分布式存储系统sheepdog
Sheepdog,是由NTT的3名日本研究员开发的开源项目,主要用来为虚拟机提供块设备。其架构如下: 下面,我们将从架构、模块等几个方面来介绍下: 一、架构图如上图:采用无中心节点的全对称架构,无单点故障,存储容量和性能可线性扩展;新增节点通过简单配置可自动加入(IP:PORT),数据自动实现负载均衡;节点故障时,数据可自动恢复;直接支持QE原创 2012-11-06 20:57:47 · 17478 阅读 · 1 评论 -
虚拟化总论
一、虚拟化技术介绍虚拟化技术是对物理资源进行抽象的过程,包括将多个物理资源抽象为一个资源池,或者将一个物理资源抽象成多个虚拟资源。 谈到虚拟化,虚拟机是避免不了的。这里,我们就来了解下虚拟机的概念。对虚拟机来说,虚拟化前:硬件和OS完全独立;而虚拟化后,硬件和OS紧耦合,将硬件虚拟化成一个资源池,虚拟机从资源池中分配资源。从这里可以看出,虚拟机具有这样几个特性:1. 分区原创 2012-11-05 01:09:09 · 1467 阅读 · 0 评论 -
pdflush刷盘时机
一般,写缓冲占内存10%时,pdflush开始刷盘,运行间隔5s,30s的数据算旧。原创 2012-11-06 23:45:46 · 1147 阅读 · 1 评论 -
IO调度选择
I/O 调度算法在各个进程竞争磁盘I/O的时候担当了裁判的角色。它要求对请求的次序和时机做最优化的处理,以求得尽可能最好的整体I/O性能。主要涉及到两点:请求的合并(合并相邻请求以减少磁盘寻道次数)和电梯调度 (使磁头沿一个方向移动,避免来回移动) 下面列出4种调度算法:CFQ (Completely Fair Queuing 完全公平的排队)(elevator=cfq): 这是默原创 2012-09-27 00:28:40 · 1138 阅读 · 0 评论 -
IA-32存储器的地址映射过程
由IA-32架构的内存保护模式和CPU决定了地址映射的过程:逻辑地址->线性地址->物理地址 逻辑地址到线性地址:1. 根据指令性质获取相应类型的段寄存器2. 根据段寄存器中数据在GDTR中获取地址段描述符3. 从地址段描述符中获取地址基址4. (CPU指令决定的)逻辑地址,结合地址基址得到线性地址 线性地址到物理地址:1. 由CR3获取页目录基址2. 由页原创 2012-10-23 23:45:58 · 599 阅读 · 0 评论 -
iSCSI Enterprise Target的架构分析
iSCSI Enterprise Target,简称IET. 是开源的iSCSI Target软件,西方在源码阅读基础上获得,可由http://iscsitarget.sourceforge.net/获取。IET,由用户层模块和内核层模块共同组成,它们之间通过NETLINK机制进行通信。一、用户模块(ietd daemon)它是IET的管理工具,主要功能可描述为:1)用来配原创 2012-06-17 11:00:19 · 2920 阅读 · 1 评论 -
配置好你的vim-《别怕Linux编程》之一
《别怕Linux编程》的第一篇就要讲解vim,因为它是Linux编程的平台。没有它,你的思想无法呈现出来。《配置好你的vim》将涉及到ctags,taglist两个插件。1ctags是一个用于产生代码索引文件的插件,它产生的索引可以帮助我们更快的定位到特定位置。ctags支持很多转载 2011-07-24 03:22:20 · 827 阅读 · 0 评论 -
loop设备及losetup命令介绍
1. loop设备介绍在类 UNIX 系统里,loop 设备是一种伪设备(pseudo-device),或者也可以说是仿真设备。它能使我们像块设备一样访问一个文件。在使用之前,一个 loop 设备必须要和一个文件进行连接。这种结合方式给用户提供了一个替代块特殊文件的接转载 2011-10-19 00:24:46 · 557 阅读 · 0 评论 -
kthread_create和kernel_thread的区别和总结
在看linux驱动代码的时候,经常惠会碰到kthread_create这个函数,google一下,发现很多人在讲二者的区别,但是都在讲源码的区别而已,总结不够,感觉没有说出二者之间的本质区别,自己总结下。一. 源码分析(linux-2.6.39)1. kthread_cr转载 2011-10-19 00:41:02 · 1443 阅读 · 0 评论 -
linux IO子系统和文件系统读写流程
我们含有分析的,是基于2.6.32及其后的内核.我们在linux上总是要保存数据,数据要么保存在文件系统里(如ext3),要么就保存在裸设备里。我们在使用这些数据的时候都是通过文件这个抽象来访问的,操作系统会把我们需要的数据提交给我们,而我们则无需和块设备打交道。从下图,我们可以清除的看到:I/O子系统是个层次很深的系统,数据请求从用户空间最终到达磁盘,经过了复杂的数据流动。对原创 2011-10-27 00:27:07 · 11835 阅读 · 2 评论 -
bdev文件系统
文件系统,是对磁盘数据进行组织和管理的一种机制。可通过装载,以目录和文件的形式向用户层呈现。但,文件和目录其实只是文件系统的前端而已,只是文件系统的用户视图,其本质还在于这样的一个数据结构:inode。那纯粹从inode角度来描述一个文件系统,会是什么情况?伪文件系统,就是这样的一种表示,它不能装载,不可能从用户空间看到,但它不会带来任何的信息损失。看不到,不等于它不存在。伪文件系原创 2011-11-21 00:35:14 · 4056 阅读 · 1 评论 -
Read 系统调用在用户空间中的处理过程
参考http://www.ibm.com/developerworks/cn/linux/l-cn-read/基于2.6.35修改Linux 系统调用(SCI,system call interface)的实现机制实际上是一个多路汇聚以及分解的过程,该汇聚点就是 0x80 中断这个入口点(X86 系统结构)。也就是说,所有系统调用都从用户空间中汇聚到 0x80 中断点,同时保存具体的系统调转载 2011-11-25 00:10:46 · 1946 阅读 · 0 评论 -
直接IO路径分析
直接IO路径下图,是在O_DIRECT打开模式下,对文件进行进行读写的函数调用图。 函数generic_file_aio_read进行IO类型判别,如果是直接IO:对块设备文件,会走blkdev_direct_IO分支,代码如下:清单 1. 函数 blkdev_direct_IO()static ssize_tblkdev_direct_IO(int原创 2011-11-25 01:36:42 · 2709 阅读 · 0 评论 -
IT技术类博客推荐
IT牛人聚合http://www.udpwork.com/item/6469.htmlErlang非业余研究http://blog.yufeng.info/archives/1880#more-1880弯曲评论原创 2011-12-07 00:12:19 · 635 阅读 · 0 评论 -
Page cache和buffer cache的区别与联系
Page cache和buffer cache一直以来是两个比较容易混淆的概念,在网上也有很多人在争辩和猜想这两个cache到底有什么区别,讨论到最后也一直没有一个统一和正确的结论,在我工作的这一段时间,page cache和buffer cache的概念曾经困扰过我,但是仔细分析一下,这两个概念实际上非常的清晰。如果能够了解到这两个cache的本质,那么我们在分析io问题的时候可能会更加得心应手转载 2011-12-08 00:43:00 · 770 阅读 · 0 评论 -
SUSE的几个网站(备用)
http://download.novell.com/Download?buildid=wGqu-GCcLaI~http://software.opensuse.org/121/enFBAA32FB05B3E0C9A871D6AB6188http://libitum.org/opensuse-guide/installation.phphttp://hi.bai原创 2011-12-08 22:35:43 · 1115 阅读 · 0 评论 -
ubuntu+KVM的网址收集
http://forum.ubuntu.org.cn/viewtopic.php?f=65&t=359647&start=0http://blog.lzhaohao.info/archive/install-kvm-ubuntu-1004-guest-os-in-command-line/http://www.techotopia.com/index.php/Installing_an_U原创 2012-01-11 00:44:02 · 521 阅读 · 0 评论 -
Linux-IO-Stack
转载 2012-02-29 00:51:54 · 1910 阅读 · 0 评论 -
io engine
http://www.spinics.net/lists/fio/msg00819.htmln 2011-08-03 22:13, Martin Steigerwald wrote:> Hi!> > In order to understand I/O engines better, I like to summarize what I > think to know at t转载 2012-02-29 00:53:10 · 2540 阅读 · 0 评论 -
loop设备
loop设备是一种伪设备,能使我们像块设备一样访问一个文件。在使用之前,一个Loop设备必须和一个文件进行关联。可以分两步走:1)losetup /dev/loop0 /path/to/file2)mount /dev/loop0 /mnt/test其实上面的两个步骤可以写成一个步骤:mount -o loop /path/to/file /mnt/test原创 2012-06-10 15:38:35 · 839 阅读 · 0 评论 -
编程中一些容易忽视的小错误
1. string赋值char pTmp[32]={'a', 'b'};string strTmp = string(pTmp);要防范pTmp不是C字符串,即不以'\0'结尾2. 调试程序时,当调用到.h文件中的函数时,程序会试图在当前路径下(或者上层include目录等)寻找头文件定义。如果程序恰好是在一台SVR1上编译,在另外一台SVR2上运行(在有测试和运营原创 2013-07-31 18:00:53 · 761 阅读 · 0 评论