Articles of 内存

内存通道

问题(背景): 我的目标是一台拥有四个内存通道和一个pcie卡的机器,我想尽可能快地传输数据。 考虑到卡在理论上可以每路传输大约8GB / s(7.88GB / s),这将导致大约15.8GB / s的吞吐量。 看这个,我知道我的最大内存传输速率是12.8GB /秒。 即使不考虑实际安装的内存,显然PCIe吞吐量也会超过一个内存通道的function。 为了避免这种情况,我想确保stream向设备的内存块I在与我收到的信道不同的信道上结束。 题 是否有可能在Linux内核的特定通道上分配内存,如果是这样的话,将使用什么接口? 是否有无法获得有关物理内存映射到不同渠道(哪些地址范围/页框在哪个渠道)的信息? 有没有一个接口来请求一个页面被移动到/分配在一个特定的框架? 如何确保页面在被换出/重新定位前被固定? (假设我必须做magic_allocate_page_on_channel(); get_user_pages(…)我有一个短暂的时间,页面可以(理论上)再次交换出来,并可能通过get_user_pages交换到不同的帧)

Linux内核'保留'内存

我正在尝试为低内存系统(16MB内存)编译内核(3.14,arm64 arch)。 我设法closures了所有我不需要的function,基本上没有设备,没有fs,没有模块,没有ZONE_DMA,一个非常非常基本的内核。 但是,当我启动内核时,我看到: 内存:860K / 16384K可用(789K内核代码,67K rwdata,56K数据,64K初始化,38K bss,15524K保留) 这是什么保留的内存? 我怎样才能减less这个? 储备吃了很多我的RAM,只留下860K可用 提前致谢!

在Linux中计算内存区域的大小

我将不胜感激,如果有人可以帮助我做一些计算基于以下输出: init_memory_mapping: 0000000000000000-0000000037bfe000 0000000000 – 0000200000 page 4k 0000200000 – 0037a00000 page 2M 0037a00000 – 0037bfe000 page 4k kernel direct mapping tables up to 0x37bfdfff @ [mem 0x009fa000-0x009fffff] RAMDISK: 7d11f000 – 7fff0000 Allocated new RAMDISK: 34d2d000 – 37bfd661 Move RAMDISK from 000000007d11f000 – 000000007ffef660 to 34d2d000 – 37bfd660 ACPI: RSDP 000f9aa0 00014 (v00 ACPIAM) ACPI: […]

进程使用的实际物理RAM

如何确定某个进程使用的实际物理RAM? 我可以查看/proc/PID/status VmRSS (或top的RES列)。 但是,对于使用同一个文件支持的多个映射的进程,这个数字是不正确的。 例如,下面的一段代码将几个区域映射到一个小的物理内存窗口中。 size_t window_size = …; // eg 128 MiB size_t total_size = …; // eg 4 TiB char path[] = "/dev/shm/window-XXXXXX"; int fd = mkstemp(path); ftruncate(fd, (off_t)window_size) void *data = mmap(NULL, total_size, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_NORESERVE, -1, 0); for(ptrdiff_t offset = 0; offset < (ptrdiff_t)total_size; offset += window_size) { mmap( (void *)( […]

ARM Linux内存性能问题

我一直在寻找分配硬件可以写入的DMA缓冲区的方法,但是可以从CPU读取caching。 我开始使用Linux命令行选项mem = 896来为DMA缓冲区保留最后的128 MB RAM(是的,这是过度的)。 然后在我写的一个驱动程序中,我做了以下操作: void *srcBuf = NULL; void *dstBuf = NULL; dma_declare_coherent_memory(&gDev, BUFFER_ADDR, BUFFER_ADDR, 128*1024*1024, DMA_MEMORY_MAP); srcBuf = dma_alloc_coherent(&gDev, 10*1024*1024, &dmaSrcAddr, GFP_DMA); dstBuf = dma_alloc_coherent(&gDev, 10*1024*1024, &dmaDstAddr, GFP_DMA); 这在BUFFER_ADDR(物理RAM的末端)正确分配128 MB,然后从该区域获得两个10 MB缓冲区。 然后我做一些简单的memset,memcpy代码来testing带宽: start = ktime_get(); memset(srcBuf, 0x55, BUFFER_SIZE); stop = ktime_get(); printPerformance(start.tv64, stop.tv64, "Write performance to memory"); start = ktime_get(); memcpy(dstBuf, […]

GDB所做的核心转储包含了什么内容?

很明显,GDB可以通过它的包装器生成一个进程的核心转储,但是不清楚它包含了什么,并且很难find一个进程,因为不同的消息来源说完全不同的东西。 正因为如此,我有以下问题: 它是否包含整个过程的虚拟内存? 如果没有,它是什么部分? 所有可写的区域或堆栈只或(正如其名称所暗示的)一些重要部分或什么? 是否有可能通过GDB生成一个完整的进程内存的核心文件? 如果是这样,怎么样? 根据进程的内存映射和通过gcore命令自动生成的文件,通过保存和连接来自所有区域的内存生成的“dump”会有什么区别? 一个进程将某些数据写入RAM中。 我可以确定数据将被(总是)访问并保存在使用gcore命令生成的核心文件中吗? 如果没有,为什么? 它依赖于什么?

提升mmap性能与原生内存映射

我将编写一个基准testing工具来testing磁盘系统的IOPS和带宽的混合,因此我将转向为IO提供文件备份的内存映射。 由于该工具将需要在POSIX和WinNT平台上,我不能只使用普通的旧的映射。 也从我的理解你不得不疯狂的Linux内核整个文件将被访问顺序? 这使我提升内存映射。 在Windows,Linux和Max OS X上使用类似的质量驱动程序的Boost内存映射可能会给类似的硬件带来类似的性能吗? 有没有人testing过跨系统的Boost mmap?

会影响Java内存使用的Linuxconfiguration?

背景: 我有一组java开发人员,作为我的webapp的一部分。 我在Ubuntu 10.10本地开发,并部署到Ubuntu 10.04LTS服务器(媒体寺(实例))。 他们都运行相同的JVM: Sun JVM 1.6.0_22-b04 。 作为初始化脚本的一部分,每个工人都以显式的Xmx , Xms和XX:MaxPermGen设置启动。 然而,本地所有10名员工使用250MB,而在服务器上,他们使用超过2.7GB。 我不知道如何开始追踪。 我认为Ubuntu(因此,内核)版本可能会有所作为,但我尝试了一个旧的10.04虚拟机,它的行为如预期。 我注意到,机器似乎没有使用内存缓冲区或caching(根据htop ),这似乎有点奇怪,但也许正常的服务器? (编辑)一些信息: (server) root@devel:/app/axir/target# uname -a Linux devel 2.6.18-028stab069.5 #1 SMP Tue May 18 17:26:16 MSD 2010 x86_64 GNU/Linux (local) wiktor@beastie:~$ uname -a Linux beastie 2.6.35-25-generic #44-Ubuntu SMP Fri Jan 21 17:40:44 UTC 2011 x86_64 GNU/Linux (编辑)比较PS输出:( ps […]

我怎么知道我的.so库的脚印?

在embedded式中,我们经常听低字库等字。 所以我怎么知道我的library.so或library.a文件的足迹? 我如何计算 是否与该库的内存大小相同?

其他进程的do_mmap_pgoff

在Linux内核系统调用中,我想以类似于从用户模式调用mmap方式映射内存区域。 如果我想映射当前进程的区域,我可以简单地使用do_mmap_pgoff 。 但是,我想在内核模式下运行时在不同的进程中映射区域。 do_mmap_pgoff假定/知道它正在映射当前进程,并且不允许其他任何事情。 我正在计划做的是复制do_mmap_pgoff以获取额外的参数,指定我想要映射的任何进程的task_struct和mm_struct。 然而,这是非常不可取的,因为我必须手动遍历内核源代码中的许多函数,并基本上重复这些函数,以使它们不再假定它们正在代表current正在进行的工作。 在内核模式下运行时,是否有更好的方式映射内存中的内存?