存档

‘应用程序’ 分类的存档

Linux direct io使用

2012年5月16日 6 条评论 23,184 次浏览

在linux 2.6内核上使用direct... [阅读更多]

mongodb的使用

2012年5月8日 没有评论 3,271 次浏览

这是之前初学mongodb时写在CU的博客上的文章,现在转过来,呵呵。 直接从官网下载了1.2.1的windows32版本: http://downloads.mongodb.org/win32/mongodb-win32-i386-1.2.1.zip 解压之后写了个runserver.bat文件,内容如下: E:\lenkydatasource\mongodb\1.2.1\mongodb-win32-i386-1.2.1\bin\mongod.exe... [阅读更多]

分类: *nix技术, 应用程序 标签:

应用程序与物理内存之间的关系

2012年4月3日 没有评论 7,071 次浏览

应用程序与物理内存本没有直接关系,因为应用程序看到的都是虚拟内存,至于这块虚拟内存到底映射哪块物理内存,应用程序并不关心,也没有能力关心。不过既然文章标题叫做“应用程序与物理内存之间的关系”就说明应用程序与物理内存之间虽然没有直接关系,但有间接关系;我们知道应用程序能够在运行时主动申请、释放的内存主要有Heap(malloc/free/…)、Mapping(mmap/munmap/…),这里就以Heap为例(因为前面曾详细分析过应用程序里的堆内存管理),看它们之间有如何微妙的间接关系。 当应用程序malloc一块内存时,如果应用程序自己管理的堆内存还有缓冲(这个不难理解,对于应用程序的内存申请,内核都比较大方,即使应用程序只申请4字节的内存,内核也会给它4KB,假设内存页大小为4KB),那么就直接使用了,无需再向内核讨要;否则的话,只有调用sbrk()或mmap()向内核讨要新的内存了,dlmalloc解析连载完整word文档里已经描述过,应用程序优先调用sbrk()以扩展当前Heap的连续空间,如果无法扩展(比如此时,前面待延伸的内存地址空间恰好被某个文件映射占用了),那就只有mmap()申请另外的一段地址空间。 以sbrk()为例,syscall到内核里对应的是do_brk()函数,带有两个参数,第一个为内存地址addr,第二个为增减的长度len,可正(比如:malloc)可负(比如:free),这个函数所做的工作只有一个,那就是根据进程请求情况进行判断并调整进程的vma(或增大或减小或拆分或合并等)并返回给进程对应的地址空间,当然这是成功的情况,如果vma判断调整失败,那就直接返回ENOMEM或其它错误码。 既然应用程序进行内存申请时没和物理内存扯上关系,那么当应用程序实际进行内存访问时,总该和物理内存扯上关系了吧?的确也是如此。当应用程序访问(读写)一个并没有对应物理地址的逻辑地址时,CPU就会产生一个中断号为14的中断,该中断将被内核捕获。查看源码的话,在这里: /*... [阅读更多]

Linux X86-64 进程内存空间布局(续)

2012年4月3日 没有评论 6,716 次浏览

在很久很久以前,我曾详细的分析过应用程序里的内存管理,也就是应用程序里的内存分配与释放过程,具体可以参考:dlmalloc解析连载完整word文档,这是站在应用程序角度来看的内存管理视图,更具体点说只是应用程序对自己所用到的堆空间内存的管理视图。 在不久之前,我又提到过Linux... [阅读更多]

oProfile的安装与使用

2012年3月26日 6 条评论 14,618 次浏览

0.引言 基于DPDK的发包工具的性能今天已经达到双向1900Wpps了,比昨天又高了200Wpps,正是得益于oProfile检测与调优的结果,而且今天还只是很简单的用了一下(类似于下面的示例),跟踪出对几个结构体字段的访问比较缓慢,于是对结构体字段进行了仔细的顺序调整与Cache对齐(之前急于功能实现,没顾及这些字段的排布),结果性能马上飙升了200Wpps,开心死我了。后天(明天外出办理其它事情)到公司再利用oProfile细细跟踪一下,特别是cache命中、... [阅读更多]

Linux下应用程序内测量时间的各种方法

2012年3月17日 没有评论 11,639 次浏览

在linux下统计时间有很多种方法,在内核代码里,最简单方便的方法自然是利用全局变量jiffies,这个字段记录了自系统启动以来产生的节拍总数,而系统每1秒钟将产生HZ次节拍,HZ是个常数,在内核2.6版本,编译时可选择,100/250/300/1000,可以查看内核编译选项: #... [阅读更多]

cpu affinity

2012年3月11日 3 条评论 10,457 次浏览

cpu affinity,即cpu亲和性,简单点说就是让某一段代码/数据尽量在同一个或几个cpu核心上长时间运行/计算的机制。为什么需要这样的机制?之前说过,最直观的好处就是能够大大提高cpu... [阅读更多]