AWS EBS中IO操作(IOP)的大小是多less?

我的研究表明,现代文件系统(ext4,xfs)的标准和最大(内核限制)块大小都是4KB。 但是, AWS允许IO的操作大到256KB,并说

对于32 KB或更小的I / O操作,只要您驱动足够的I / O来保持驱动器繁忙,则应该会看到已设置的IOPS数量。 对于较小的I / O操作,甚至可能会看到IOPS值高于您设置的IOPS值(在客户端测量时),这是因为客户端可能会将多个较小的I / O操作合并为一个较小的数字大块。

Linux在哪里暴露和/或允许configuration“设备块大小?” 当说一个在postgres(8KB块大小)的全表扫描时,你可以在哪里看到和/或configuration操作系统问题的“IO操作”的大小?

一个I / O操作的大小取决于很多事情。 计算你的应用程序的平均值不一定是一个坏主意。

亚马逊的定义意味着他们的硬件支持256KB的块。 单个I / O操作是读取或写入一个块。 对操作跨越两个块的硬件的“未alignment”访问将导致两个I / O操作,即使软件和硬件块大小匹配。 这就是为什么使用文件系统阻塞与硬件块大小相同的大小对于I / O性能如此有用的原因,尽pipe这会由于文件系统块是分配量而降低存储效率。

文件系统中的块大小很大程度上取决于内存页大小,因为读进入内存页面。 通常情况下,x86 Linux的内存页面是4kB; 虽然内核可以映射较大的页面,但在正常的4kB页面和巨大的4MB页面之间不存在中间大小。 所以,你不能在现代系统和硬件上调整这一点。

但是,文件系统可以尝试通过防止碎片使所有的读写操作顺序进行。 EXT4通过在磁盘上稀疏地分配文件而不是在请求块时分配下一个空闲块来实现这一点; 其他文件系统也有这个策略。 当内核(文件系统和磁盘驱动程序)在物理连续且不跨越物理块边界时,可以将跨越多个块的单个读取操作合并为单个读取操作。

磁盘驱动程序自动发现磁盘块大小; 你不能调整它。 你可以用blockdev --getpbsz /dev/xvda或者你有什么读。