操作系统优化
操作系统参数总共跟三项有关:CPU、Memory、Disk
CPU
Dynamic frequency scaling(DFS)
Dynamic Frequency Scaling(DFS)是一种CPU动态节能技术,旨在降低服务器功耗。通过选择系统空闲状态不同的电源管理策略,DFS 可以实现不同程度的功耗降低,然而,低功耗策略可能会导致 CPU 唤醒速度减慢,进而影响系统性能。
定义及原理:DFS 通过调整处理器的工作频率来实现节能目的。具体来说,当系统负载较低或处于空闲状态时,DFS 会降低 CPU 的时钟频率,以减少能耗和热量产生。反之,当系统负载较高时,DFS 会提高 CPU 的时钟频率,以提供更高的性能。
DFS的五种模式:
1.performance(TiDB推荐,长期最高)
- 特点: 提供最高的 CPU 性能,不考虑功耗和能效。
- 应用场景: 对性能要求较高的工作负载,如计算密集型任务。
2.userspace(用户级手动调节)
- 特点: 允许用户空间程序自行控制 CPU 的频率调整。
- 应用场景: 需要定制化的频率调整策略,如特定应用程序的性能优化。
3.powersave(省电模式)
- 特点: 优先考虑降低功耗,牺牲一定的性能。
- 应用场景: 对功耗要求较高,性能要求较低的工作负载。
4.ondemand(自动调节最高或最低)
- 特点: 根据系统负载动态调整 CPU 频率,以平衡性能和功耗。
- 应用场景: 对性能和功耗都有要求的通用工作负载。
5.conservative(自动平滑试调节)
- 特点: 在系统负载较低时降低 CPU 频率,但在负载增加时不会立即提高频率,以避免频繁的调整。
- 应用场景: 对稳定性要求较高的工作负载,如服务器应用。
cpupower frequency-set --governor performancecpupower frequency-set --governor performance
Numa Binding
NUMA (Non-Uniform Memory Access) Binding 是一种用于优化服务器性能的技术,特别是在多处理器系统中。NUMA Binding 旨在将计算任务和内存访问绑定到特定的 NUMA 节点,以减少内存访问延迟和提高数据访问速度。
定义及原理:NUMA 是一种多处理器体系结构,其中系统中的每个处理器都与一组本地内存连接在一起,而不是与整个系统内存连接。这意味着处理器访问本地内存的速度比访问远程内存的速度更快。NUMA Binding 通过将计算任务和内存访问绑定到特定的 NUMA 节点,可以最大程度地利用本地内存,从而减少内存访问延迟,提高系统性能。
Numa Binding的作用:
1.减少内存访问延迟:将计算任务绑定到与其访问的内存节点相对应的处理器上,可以减少内存访问延迟,提高计算效率。
2.提高数据访问速度:通过最大程度的利用本地内存,可以加快数据访问速度,提高系统整体性能。
3.防止资源争抢:通过绑定Numa,进行资源管控,防止资源竞争导致未知风险。
Memory
Transparent Huge Page(THP)
Transparent Huge Page(THP)是一种用于管理大页(Huge Page)的技术,旨在提高系统性能和内存管理的效率。THP 允许操作系统自动将常规大小的页面(通常为 4KB)合并为更大的页面(通常为 2MB 或 1GB),从而减少页表项数量,提高内存管理效率,并减少 TLB(Translation Lookaside Buffer)缓存的压力。
注意事项:
对于数据库应用,一般不建议启用 Transparent Huge Page(THP)技术。这是因为数据库往往具有稀疏而不是连续的内存访问模式,而 THP 技术更适用于连续的内存访问模式。此外,当系统存在高阶内存碎片化问题时,分配 THP 页面可能会导致较大的延迟。即使启用了针对 THP 的直接内存规整功能,也可能出现系统 CPU 使用率突然增加的情况。因此,建议在数据库应用中关闭 THP,以避免潜在的性能问题。
从ReadHat官网对于THP的介绍当中也可以看到,不建议在数据库应用中启动THP
Vrtual Memory Parameters
在操作系统中,虚拟内存起到了至关重要的作用,允许系统在物理内存不足时将部分数据存储在磁盘上,从而为应用程序提供了更大的可用内存空间。
其中,dirty_ratio 和 dirty_background_ratio 是两个关键的参数,它们直接影响了系统的性能和稳定性。
dirty_ratio:定义了系统内存中脏页的最大比例,即已被修改但尚未写入磁盘的页面。当系统中脏页的比例达到 dirty_ratio 时,系统将开始触发写入操作,将数据从内存写入到磁盘,以确保数据的持久性和一致性。
dirty_background_ratio:定义了一个后台写入的触发点,当系统中脏页的比例达到这个值时,后台写入进程会启动,以避免过多的脏页堆积,从而提高系统的响应速度和稳定性。
dirty_ratio 和 dirty_background_ratio 在我们这里通常并不需要调整,对于高性能的SSD,比如NVME设备来说,降低其值有利于提高内存回收时的效率。
Disk
I/O scheduler
I/O调度器是操作系统中负责管理和调度磁盘I/O请求的组件之一。常见的I/O调度器模式包括 noop、deadline 和 cfq,它们各自具有不同的特点和适用场景。下面是对这三种模式的详细介绍:
(1)Noop(TiDB推荐)
特点:
- Noop是一种简单的I/O调度器,通常被用于闪存设备(如SSD)等低延迟、高性能的存储介质上。
- 它的调度策略非常简单,只是按照请求的到达顺序来处理I/O请求,不进行额外的排序或调度。
- Noop调度器适用于不需要额外的I/O调度处理的场景,可以最大限度地减少CPU消耗,提升I/O性能。
适用场景:
- 适用于低延迟、高性能的存储设备,如SSD、NVMe等。
- 适用于对I/O调度算法要求不高的应用场景,例如嵌入式系统或某些特定的数据中心应用。
(2)Deadline
特点:
- Deadline调度器是一种具有简单截止期限的I/O调度器,主要用于提高系统的响应性和稳定性。
- 它根据I/O请求的截止期限来调度,优先处理即将超时的请求,以确保对实时性要求较高的任务能够及时得到响应。
- Deadline调度器既考虑了请求的完成顺序,又兼顾了请求的截止期限,可以在一定程度上平衡系统的吞吐量和响应性能。
适用场景:
- 适用于需要提高系统响应速度和稳定性的场景,如桌面操作系统、实时系统等。
- 适用于对I/O请求的响应时间有较高要求的应用,如多媒体处理、交互式应用等。
(3)CFQ(Completely Fair Queuing)
特点:
- CFQ是一种基于完全公平队列的I/O调度器,旨在提供公平的磁盘访问权,并在多任务环境中实现良好的性能和资源利用率。
- 它将所有的I/O请求分配到不同的队列中,并按照一定的调度策略(如时间片轮转)对这些队列进行调度,以确保每个进程都能获得公平的磁盘访问机会。
- CFQ调度器适用于多任务环境下的服务器和桌面系统,可以平衡各个进程之间的磁盘访问需求,提高系统的整体性能和稳定性。
适用场景:
- 适用于多任务环境下的服务器和桌面系统,如Web服务器、文件服务器、多用户系统等。
- 适用于需要公平调度磁盘资源的场景,如多用户系统、虚拟化环境等。
相关命令:
#查看目前使用的模式
cat /sys/block/sda/queue/scheduler
#修改当前调度器模式
echo "noop" > /sys/block/sda/queue/scheduler
Mount Paramtets
挂载参数(Mount Parameters)是在操作系统中用于控制文件系统挂载行为的设置。它们决定了文件系统如何与操作系统交互以及如何处理文件系统上的数据。理解和正确配置挂载参数对于系统性能、数据完整性和安全性至关重要。
TiDB推荐的挂载参数:
nodelalloc: 通过使用 nodelalloc 参数来禁用延迟分配,可以确保每次数据写入操作都会立即同步到磁盘,从而减少了数据丢失的风险。这对于一些对数据一致性要求较高或对数据持久性要求较严格的应用场景尤为重要
noatime: 通过使用 noatime 参数,可以禁止文件系统更新文件的访问时间戳,从而减少了文件系统的元数据更新操作,提高了系统的性能和吞吐量。这对于一些对文件访问时间不感兴趣的应用场景尤为有用