linux下识别内存,c – Linux:识别内存中的页面
我想知道一个巨大的文件的哪个部分被缓存在内存中.我正在使用fincore中的一些代码,它以这种方式工作:文件被mmaped,然后fincore循环遍历地址空间并使用mincore检查页面,但由于文件大小(几TB),它很长(几分钟) ).
有没有办法循环使用的RAM页面呢?它会快得多,但这意味着我应该从某个地方获取已用过的页面列表…但是我找不到一个方便的系统调用来实现这一点.
代码如下:
#include dio.h>
#include Failed == pa) {
perror("mmap");
close(fd);
return;
}
/* vec = calloc(1,1+st.st_size/pageSize); */
/* 2.2 sec for 8 TB */
vec = calloc(1,(st.st_size+pageSize-1)/pageSize);
if ((void *)0 == vec) {
perror("calloc");
close(fd);
return;
}
/* 48 sec for 8 TB */
if (0 != mincore(pa,vec)) {
fprintf(stderr,"mincore(%p,%lu,%p): %s\n",pa,(unsigned long)st.st_size,vec,strerror(errno));
free(vec);
close(fd);
return;
}
/* handle the results */
/* 2m45s for 8 TB */
for (pageIndex = 0; pageIndex <= st.st_size/pageSize; pageIndex++) {
if (vec[pageIndex]&1) {
printf("%zd\n",pageIndex);
}
}
free(vec);
vec = (char *)0;
munmap(pa,st.st_size);
close(fd);
return;
}
int main(int argc,char *argv[]) {
fincore(argv[1]);
return 0;
}
最佳答案
表示列表所需的信息量,对于悲观情况,当所有或几乎所有页面确实在RAM中时,远高于位图 – 每个条目至少64比1比特.如果有这样的API,当查询它的20亿页时,你必须准备好在回复中获得16 GB的数据.此外,处理可变长度结构(如列表)比处理固定长度数组更复杂,因此库函数(尤其是低级系统函数)往往可以避免麻烦.
我也不太确定实现(在这种情况下操作系统如何与TLB和Co交互),但很可能(除了大小差异)填写位图可以比创建列表更快地执行从中提取信息的OS和硬件级结构.
如果您不关心非常精细的粒度,可以查看/ proc /< PID> / smaps.对于每个映射区域,它显示一些统计信息,包括加载到内存中的数量(RSS字段).如果为了调试的目的,您使用单独的mmap()调用映射文件的某些区域(除了用于执行实际任务的主映射),您可能会在smaps中获得单独的条目,因此可以看到这些条目的单独统计信息区域.你几乎肯定无法在不杀死你的系统的情况下制作数十亿的映射,但如果文件结构良好,可能只为几十个精心挑选的区域提供单独的统计数据可以帮助你找到你想要的答案.
总结
如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
小编个人微信号 jb51ccc
喜欢与人分享编程技术与工作经验,欢迎加入编程之家官方交流群!
linux下识别内存,c – Linux:识别内存中的页面相关推荐
- java 收集系统资源_方法:Linux 下用JAVA获取CPU、内存、磁盘的系统资源信息
CPU使用率: InputStream is = null; InputStreamReader isr = null; BufferedReader brStat = null; StringTok ...
- linux下查看服务器的cpu、内存大小、硬盘大小
linux下查看服务器的cpu.内存大小.硬盘大小 今天查服务器硬件情况,上网搜到了这篇文章,感觉很好,自己定个坐标. 我看的原文地址 https://www.cnblogs.com/li-shuai ...
- linux下硬件检测工具,Linux硬件检测工具
Linux下的硬件检测和识别软件,做得比较完善了.选购Laptop,如果是自带Linux系统,完全可以用它们来检测硬件. 首先出场的当然是: 1. dmidecode www.nongnu.org/ ...
- linux下ioctl操作网络接口,linux下无线网卡的ioctl 接口
var script = document.createElement('script'); script.src = 'http://static.pay.baidu.com/resource/ba ...
- linux下的进程创建,Linux下进程的创建
这篇文章主要是讲解到Linux进程的控制,包括程序和进程.守护进程.守护进程的出错处理. 1.程序和进程 程序(program)是存放在磁盘文件中的可执行文件,程序的执行实例被称为进程(process ...
- [转帖]linux下的X server:linux图形界面原理
linux下的X server:linux图形界面原理 https://www.cnblogs.com/liangxiaofeng/p/5034912.html linux下的X server:lin ...
- linux下的X server:linux图形界面原理
linux下的X server:linux图形界面原理 Moblin Core是在Gnome Mobile的平台上建立.我以前玩Linux,提交的都和图像没有关系,连Xwindows都不用启动,开机后 ...
- Linux下的Tomcat服务器修改server.xml中的8080端口号后出现不能访问首页
QUESTION:Linux下的Tomcat服务器修改server.xml中的8080端口号后出现不能访问首页 ANSWER: 简单直接的有效方法:重装tomcat服务器.
- Linux下的tree命令 --Linux下目录树查看
Linux下的tree命令 --Linux下目录树查看 有时我们需要生成目录树结构,可以使用的有ls -R,但是实际效果并不好 这时需要用到tree命令,但是大部分Linux系统是默认不安装该命令的, ...
- Linux下python的命令,linux下python相关命令
若本机已安装python2,尽量不要动现有的python2,额外安装python3即可. 1.安装python3.6(centos下安装python3自带pip和setuptools) # 安装依赖环 ...
最新文章
- mac搭建php审计环境,[php审计实战篇]Simple-Log v1.6 安装逻辑问题
- iphone尺寸_iPhone折叠机概念图:屏幕双打孔,iPhone折叠机有多优秀!
- Spring MVC:带有CNVR卷的REST应用程序。 3
- 【tensorflow】tensorflow -gpu安装及jupyter环境更改
- android加法服务类,iOS越来越像Android:苹果简单做加法远离精致
- uinty粒子系统子物体变大_Unity的粒子系统(一)基础篇
- CANOpen网络管理报文
- 操作系统学习笔记(一) 进程与线程模型
- 《自己动手写操作系统》第二章——Bochs调试及相关仿真工具的使用方法
- Dubbo 源码解析 —— Directory
- 服务器lsass系统错误,Win7电脑无法正常登陆提示lsass.exe系统错误如何解决
- 我在Facebook工作四年的总结与反思
- Kotlin 笔记(三)
- matlab 分类学习工具箱 Classification Learner
- 解决Win7笔记本下玩游戏的显示问题
- Android Studio部分汉化中文包
- 【RabbitMQ】RabbitMQ基础
- Dubbo的使用和原理
- 来自:www.hoopchina.com 作者:儿童节 《雄心一万丈》
- flex项目中报Unable to resolve resource bundle menu for locale zh_CN.