当前位置: 首页 > 面试题库 >

写的最佳缓冲区大小(2)

阎咏思
2023-03-14
问题内容

假设我想在syscall 上的ext3Linux文件系统上写入1 GB的数据write(2),这种情况发生在非常 繁忙的环境中
(许多相似的I / O并发)。什么是在区间的最佳缓冲区大小,说,[4 kB, 4 MB]这样做,当

  1. 不使用O_DIRECT打开标志,或者
  2. 使用O_DIRECT

请没有“自己检查”的答案-我想从“文件系统”的家伙那里得到一些答案。


问题答案:

正如评论中所讨论的那样,我认为确切的大小并不重要,假设是:

  • 文件系统大小的一小部分(请参阅Joachim Pileborg的建议stat(".")等)
  • 2的幂(因为计算机和类似它们的内核)
  • 不太大(例如,适合处理器内部的某些缓存,例如L2缓存)
  • 在内存中对齐(例如,使用调整为页面大小posix_memalign)。

因此,介于16kB和几兆字节之间的2的幂应该适合。大部分时间都花在读取磁盘上。在此范围内,文件系统和磁盘基准测试相当平稳。

4 KB似乎通常是页面大小和磁盘块大小。

当然,在使用创建mke2fs文件系统块大小的文件系统时,您甚至可以调整内容,甚至进行调整。

我敢打赌,最佳选择实际上取决于您的硬件(SSD,硬盘?)和系统(及其负载)。



 类似资料:
  • 问题内容: 读取文件太大而无法容纳缓冲区时,出现致命错误。 要么, RangeError:“ size”参数不得大于Function.Buffer.allocUnsafe(buffer.js:209:3)的2147483647 如果我尝试分配1GB缓冲区,则会遇到同样的致命错误, Node.js Buffer类实例的最大大小是多少? 问题答案: V8中类型化数组的最大长度当前设置为以下值,具体取决

  • 我想在我的小libgdx游戏中使用框架缓冲区。 游戏使用了,我修改了s摄像头,使其使用50宽31高的视口。然后我将的投影矩阵设置为。这样做,我有一个分辨率独立的游戏,我可以使用我自己的“世界单位”,而不是使用像素。 但是现在,如果我创建一个,我必须给它一个大小。我必须给它摄像机视口的大小还是屏幕的大小(以像素为单位)? 而且,当我渲染的东西,我可以渲染他们在,这意味着渲染在几乎在游戏窗口的中间?

  • 问题内容: 根据文档,使用默认缓冲区大小,而第二个构造函数允许设置缓冲区大小。 public BufferedReader(Reader in) 创建使用默认大小的输入缓冲区的缓冲字符输入流。 但是,文档没有提到默认的缓冲区大小是多少。 BufferedReader的默认缓冲区大小是多少? 问题答案: 默认缓冲区大小为8192个字符 http://developer.android.com/ref

  • 根据文档,使用默认缓冲区大小,而第二个构造函数,允许设置缓冲区大小。 公共缓冲区读取器(读取器输入) 创建使用默认大小的输入缓冲区的缓冲字符输入流。 但是,文档没有提到默认缓冲区大小。 BufferedReader的默认缓冲区大小是多少?

  • 如何在标准C++/C++11(无POSIX函数)中优化std::ifstream和std::ofstream的读写速度?(1<-由于有几个问题,这些数字标识了不同点) 我不知道缓冲区的确切作用,所以你能确认一下吗: 用于读取:文件的大部分预加载在内存中(因此缓冲区大小定义了这大部分的大小)(2) 写入:数据写入内存,一旦缓冲区满了,数据就从内存传输到文件系统(3) 如何设置std::ifstrea

  • 问题内容: 我正在使用以下bash命令模式运行memcached: 尝试跟踪整个平台上无与伦比的按键设置。 memtracer脚本在下面,并且可以按预期运行,但有一个小问题。观察中间日志文件的大小,直到memkeywatchYMD.log的大小约为15-18K时,memtracer.py才开始获取输入。有没有更好的方法可以读入stdin或将缓冲区大小减小到1k以下以获得更快的响应时间? 问题答案: