专栏首页皮振伟的专栏[linux][redis]redis支持disable-thp了

[linux][redis]redis支持disable-thp了

前言 前文《[linux][redis]bgsave引起的latency突刺问题分析》中记录了在执行bgsave的时候,因为fork子进程之后,会出现page fault导致了redis的延迟受到了影响。 前文《[THP][redis]THP对redis的影响》中分析了THP(transparent hugepage)对redis的延迟突刺的影响。 大约两年半以前,作者给redis提了PR(https://github.com/redis/redis/pull/5124),但是maintainer并没有回复,一段时间后关闭。 几个月前,第二次提PR(https://github.com/redis/redis/pull/7381)希望解决这个问题,新任的maintainer Oran对THP问题比较感兴趣,同时也把三年多以前的另外一个PR(https://github.com/redis/redis/pull/4001)翻了出来。大约经过一周的讨论和修改,两个PR都已经合入了upstream。 分析 THP的内核逻辑 内核提供了THP开关可以控制,/sys/kernel/mm/transparent_hugepage/enabled,这个开关需要root权限,且是系统级别的影响。 always表示所有的进程都会被khugepaged扫描,尝试使用2M的透明大页。 madvise表示如果有进程调用了THP开关,则打开/关闭。 never表示khugepaged不会对任何进程生效,包括使用madvise的进程。 warning判断 redis的原有的逻辑是在启动阶段检查系统的THP配置,如果不是never,就会产生一个warning。redis自身并没有使用过madvise进行THP操作,即使使用了jemalloc,也不会对主要的内存进行THP操作。所以改成不是always就应该是安全的,所以,Oran接受了这个改动(https://github.com/redis/redis/pull/4001)。 关闭redis的进程THP 更加理想的做法是不管系统配置如何,redis都可以把自己进程的THP开关禁用掉,这样子不需要root权限控制,且不会影响其他的进程。Linux恰好提供了这样了一个syscall,所以在(https://github.com/redis/redis/pull/7381)中,会关闭掉。同时,根据Oran的意见,增加了配置项,在多数情况下,默认都是会自动关闭掉THP,除非用户强制指定了不关闭的配置。这样下来,在大多数情况下,用户都可以避免THP引起的fork之后的剧烈抖动问题。 关于conf的描述 在redis.conf中增加了一个新的配置项“disable-thp”,作者最初的描述是

#################### KERNEL transparent hugepage CONTROL ######################
# Since Linux 3.15, it is possible to disable THP(transparent hugepage) setting
# for a specified process.
#
# Transparent Hugepage Support is an alternative means of using huge pages for
# the backing of virtual memory with huge pages that supports the automatic
# promotion and demotion of page sizes and without the shortcomings of hugetlbfs.
# But fixing a Copy-On-Write page fault for THP takes more time, and latency
# jitter may occurs after forking a child process.
#
# For general purpose, the recommended config is 'yes', redis will try to disable
# THP for itself when startup. And if you have a specific use of THP, set this
# to 'no'.
disable-thp yes

然而Oran建议是

#################### LINUX KERNEL THP CONTROL #################################
# Usually the kernel Transparent Huge Pages control is set to "madvise" or
# or "never" by default (/sys/kernel/mm/transparent_hugepage/enabled), in which
# case this config has no effect. On systems in which it is set to "always",
# redis will attempt to disable it specifically for the redis process in order
# to avoid latency problems specifically with fork(2) and CoW.
# If for some reason you prefer to keep it enabled, you can set this config to
# "no" and the kernel global to "always".
#
# disable-thp yes

对于end-user来说,后者应该更加友好一些。让配置简单易懂,这也是redis这么流行的原因之一吧。 详细的讨论过程见上文的PR。

本文分享自微信公众号 - AlwaysGeek(gh_d0972b1eeb60),作者:AlwaysGeek

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-11-01

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • [linux][system] gettimeofday的几种实现方法

    前言: 有同事讨论到gettimeofday的性能问题。想起来大约四五年前,在linux-2.6.x上的时候,用一种很极端的方法实现过time函数。 下面就简单...

    皮振伟
  • [linux][redis]bgsave引起的latency突刺问题分析

    前言: redis启动的时候,可能会提示“WARNING you have Transparent Huge Pages (THP) support enabl...

    皮振伟
  • [linux][redis]redis对cpu亲和性的支持

    前言 redis在最近的版本中,开始了对多线程的支持。加上之前对多进程的支持,模型的复杂度也比过去复杂了不少。 redis本身又是一个对性能、延迟非常敏感的业务...

    皮振伟
  • 先验知识:没有高级知识的数据集的跨模式知识泛化(CS.CV)

    跨模式知识提炼是将知识从具有高级模式训练的模型(教师)转移到具有弱模式训练的另一个模型(学生)。现有方法要求在两种方式中都存在成对的训练示例。但是,从高级模式访...

    蔡小雪7100294
  • CentOS安装jdk和tomcat

    代码改变世界-coding
  • mydumper安装及安装故障汇总

       mydumper是针对mysql数据库备份的一个轻量级第三方的开源工具,备份方式术语逻辑备份。它支持多线程,备份速度远高于原生态的mysqldump以及众...

    Leshami
  • Salesforce加强其营销游戏

    大流行可能正在改变我们的工作方式,但是CRM工具中许多变更需求早于COVID-19。不过,Salesforce上周在其Marketing Cloud中引入了一些...

    田冠宇
  • Linux下利用iptables快速实现UDP/TCP端口转发

    很多时候我们搭建某些服务后,发现本地连接效果不给力,但是我们有一个国内机器,由于国内机器出去走BGP线路,国内机器连接国外效果好,本地连接国内效果也不错,这样我...

    砸漏
  • 基于C++11的线程池

    本篇系C++ socket网络爬虫(1)的姊妹篇,写网络爬虫怎么能少得了线程呢 源代码地址:http://files.cnblogs.com/magicsoar...

    magicsoar
  • Istio实战——istio1.5 使用 wasm 扩展介绍

      它来了,它来了,它带着“优化”走来了。 Istio 1.5 千呼万唤始出来, 只见它左手一只鸡,右手一只鸭,怀里抱着一个 istiod。这些礼物包括:

    秦始皇2.0

扫码关注云+社区

领取腾讯云代金券