linux - 在 max_sectors_kb 处写入 IO
问题描述
在 Linux(使用 5.9)上,如果我的 NVMe 磁盘有max_sectors_kb == 2048
but logical_block_size == 512
,那是否仍然意味着如果我提交 2048KB 的写入,那么...
- 如果驱动器的内核写入队列已饱和,整个操作将失败 (
nr_requests == 256
)
或者
- 整个 2048KB 写入将被写入并且永远不会小于 2048KB?
我正在使用 io_uring 和O_DIRECT
.
解决方案
io_uring
有自己的队列,您可以将其设置为大于 256 的数字。此外,entries
提交和完成队列与进行中请求的队列是分开的,因此您必须使AND饱和。io_uring_setup(2)
entries
nr_requests
- 看起来有人在https://twitter.com/victorxstewart/status/1338303336370593792上向 Jens 提出了这个问题:
维克多·斯图尔特@victorxstewart
@axboe如果您只提交大小为hw_sector_kb的文件IO,使用O_DIRECT,使用固定的操作,是否仍然可以获得短读或写?还是批量完成乱序?
Jens Axboe @axboe 回复 @victorxstewart
Short 通常不应该发生,out 或 order 完成可以(并且将)总是发生。
但是,您需要澄清您的问题。您实际上是在问“即使面对电源故障,O_DIRECT 也是原子的吗?” (即所有给定的 I/O 是否都已写入,如果没有,正在写入的区域是否与所有旧数据完全一样)?
在 io-uring 邮件列表线程[PATCH v3 RESEND] iomap: set REQ_NOWAIT 根据直接 IO 中的 IOCB_NOWAIT有一个警告,初始文件系统 I/O 可以分开并单独发送(更糟糕的是单独失败)如果设置了某些其他选项。
最好在 io_uring 邮件列表上更直接地询问 - http://vger.kernel.org/vger-lists.html#io-uring。
推荐阅读
- powerbi - 是否可以在 Power BI 中创建引用两个不共享关系的表的度量?
- json - 无法选择具有水平视图格式的列表项
- sql - 2 张桌子 - 一位客户,一笔交易。如何处理没有交易的客户?
- powerbi - 从 POWER BI 对时间线图表进行排序
- json - 从调用值中提取变量-在条件下获取错误消息
- facebook - Facebook Webhook 查找谁喜欢您的页面
- python - 如何正确获取嵌套模型内层的输出?
- angular - 何时显示未定义变量时出现错误
- shell - 当构建状态从稳定变为不稳定/失败时如何运行构建后操作
- xml - 如何在 IIS ARR 响应中重写 API 内容