Linux:大型 int 数组:mmap 与查找文件?

2024-03-20

假设我有一个数据集,它是存储在 4TB HDD ext4 文件系统上的文件中的 1e12 32 位整数 (4 TB) 数组。

考虑到数据很可能是随机的(或者至少看起来是随机的)。

// pseudo-code
for (long long i = 0; i < (1LL << 40); i++)
   SetFileIntAt(i) = GetRandInt();

此外,考虑到我希望以不可预测的顺序读取各个 int 元素,并且算法无限期地运行(它是持续的)。

// pseudo-code
while (true)
   UseInt(GetFileInt(GetRand(1<<40)));

我们在 Linux x86_64、gcc 上。您可以假设系统有 4GB RAM(即比数据集小 1000 倍)

以下是架构访问的两种方式:

(A) 将文件 mmap 到 4TB 内存块,并以 int 数组的形式访问它

(B) 打开(2) 文件并使用seek(2) 和read(2) 读取整数。

A 和 B 哪个性能更好?为什么?

是否有另一种设计能够提供比 A 或 B 更好的性能?


一方面,您广泛使用内存交换导致轻微的页面错误,对于应用程序来说是透明的。另一方面,你有无数系统调用,具有已知的开销。维基百科页面关于内存映射文件 http://en.wikipedia.org/wiki/Memory-mapped_file对我来说似乎很清楚,它全面地浏览了优点和缺点。

我认为 64 位架构 + 大文件需要内存映射文件方法,至少可以避免应用程序变得复杂;有人告诉我,复杂性往往会导致性能不佳。然而mmap()通常用于顺序访问,但这不是这里的目的。

因为这是纯随机访问,所以两次访问出现在同一个 RAM 加载页面中的可能性很小。一个完整的 4kb 页将从 HDD 交换到 RAM,只是为了 4 字节数据...这对总线来说是无用的加载,并且可能会导致性能不佳。

希望这有帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux:大型 int 数组:mmap 与查找文件? 的相关文章

  • 是否有其他方法可以释放 C 中动态分配的内存 - 不使用 free() 函数?

    我正在为测试而学习 我想知道这些是否等同于 free ptr malloc NULL calloc ptr realloc NULL ptr calloc ptr 0 realloc ptr 0 据我了解 这些都不起作用 因为 free 函
  • 什么是内部类的合成反向引用

    我正在寻找应用程序中的内存泄漏 我正在使用的探查器告诉我寻找这些类型的引用 但我不知道我在寻找什么 有人可以解释一下吗 Thanks Elliott 您可以对 OUTER 类进行合成反向引用 但不能对内部类实例进行合成 e g class
  • Linux shell 脚本:十六进制数字到二进制字符串

    我正在 shell 脚本中寻找一些简单的方法来将十六进制数字转换为 0 和 1 字符的序列 Example 5F gt 01011111 是否有任何命令或简单的方法来完成它 或者我应该为其编写一些开关 echo ibase 16 obase
  • Bash 方法的返回值总是模 256

    我有一个 bash 脚本方法 它返回输入值 然而 返回值始终是模 256 的值 我用 google 搜索了一段时间 发现this http www tldp org LDP abs html exitcodes html文章说它总是以 25
  • 从 TypeScript 运行任何 Linux 终端命令?

    有没有办法直接从 TypeScript 类中执行 Linux 终端命令 这个想法是做类似的事情 let myTerminal new LinuxTerminal let terminalResult myTerminal run sudo
  • sleep 0 有特殊含义吗?

    我看到很多用法sleep 0在我的一个客户项目中 代码看起来像这样 while true sleep 0 end 阅读一些像这样的答案this https stackoverflow com questions 3727420 signif
  • C 程序从连接到系统的 USB 设备读取数据

    我正在尝试从连接到系统 USB 端口的 USB 设备 例如随身碟 获取数据 在这里 我可以打开设备文件并读取一些随机原始数据 但我想获取像 minicom teraterm 这样的数据 请让我知道我可以使用哪些方法和库来成功完成此操作以及如
  • C++中delete和delete[]的区别[重复]

    这个问题在这里已经有答案了 可能的重复 C 中的删除与删除 运算符 https stackoverflow com questions 2425728 delete vs delete operators in c 我写了一个包含两个指针的
  • C 中带有指针的结构的内存开销[重复]

    这个问题在这里已经有答案了 我意识到当我的结构包含指针时 它们会产生内存开销 这里有一个例子 typedef struct int num1 int num2 myStruct1 typedef struct int p int num2
  • 如何查找连接到 AF_INET 套接字的客户端的 UID?

    有什么方法或类似的东西ucred for AF UNIX如果是AF INET插座 TCP在我的例子中 找出连接到我的套接字的客户端的UID 还有 proc net tcp但它显示了UID of the creator插座的而不是连接的cli
  • 归档文件系统或格式

    我正在寻找一种文件类型来存储已退役系统的档案 目前 我们主要使用 tar gz 但从 200GB tar gz 存档中查找并提取几个文件是很麻烦的 因为 tar gz 不支持任何类型的随机访问读取规定 在你明白之前 使用 FUSE 安装 t
  • 没有可用的符号表信息

    我正在测试第三方的库 它崩溃了 当我想查看崩溃的原因时 我的 gdb 告诉我没有可用的调试符号 Program received signal SIGSEGV Segmentation fault Switching to Thread 0
  • Chrome 内存/垃圾收集问题

    我在使用 Chrome 时遇到内存 垃圾收集问题 我正在开发一个照片上传网站 该网站允许我的客户使用 HTML5 和文件 API 拖放照片进行上传 因此这在 IE 中不起作用 它仅适用于 Chrome 和 FF 我还没有在 Safari O
  • 在 Linux 上的 Python 中使用受密码保护的 Excel 工作表

    问题很简单 我每周都会收到一堆受密码保护的 Excel 文件 我必须解析它们并使用 Python 将某些部分写入新文件 我得到了文件的密码 当在 Windows 上完成此操作时 处理起来很简单 我只需导入 win32com 并使用 clie
  • QFileDialog::getSaveFileName 和默认的 selectedFilter

    我有 getSaveFileName 和一些过滤器 我希望当用户打开 保存 对话框时选择其中之一 Qt 文档说明如下 可以通过将 selectedFilter 设置为所需的值来选择默认过滤器 我尝试以下变体 QString selFilte
  • python中的内存错误

    Traceback most recent call last File run 1341144766 1067082874 solution py line 27 in main File run 1341144766 106708287
  • xsel -o 对于 OS X 等效项

    是否有一个等效的解决方案可以在 OS X 中抓取选定的文本 就像适用于 Linux 的 xsel o 一样 只需要当前的选择 这样我就可以在 shell 脚本中使用文本 干杯 埃里克 你也许可以安装xsel在 MacOS 上 更新 根据 A
  • Android 性能:SharedPreferences 的成本

    当我的应用程序启动时 我使用分片首选项中的值填充容器类 这个想法是处理 SharedPreferences 和 PreferenceManager 一次 因为我猜它们很重 这是一个示例 SharedPreferences prefs Pre
  • Android:ANT 构建失败,并显示 google-play-services-lib:“解析为没有项目的 project.properties 文件的路径”

    我正在尝试使用 ANT 构建我的应用程序 但在包含 google play services lib 库项目后 我惨遭失败 Step 1 我在 project properties 文件中设置了对库项目的引用 android library
  • Bash 解析和 shell 扩展

    我对 bash 解析输入和执行扩展的方式感到困惑 对于输入来说 hello world 作为 bash 中的参数传递给显示其输入内容的脚本 我不太确定 Bash 如何解析它 Example var hello world displaywh

随机推荐

  • 在 Java 中寻找 Chromakekey 库 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我想知道是否有人知道用 Java 编写的色键库 我希望使用 Java 编辑绿屏图像的内容 以补充现有的
  • 如何将 jqgrid 值作为表单字段提交?

    我正在尝试在用户填写传统表单字段 例如用户名 电话等 的表单中使用 jqGrid 该表单包含用于行项目的 jqGrid 用户可以在其中添加 编辑 删除行 完成后提交整个表格 我让网格按我希望的方式工作 我只是无法将网格的内容作为包含表单的一
  • Numpy 直方图表示具有相同近似值的浮点数

    我有代码可以在给定范围 0 1 的情况下生成从 10 到 10 的特定值 该代码采用 10 到 10 之间的值 并根据其概率将其附加到列表中 例如 10 将在列表中放入 0 次 因为它对应于值 0 而 10 将在列表中放入 100 次 作为
  • Scrapy:根据下载图像的网址,从下载的图像中创建文件夹结构

    我有一系列定义网站结构的链接 从这些链接下载图像时 我想同时将下载的图像放置在类似于网站结构的文件夹结构中 而不仅仅是重命名它 如中所回答 Scrapy图片下载如何使用自定义文件名 https stackoverflow com quest
  • 是否可以使用 Jenkins 管道进行 Git 合并/推送

    我正在尝试使用 Jenkinsfile 创建 Jenkins 工作流程 我想要它做的就是监视 开发 分支的更改 当发生更改时 我希望它 git tag 并合并到 master 我正在使用 GitSCM Step 但它似乎唯一支持的是 git
  • Flutter Doctor CocoaPods 未安装

    When I run Flutter doctor 我尝试运行 sudo gem install cocoapods 来安装它 但仍然存在同样的问题 请注意 我正在开发通道中使用最新的 flutter 版本运行 xcode 12 有任何想法
  • 将文件添加到 git 的 stage 不执行任何操作并且无法提交

    我陷入了一种奇怪的情况 在我的一个分支中 web config 文件无法添加到舞台上 的输出 git add path to web config git status 与添加文件之前相同 Web config 似乎需要修改 并且尚未添加到
  • 无法传递给 C 代码 - 虚拟环境' aria-label='对象类型 无法传递给 C 代码 - 虚拟环境'> 对象类型 无法传递给 C 代码 - 虚拟环境

    我正在使用 Mac Anaconda 我尝试使用加密货币的 AES 然而 我面临一个奇怪的问题 我只想执行一行简单的代码 obj AES new This is a key123 AES MODE CBC This is an IV456
  • MVC 相当于 ASP.NET 按钮单击事件

    我需要创建一个与 ASP NET 中的按钮单击事件等效的页面 在我的页面上 当用户单击按钮时 我需要处理一些信息 如果发生错误 则显示错误页面 但如果成功 我需要显示成功页面 我是 MVC 的新手 我不知道如何解决这个问题 这就是我到目前为
  • C# 和箭头键

    我是 C 新手 正在现有应用程序中做一些工作 我有一个 DirectX 视口 其中包含我希望能够使用箭头键定位的组件 Currently I am overriding ProcessCmdKey and catching arrow in
  • 需要建议在 Javascript 中应用 .disabled

    我运行 Woocommerce 网站并希望禁用结帐页面上的特定输入 Woocommerce 可以按国家 地区设置运输方式 我将默认国家 地区设置为韩国 并且显示韩国的运输选项 但是 如果我选择美国 运输方式将看到根据美国的运输选项 因此 默
  • 在闪亮的仪表板中从 R 访问 javascript 对象

    SO 有很多闪亮的问题询问如何在 UI 中使用输入值 一般答案是使用updateSelect 家庭或使用renderUI 我知道基本上不可能从输入列表中访问值 input 在 UI 中 因为输入列表仅传递到服务器 因此不存在于 UI 环境中
  • 我可以在 Netlify 中通过 Create-React-App 使用构建环境变量吗?

    如何在 Netlify 中通过 Create React App 使用构建环境变量 You CAN在你的环境变量中使用create react app在 Netlify 上 但 Create React App 的所有构建限制仍然适用 默认
  • Angular 有像 extjs 那样的弹性布局吗?

    ExtJS 有一个非常有用的布局机制 称为 Flex 它的工作原理是将行或列中的所有内容相加 然后使用弹性值除以所有弹性值的总和来分配空间 这会产生如下所示的布局 红框是水平盒布局 块 E 和 F 的给定弹性值之和为 3 因此 E 为屏幕宽
  • sed 中“保持空间”和“模式空间”的概念

    我对 sed 中的两个概念感到困惑 保留空间和模式空间 有人可以帮忙解释一下吗 这是手册的一个片段 h H Copy append pattern space to hold space g G Copy append hold space
  • Python 从同一包中的文件导入 __init__.py 中的类

    我觉得我应该知道这一点 因为我已经用 Python 编程这么久了 但我一直在不断学习关于这种精美语言的新知识 我的问题 很可能是重复的 但我无法找到相同的案例 是这样的 我有这样的文件布局 websocket init py client
  • 带有 QML 的 FbxGeometryLoader

    我想将 fbx 文件导入到我的Scene3D https doc qt io qt 5 11 qml qtdatavisualization scene3d html 通过QMesh https doc qt io qt 5 11 qt3d
  • Linux下与CashCode纸币接受器通信

    我已经实现了 CCNET 协议 以便通过 Linux 上的软件与 CashCode 纸币接受器进行通信 最初 我花了很多时间试图弄清楚为什么设备不响应 我发送的命令 使用反复试验的方法 我找到了为串行端口设置以下选项的解决方案 stty F
  • 我可以在不注销的情况下获得更新的 emailVerified 吗?

    我的注册流程如下 用户填写详细信息并注册 收到发送验证电子邮件 该用户登录后 但看到一个屏幕 要求进行电子邮件验证 用户验证他们的电子邮件并返回应用程序 在这个阶段我怎样才能获得新的用户数据emailVerified字段而不注销用户 我期望
  • Linux:大型 int 数组:mmap 与查找文件?

    假设我有一个数据集 它是存储在 4TB HDD ext4 文件系统上的文件中的 1e12 32 位整数 4 TB 数组 考虑到数据很可能是随机的 或者至少看起来是随机的 pseudo code for long long i 0 i lt