当前磁盘(HDD、SSD)开放给操作系统的配置参数,见下表。注:绿表示可调,红表示不可调。
队列参数
权限
说明
可调
SSD
HDD
备注
add_random
RW
熵池中用于 /dev/random 的 I/O 事件成本是可以测量的。在某些情况下要求将其设定为 0
1
1
需要进一步评估
dax
RO
这个文件表明设备是否支持直接访问(DAX),CPU可寻址的存储使用它绕开页缓存。
真时显示‘1’,否则显示‘0’
/
/
discard_granularity
RO
如果这项信息被设备报告,它显示磁盘的内部分配大小(单位:字节)。‘0’值表示设备不支持这个
被丢弃的功能。
/
/
discard_max_hw_bytes
RO
支持被丢弃功能的设备可能包含对单次操作可以削减或解映射的字节数。
discard_max_bytes参数被设备驱动设置成在单次操作中能够被丢弃的最大字节数。发送给设备的被
丢弃请求数不可以超出这个限制。discard_max_bytes值为0意味着设备不支持丢弃功能。
/
/
discard_max_bytes
RW
discard_max_hw_bytes是设备的硬件限制,而这个设置是软件限制。
当发送大量discard请求时,一些设备表现出高延迟;
调低这一数值会使Linux发送较小的discard,这可能帮助减少大量discard操作引入的延迟。
/
/
hw_sector_size
RO
设备的硬件扇区大小(以字节为单位)
/
/
io_poll
RW
它的内容显示启用(1)或禁用(0)轮询。将‘0’写入该文件将禁用设备的轮询。
写任何非0值都将启用该特性。
0
0
io_poll_delay
RW
如果启用轮询,该参数控制执行哪种类型的轮询。默认值为-1,传统轮询。在这种模式下,
CPU将会不放弃任何时间反复地询问完成情况。
如果设置为0,将使用混合的轮询模式,内核将会尝试根据训练猜测何时IO完成。基于这一猜测,在进入一次经典轮询循环前,内核将会设置发出IO请求的进程置成睡眠状态一段时间。这种模式可能比纯经典的轮询模式慢一些,但它可能更高效。如果这个值设置大于0,在进入传统轮询前,内核将设置发出IO请求的进程睡眠这么多的微秒。
0
0
iostats
RW
这个文件用于控制(打开/关闭)磁盘的I/O状态统计。
/
/
logical_block_size
RO
设备的逻辑块大小(字节)
/
/
max_hw_sectors_kb
RO
这是单个数据传输的最大千字节数
/
/
max_integrity_segments
RO
读取这个文件时,它的内容显示显示硬件控制器能够处理的完整段的最大限制,与块层设置一致。
/
/
max_sectors_kb
RW
默认将发送到磁盘的最大请求设定为 512 KB。这个可调参数可用来增大或者减小该值。
最小值为逻辑块大小;最大值由max_hw_sectors_kb设定。
256
512
有些 SSD 会在 I/O 大小超过内部删除块大小时性能下降
在此类情况下建议将 max_hw_sectors_kb 降低到删除块大小。
max_segments
RO
设备的段数最大值。
/
/
max_segment_size
RO
设备的最大段大小。
/
/
minimum_io_size
RO
设备报告的最小首选IO大小。
/
/
nomerges
RW
它允许用户禁用涉及块层IO合并请求的查逻辑。默认(0)启用所有合并。
当设置为1时,仅简单的one-hit合并会被尝试。当设置为2时,
不会尝试任何合并算法(包括one-hit或更复杂的树/哈希查)
0
0
主要用于故障排除。大多数负载都可从请求合并中获益,有些情况下要求禁用合并,比如当您要查看存储后端可处理多少 IOPS 而无需禁用预读或者执行随机 I/O 时。
nr_requests
RW
每个请求队列都有可为每个读和写 I/O 分配的请求描述符总数限制。
这个数的默认值为 128,即在将某个进程转入睡眠模式时可将 128 个读和 128 个写放入队列
。转入睡眠模式的进程是下一个要分配请求的进程,不一定是已分配所有可用请求的进程。
128
128
一个对延迟敏感的程序,则应考虑在您的请求队列中降低 nr_requests 值,并将存储中的命令队列深度降低到较低的数值(甚至可以降低为 1),这样写回 I/O 就无法分配所有可用请求描述符,并使用写入 I/O 设备队列填满该设备。分配 nr_requests 后,所有其他尝试执行 I/O 的进程都会转入睡眠模式等待请求可用。这样更为公平,因为这样会以轮循模式分配请求(而不是让一个进程很快消耗完所有资源)。注:只有在使用最后期限或者 noop 调度程序时才会有此问题,因为默认 CFQ 配置可防止出现此类情况。
optimal_io_size
RO
在有些情况下,底层存储会报告最佳 I/O 大小。这在硬件和软件 RAID 中很常见,
其中最佳 I/O 大小是条大小。
如果报告该值,则程序应该发出以及最佳 I/O 大小相当会长成倍数的大小的 I/O。
0
0
需要上层应用配合
physical_block_size
RO
设备物理块大小(以字节为单位)
/
/
read_ahead_kb
RO
操作系统可探测到程序何时从文件或者磁盘中连续读取数据。
128
128
对于设备映射器设备,一般应该增大 read_ahead_kb 值,比如 8192。理由是设备映射器设备通常有多个基础设备组成。
rotational
RW
传统硬盘一般都采用轮换模式(比如转盘)。但 SSD 不是。
遇到设备没有说明有此功能,则可能需要手动将轮换模式设定为 0
禁用轮换模式后,I/O 提升程序就不使用要减少查询的逻辑
1
1
rq_affinity
RW
可在与发出 I/O 不同的 CPU 中处理 I/O。将 rq_affinity 设定为 1 可让内核向发出 I/O 的 CPU 传递完成信息。这样可以改进 CPU 数据缓存效果。
1
1
scheduler
RW
不同的磁盘类型,适合不同的IO调度策略
cfq
cfq
write_cache
RW
显示设备回写缓存启用与否
write through
write through
write_same_max_bytes
RO
单个write-same命令里能够写入的最大字节数
/
/
仅在文件系统特殊清零用途下可用
wb_lat_usec
RW
/
/
配合write_cache
throttle_sample_time
RW
/
/
cgroup相关,目前不涉及linux磁盘管理