Articles of pipe理员

在Linux中有没有一个MDB(模块化debugging器)solaris相当于?

任何人都可以让我知道,如果有一个相当于Linux的mdb(模块化debugging器,Solaris)的工具。 我刚刚得到了Linux的Libumem端口。 现在,如果我可以在Linux中findMDB的等价物,那么在代码中find泄漏的位置是非常重要的。

vmalloc – 更新页面错误上另一个进程的页表

我正在阅读Mel Gorman的“了解Linux虚拟内存pipe理器”一书,并且遇到了一个问题,即为什么进程的页表由于访问vmalloc()编辑区而得到更新。 以下是他用来解释这个过程的图表的链接: Vmalloc由一个进程完成,另一个进程访问vmalloc()编辑区 在这种情况下得到更新的页表是主引用内核页表,而不是过程A的页表。我的问题是为什么进程B甚至访问进程A的区域vmalloc()。什么是现实世界一个进程将访问另一个进程分配的内存区域的情况? 这个问题基本归结为:如果进程A分配了虚拟内存,它将在某个时刻开始写入由该虚拟内存支持的物理内存。 为什么另一个进程想访问这块内存呢?

mallinfo有64位的替代品吗?

在Linux上,我们有一个名为mallinfo的 (GNU C库)函数,它给你一些与内存分配有关的数字: struct mallinfo { int arena; /* Non-mmapped space allocated (bytes) */ int ordblks; /* Number of free chunks */ int smblks; /* Number of free fastbin blocks */ int hblks; /* Number of mmapped regions */ int hblkhd; /* Space allocated in mmapped regions (bytes) */ int usmblks; /* Maximum total allocated […]

c – Linuxpipe道3个命令不起作用

我已经写了这个代码pipe道2命令: // ls -l | tail -n 2 int pfd[2]; pid_t pid; char *cmd1[] = {"ls", "-l", 0}; char *cmd2[] = {"tail", "-n", "2", 0}; pipe(pfd); pid = fork(); if (pid == 0) // child { dup2(pfd[1], STDOUT_FILENO); close(pfd[0]); /* the child does not need this end of the pipe */ execvp(cmd1[0], cmd1); _exit(0); } […]

多次使用krealloc与分配足够大的空间一次

当编写Linux内核的扩展(例如添加一个新的系统调用)时,我需要保持其数据大小可以在运行时dynamic更改。 我可以采取两种替代方法。 首先是使用kmalloc分配一个初始空间,并在必要时使用krealloc重新分配。 第二个是用kmalloc分配一个足够大的空间,而不必调整它的大小。 你可以假设我对数据大小有一个上限,“ 足够大 ”是一个明确定义的值,比如说N。 我想知道在内核空间编码时是否应该采取哪种方法。 即使在用户空间编码时,通过多次重新分配和分配大空间的时间开销之间的折衷也是显而易见的。 但是我的问题是否有一个build议的路要走。 如果没有,那要看具体情况,多大的N值应该考虑太多的空间,或者认为krealloc的呼叫频率太多,导致select另一种方法?

常驻记忆使用的概述/历史

我有一个相当复杂的程序(Python与SWIG的C + +代码,长时间运行的服务器),显示不断增长的常驻内存使用情况。 我一直在用通常的漏洞工具(valgrind,Pythons gc模块等)进行挖掘,但迄今为止无济于事。 我有点担心,实际的问题是Python和/或libc托pipe内存中的内存碎片。 无论如何,我的问题现在更具体:有没有一种工具来可视化驻留内存使用情况,并理想地显示它随着时间的推移如何发展? 我认为原始数据是在/ proc / $ PID / smaps中,但是我希望有一些工具可以显示mmap的文件和匿名mmap的内存的比较, (字面上)看什么是变化更容易。 我找不到任何东西。 有没有人知道一个工具,以直观的方式在空间和时间上描绘特定过程的内存映射(内存和数量types)? 更新:我find了“pmap”工具,但我系统上的版本似乎没有处理RSS,也没有提供合并所有映射文件的大小的选项。 映射“anon”区域。 我结束了黑客一个脚本parsing/ proc / $ PID / smaps每两分钟,而原来的程序运行,并打印这样的行: 12:00:28 {'_TOTAL': 729.20703125, 'file': 53.609375, 'heap': 22.08984375, 'anon': 653.5, 'stack': 0.0078125} … 15:42:47 {'_TOTAL': 940.16015625, 'file': 53.484375, 'heap': 22.2109375, 'anon': 864.45703125, 'stack': 0.0078125} 没有很好的图表,但运行几个小时后,我认为现在是一个安全的赌注,我必须仔细看看'anon'内存段:-) 更新:最新版本的valgrind通过使用–pages-as-heap=yes使其内存分析器(“ –pages-as-heap=yes ”)支持页面级别分析。 好极了! 通过massif运行我的程序几个小时,然后将生成的文件送入Massif […]

在linux中不断地将数据从一个FIFOpipe道插入到mysql表数据中

我想从一个FIFOpipe道插入数据到一个MySQL表,现在对我来说,这是可能的,直到FIFOpipe道进程被杀害, 命令 : $>mkfifo /path/to/pipe $>sudo chmod 666 /path/to/pipe $>find \ -sl > /path/to/pipe & msql db1 -e"LOAD DATA INFILE '/path/to/pipe' INTO TABLE T1 " & 插入fifopipe道中的数据直到mysql进程被kill进程closures。 是否可以插入数据而不杀死fifopipe道数据的进程? 谢谢!!

在Linux设备驱动程序中使用do_mmap()

我们现在工作的设备需要有一个用户空间的虚拟内存地址,我们尝试使用do_mmap()如下: *uvaddr = (void *)do_mmap(0, 0, size, PROT_READ|PROT_WRITE, MAP_ANONYMOUS, 0); 但是我们有错误 Unable to handle kernel paging request for data at ad8 在设备驱动程序中使用“do_mmap()”可以吗? 如果没有,有没有正确的方法来做到这一点?

打开命名pipe道时,FileInputStream在构造函数上阻塞

使用Fedora 12: mkfifo pipe创build一个pipe道。 当我使用下面的代码试图打开一个inputstream对命名的pipe道它阻塞FileInputStream的构造函数,除非我创build一个编写器pipe道,如打开另一个terminal,并运行: tee pipe public static void main(String[] args){ try { File pipe = new File("/tmp/pipes_debugging/pipeToJava"); System.out.println( pipe.canRead() ); FileInputStream fis = new FileInputStream(pipe); System.out.println("exiting."); } catch (Exception e) { e.printStackTrace(); } } 输出: true <blocks – thread trace shown below> Thread [main] (Suspended) FileInputStream.open(String) line: not available [native method] FileInputStream.<init>(File) line: […]

将fmemopen ed文件描述符设置为subprocess的标准input

我在Linux中有一个fmemopen文件描述符(指向父级的缓冲区),我希望能够在C中将此文件描述符设置为subprocess的标准input(我无权访问代码) 这可能吗? 如果是的话,我该怎么做呢? 如果可能的话,我想避免写入磁盘。