Hi there 👋

Welcome to my blog!

  • 🌈 Currently working at Tencent - 🐳 Learning Golang, K8S, OpenResty, APISIX, Istio, Envoy - 🤔 Thinking about changing the world more or less - 💬 Ask me about API gateway or Cloud Native - 📫 How to reach me: [email protected]

Hugo 文章目录管理教程

Hugo 文章目录管理教程 这篇文章演示了如何为每个Hugo文章创建独立的目录结构。 优势 便于管理:每个文章有自己的目录 资源整理:图片、附件等资源放在同一目录 版本控制:便于跟踪文章的变更历史 SEO友好:目录名可以作为URL的一部分 目录结构 1 2 3 4 5 6 7 8 9 10 content/posts/ ├── 20250715-hugo-tutorial/ │ ├── index.md # 文章内容 │ ├── cover.jpg # 封面图片 │ └── images/ # 文章图片 │ └── diagram.png └── another-post/ ├── index.md └── assets/ └── file.pdf 使用方法 1. 创建文章目录 1 hugo new posts/文章名称/index.md 2. 或者手动创建 1 2 mkdir -p content/posts/20250715-my-article touch content/posts/20250715-my-article/index.md 这样每个文章都有自己的独立空间了! ...

July 15, 2025 · 1 min · 65 words · Miss-you

当 nil 不等于 nil?深度剖析 Go 的 typed nil 大坑

0. 一个能“悄悄坑你”的真实示例:SError 的故事 先看你提到的这段代码,表面上看非常正常,甚至很多人第一眼不会觉得哪里有问题: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 package main import ( "log" "sync" ) type SError struct { cause error // Wrapped error which is the root cause. text string // Error text, which is created by New* functions. i18nText string // 本地错误文字,用于客户端显式中文 ignored bool // 能否忽略该错误 info map[string]string infoMutex sync.RWMutex } func (e *SError) Error() string { return e.text } // demoRetSerr 返回 (int32, *SError)。看上去,如果不想返回任何错误,就直接返回 (0, nil) func demoRetSerr() (int32, *SError) { return 0, nil } func main() { var err error // 这里把第二个返回值的 *SError 赋给了 interface{} 类型的 err _, err = demoRetSerr() if err != nil { log.Printf("err != nil. err: %v", err) } } 0.1 乍看之下哪里会有问题? 我们 demoRetSerr 函数直接返回 (0, nil),而函数签名的第二个参数类型是 *SError。 回到 main 函数中,err 是一个 error 接口,承接了那个 nil 指针。 如果“typed nil” 现象出现,那么 err != nil 这个判断就会莫名其妙地通过,从而在日志里打印出“err != nil. err: <nil>”。有时更可怕的是,实际逻辑会被误判,可能执行本不该执行的错误处理分支。 在某些 Go 版本或特定编译器优化下,你可能发现控制台就输出 err != nil. err: <nil>,让人“一头雾水”。这就是一个十分典型、却很隐蔽的 typed nil 场景。即使你写 return nil,对编译器来说: ...

May 15, 2025 · 4 min · 687 words · [厉辉(Yousa)](https://github.com/Miss-you)

畅享 ChatGPT Plus:无需额外支付手段,突破 OpenAI 支付风控

截至 2024 年 2 月 10 日,该教程仍然有效。我已根据此教程重新操作并成功充值。请注意,购买苹果充值卡时应确保从苹果官方网站购买。 ChatGPT Plus 的优势 GPT-4 的性能非常强大,这是众所周知的事实。 Plus 会员可以使用 ChatGPT 的在线和插件功能,这些功能将极大地增强你的创造力,并为你的个人学习和工作效率提供强大的支持工具。 如何开通 ChatGPT Plus? 关键步骤 ChatGPT 已在美国 iOS App Store 上架。你只需要使用 iOS 设备续费会员即可。 目标用户 本教程适用于拥有 iOS 设备(如 iPhone 或 iPad)的用户。 所需工具 a. iPhone 或 iPad 设备 b. 美国地区的科学上网(可自建或购买) c. 支付宝账户 d. 已注册成功的 chatGPT 账号 开通步骤 1. 创建美国区 iOS 账号 如果你已拥有美国区账号,或已熟悉注册流程,可跳过此步骤。 详细的注册流程如下: 访问网站:在浏览器中访问 https://appleid.apple.com/account 开始创建你的 Apple ID。 设置国家/地区:在"Country/Region"下拉菜单中选择"United States"。 输入邮箱和设置密码:在指定字段输入可接收邮件的邮箱地址(作为你的 Apple ID),设定密码并在确认密码字段再次输入。 输入并验证手机号码:选择"China Mainland"作为电话区域,输入手机号并继续。你将收到验证码,输入以验证。 ...

April 23, 2024 · 2 min · 297 words · [厉辉(Yousa)](https://github.com/Miss-you)

【译】创业生存手册:如何有效地打造产品、组建团队并筹集资金

作者:Sam Altman 原文:https://playbook.samaltman.com/ Sam Altman,OpenAI CEO,经常会在博客中分享他的创业经验与智慧。Sam 曾分享过一篇他的经典文章《创业生存手册:如何有效地打造产品、组建团队并筹集资金》,他提供了一系列富有洞见的指导,帮助我们理解创业的艰难和挑战,并找到成功的途径。无论你是创业新手,还是经验丰富的科技专家,都能在这篇文章中找到有价值的收获。#SamAltman #创业 #科技 个人认为,大公司内的小团队或创新团队与创业公司在诸多方面有着密切的相似性。两者都面临着从零开始,将一个概念或想法转化为可行产品或服务的挑战。他们都需要快速地适应和学习,寻找产品与市场的契合点,同时也要不断地迭代产品,以满足不断变化的市场需求。在这两种环境中,都需要强大的领导力和管理才能以及优秀的团队成员。而且,他们都需要面对并管理风险,同时在有限的资源下取得最大的产出。因此,无论你是处于创业环境还是大公司的创新团队,本文都会为你提供极大的价值。Sam Altman的经验和洞察将帮助你更好地理解如何建立并领导一支成功的团队,如何募集资金,如何处理竞争,以及如何建立持久并能够盈利的公司。 我们在指导初创公司方面投入了大量的时间和精力。尽管一对一的咨询服务始终是不可或缺的,但我们认为,如果能将这些建议中最具普适性的部分提炼出来,整合成一种可以提供给 Y Combinator 以及 YC Fellowship 公司的行动指南,那么我们可能能更好地扩展 Y Combinator 的影响力。 于是,我们决定将这个行动指南分享给所有人。 这是为初涉创业领域的人士准备的。对于那些阅读过大量 YC 合作伙伴所写的文章的人来说,这里的大部分内容可能并不陌生——我们的目标是将这些内容汇集到一处。 关于如何扩大创业公司的规模,我们可能会在后面的部分介绍——本指南主要覆盖了如何创立一家公司的相关内容。 作为一家初创公司,你的目标应该是创造出用户热爱的产品。如果你做到了这一点,那么你需要找出如何吸引更多的用户。但是,首要的一步至关重要——想想今天那些真正成功的公司。他们都是从一个让早期用户如此热爱以至于愿意向他人推荐的产品开始的。如果你没有做到这一点,你将会失败。如果你自欺欺人,认为你的用户热爱你的产品,但实际上并非如此,你仍然会失败。 初创公司的墓地上满是那些认为可以跳过这一步的人。 与其创造出大批用户喜欢的产品,不如首先创造出小部分用户热爱的产品。尽管总的积极感受程度是相同的,但是获得更多用户要比从喜欢提升到热爱要容易得多。 关于选择创业,我有一个警告:这是一件很糟糕的事情!我们从 YC 创始人那里得到的最一致的反馈就是,创业比他们想象的要困难,因为他们对初创公司所需的工作量和强度没有一个清晰的认识。加入一家正处于快速发展轨道的早期初创公司通常会是一个更好的经济上的选择。 另一方面,创业其实对你的职业并不构成很大的风险——如果你在技术方面真的出类拔萃,即使你失败了,也会有工作机会。大多数人在评估风险方面做得非常糟糕。我个人认为,更具风险的选择是,你有一个你非常热衷的想法或项目,但却选择了一个安全、轻松但又无法满足你的工作。 要创办一家成功的初创公司,你需要:一个伟大的想法(包括一个伟大的市场)、一个优秀的团队、一个出色的产品,以及卓越的执行力。 一、一个伟大的想法 我们会首先询问 YC 公司的创始人们,他们正在开发什么,以及为何要开发这个产品。 我们希望得到清晰、简洁的回答。这既是对你作为创始人的评估,也是对创意本身的考察。作为创始人,清晰的思维和沟通能力非常重要——你在招聘、融资、销售等方面都会需要这种能力。一般来说,想法需要清晰才能传播,而复杂的想法几乎总是混乱思维或是人为制造问题的标志。如果你的想法在别人第一次听到时并不能激发起他们的兴趣,那就不妙了。 我们还会问,谁对这款产品有着迫切的需求。 最好的情况是,你自己就是目标用户。次优的情况是,你对目标用户有着深入的理解。 如果公司已经有了用户,我们会问有多少用户,以及这个数字的增长速度如何。我们会尝试找出它的增长速度为何没有更快,尤其是要找出用户是否真的喜欢这个产品。通常,这意味着他们会在没有公司提示的情况下,向他们的朋友推荐这个产品。我们还会问这个公司是否已经产生了收入,如果没有,原因是什么。 如果公司还没有用户,我们会尝试找出最小化的首次构建项目,以便对假设进行验证——也就是说,如果我们从完美的体验回溯,我们会尝试找出从何处着手的核心点。 检验一个想法的方法是发布它看看会发生什么,或者尝试销售它(例如,在你编写一行代码之前,尝试获得购买意向书)。前者更适用于消费者想法(用户可能会告诉你他们会使用它,但实际上它可能无法脱颖而出),后者更适用于企业想法(如果一个公司告诉你他们会购买某件东西,那么就去制造它)。具体来说,如果你是一家企业公司,我们会首先问你是否有来自客户的购买意向书,表明他们愿意购买你正在开发的产品。对于大多数生物技术和硬科技公司来说,检验一个想法的方式是先和潜在客户交谈,然后找出你可以首先构建的技术的最小子集(MVP)。 让你的想法根据用户反馈进行演进非常重要。理解你的用户非常关键——你需要这个能力来评估一个想法,制造一个出色的产品,以及建立一个伟大的公司。 如前所述,初创公司的路非常艰难。他们需要很长的时间和持续的高强度努力。创始人和员工需要有共同的使命感来支撑他们。因此,我们会询问创始人为什么想创办这家特定的公司。 我们也会询问这家公司如何能够成为一家垄断企业。这有很多不同的词汇来表述,但我们采用的是彼得·蒂尔的说法。显然,我们不希望你的公司在面对竞争对手时采取不道德的行为。相反,我们正在寻找那些随着规模的扩大而变得更强大,且难以复制的企业。 最后,我们会询问市场情况。我们会询问它现在的规模,增长速度,以及为什么它在十年后会变得非常大。我们试图理解为什么市场会快速增长,以及为什么这是一个初创公司应该去追逐的好市场。我们喜欢那些刚刚开始出现的大部分人尚未意识到的重大技术变革——大公司在应对这些转变方面做得很糟糕。而有些反直觉的是,最佳策略是在小市场中占据大部分份额。 关于想法,我还有一些其他的想法: 我们更喜欢全新的东西,而不是衍生的东西。大多数真正的大公司都是从一些根本性的新事物开始的(新的一个可以接受的定义是比原来好 10 倍)。如果同时有十家其他公司以同样的计划开始,而且听起来非常像已经存在的东西,我们会有所怀疑。 这其中一个重要的反直觉原因是,做一些新的和困难的事情比做一些衍生的和容易的事情更简单。如果你是前者,人们会想要帮助你,加入你;如果是后者,他们就不会这么做。 最好的想法听起来可能不好,但实际上是好的。所以你不需要对你的想法过于保密——如果它真的是一个好想法,那么它可能不会听起来像是值得被窃取的。即使它听起来像是值得被窃取的,拥有好想法的人至少比愿意付出将伟大的想法转化为伟大的公司所需要的工作的人多一千倍。而且,如果你告诉别人你在做什么,他们可能会帮助你。 说到告诉别人你的想法——虽然这个想法第一次听到时真的能激发一些人的兴趣是很重要的,但几乎每个人都会告诉你你的想法很糟糕。也许他们是对的。也许他们不擅长评估创业公司,或者他们只是嫉妒。无论原因是什么,这种情况会经常发生,它会让你受伤,即使你认为你不会被它影响,你仍然会被影响。你越早建立自我信念,不被恶意评论者过多拖累,你就会越好。无论你多么成功,恶意评论者永远不会消失。 如果你没有创业想法,但是想要创业,怎么办呢?也许你不应该创业。如果首先想法出现,而创业公司是将这个想法推向世界的方式,那会更好。 我们曾经尝试过一个实验,为一批有前途但没有创业想法的创始团队提供资金,希望他们在我们资助他们后能找到一个有前景的创业想法。 所有的尝试都失败了。我认为问题的一部分是,好的创始人往往有很多好的想法(通常是太多)。但更大的问题是,一旦你有了一个创业公司,你就必须赶快想出一个创业想法,而且因为它已经是一个正式的公司,所以想法不能太疯狂。你最终会得到听起来可行但是衍生的创业想法。这就是转型的危险。 因此,最好不要过于积极地强迫自己想出创业想法。相反,去了解许多不同的事物。实践发现问题,看似低效的事物,和主要的技术转变。从事你感兴趣的项目[1] 。尽可能地接触智慧、有趣的人。在某个时候,创业想法会自然出现的。 二、一个优秀的团队 平庸的团队无法打造伟大的公司。我们最关注的事情之一就是创始人的实力。当我过去从事后期投资时,我同样非常关注创始人所雇佣的员工的实力。 什么样的人才是优秀的创始人?最重要的特征包括无坚不摧的毅力、决心、坚韧不拔和足智多谋。聪明才智和激情也排在非常重要的位置。这些都比经验,当然也比“精通语言 X 和框架 Y”更重要。 我们注意到,最成功的创始人都是那种和他们一起工作感觉压力很小的人,因为你觉得“不管是什么事,他/她都能完成。”有时候,你可以凭借纯粹的意志力成功。 优秀的创始人具有一些看似矛盾的特征。一个重要的例子是刚柔并济。你要对公司的核心和其使命有强烈的信念,但对于几乎所有其他事情,你还需要保持非常灵活,乐于学习新事物。 最优秀的创始人反应异常迅速。这是决策力、专注力、强度和执行能力的指标。 ...

July 3, 2023 · 2 min · 344 words · [厉辉(Yousa)](https://github.com/Miss-you)

提升专注力的七种方法

第一,把手机放在看不见的地方:手机已成为现代生活中最大的分心来源。为确保专注力,可以关闭工作用即时通讯软件、退出群聊、取关公众号、卸载容易分心的 APP。通过将手机放在看不见的地方或设置勿扰模式,有助于减少干扰。 第二,寻找一个不易受到干扰和分心的环境:安静、舒适的环境有助于提高专注力。因此,选择图书馆、自习室或安静的咖啡馆进行学习或工作。在家里,可以选择无电视的客厅或书房,避免在卧室或躺在床上学习。 第三,列出分心物清单:在开始工作或学习之前,列出可能导致分心的事物,如电视、游戏、聊天等。意识到这些干扰因素,有助于在工作或学习时保持专注。 第四,想想现在做的事情是否值得消耗注意力:在投入精力之前,评估任务的重要性。分清优先级,考虑投入产出比和任务边界,集中注意力在重要且紧急的事情上。对于长期不做的事情,可以考虑委托给别人或机器,或者干脆不做。 第五,阅读前喝点儿咖啡:适量喝咖啡可以提神醒脑,帮助保持清醒。注意饮用时间和剂量,以免导致失眠。早上喝一杯咖啡,午睡后再喝一杯,既提神又有助于提高新陈代谢。 第六,准备一支笔:在阅读或学习时,手边准备一支笔,以便随时记录笔记、划重点或想到新的想法。没有笔也没关系,可以使用电脑编辑器或 iOS 的提醒事项软件记录想法,避免因寻找笔而分心。 第七,觉知自己走神:在工作或学习过程中,可能会不自觉地走神。根据情况采取相应措施。如果是专注力初学者,需要将注意力拉回;若是心流状态高手,分心可能是因为疲劳,此时需要的是适当休息,例如散步或冥想等。

April 21, 2023 · 1 min · 10 words · [厉辉(Yousa)](https://github.com/Miss-you)

为什么 JSON 需要转义

为什么 JSON 需要转义? [TOC] 适合人群:入门级 JSON 和 JSON 转义 21 世纪初,Douglas Crockford 寻找一种简便的数据交换格式,能够在服务器之间交换数据。当时通用的数据交换语言是 XML,但是 Douglas Crockford 觉得 XML 的生成和解析都太麻烦,所以他提出了一种简化格式,也就是 JSON。 JSON 其结构形如 {"云原生":"Kubernetes"},可以很直观的使用字符串表示对象或数据结构。对象或数据结构使用序列化接口转换成 JSON 字符串,比如 Golang 中的json.Marshal接口。 你可能会有这样的疑问:既然 JSON 字符串结构简单,为什么不直接使用字符串拼接的方式,而是要使用 JSON 序列化接口呢? 结果显而易见:JSON 序列化接口会一并将数据中的特殊字符进行转义,防止其破坏 JSON 原有结构。比如数据中含有双引号"特殊字符,序列化接口便会对双引号进行转义,最终结果类似于{"云原生":"\"Kubernetes\""},否则,该场景下直接拼接的字符串会非法。 JSON 转义 许多程序设计语言把双引号字符(")用作字符串的分界符。反斜线(\)转义字符提供了两种方式来把双引号字符置入字符串中,或者是使用转义序列\"表示单个的"字符本身,而不是作为字符串分界符;或者是直接开始字符"的 16 进制编码值的转义序列\x22来表示",也可以使用 8 进制编码值的转义序列,如\042。 在 Python 中,下面的代码将会产生语法错误 1 print "Cloud Navite "Hello World!"."; 而另一段 Python 代码则会产生符合预期的结果 1 print "Cloud Navite \"Hello World!\"."; 在 JSON 中,也是如此:当使用 json 接口解析字符串{"云原生":""Kubernetes""}时会报错,而解析经过转义的 JSON 字符串{"云原生":"\"Kubernetes\""}则会解析成功。 ...

January 5, 2021 · 3 min · 474 words · [厉辉(Yousa)](https://github.com/Miss-you)

《欧洲绘画五百年》参观有感

生日的时候飞去成都参观成都博物馆正在展出的西方绘画史,庆祝生日,感慨良多,记录下自己的感想 画作主题受限于思想。被神学/基督教控制的文艺复兴初期,画作只能是神祗,颜料也尽显奢华;随着西方文艺复兴给人们带来的思想解放,大家的主题不再局限于神祗,更注重于人本身,比如充满情趣的田园画,肖像画/自画像;随着科技进步,颜料可以带出门,派生出风景画派;大家生活水平提升,画画不再是一定是谋生手段(为达官贵人画肖像画可以填饱肚子),可以画自己想画的东西,主题百花齐放。 吃饱了才能搞艺术。西方文艺复兴以来其艺术中心的变迁:意大利/罗马(文艺复兴)->荷兰黄金时代(荷兰小画派)->巴黎->西欧以及美国百花齐放百家争鸣,其实也对应的是西方十四世纪以来的经济中心的变迁:从东西罗马纵横捭阖,荷兰/西班牙黄金一代/大航海时代,法兰西帝国和日不落帝国,第一次和第二次工业革命英国和美国变为世界的两极。 一个人的成功不仅要靠自身的努力和天分,还要考虑历史的进程以及找对师父。要有天分,很多大家早在十几岁二十几岁其绘画天赋便锋芒毕露;要靠个人努力,大部分在展上的画师无一不是耗费了巨大的精力投入在艺术创作中,年少成名的画师也是十一二岁便要在画师家里当学徒,兢兢业业;要站在巨人的肩膀上,要师从名师/大家,名画家的师父往往也很有名,自学成才的很少,比如高更(月亮与六便士的主角)。 画作充满美感。个人艺术细胞不足,对于艺术性的感受就是,不论是端庄严谨的教会画、轻松愉快的田园画、栩栩如生的肖像画和风景画、百花齐放百家争鸣的现实主义、浪漫主义、象征主义画作,都很美。在场看跟在网上或书上看的感觉完全不一样。 参考链接 欧洲绘画五百年丨高更:被画画拐上“歧路”,却抵达了艺术的神坛

December 28, 2020 · 1 min · 7 words · [厉辉(Yousa)]

从 nginx 热更新聊一聊 Golang 中的热更新

从 nginx 热更新聊一聊 Golang 中的热更新 静态语言在服务器编程时都会遇到这样的问题:如何保证已有的连接服务不中断同时又升级版本? 最近花了点时间看了下 nginx 热更新代码流程,想了下结合之前的经验一并总结下热更新 热更新是什么? 举个例子,你现在在坐卡车,卡车开到了 150KM/H 然后,有个轮胎,爆了 然后,司机说,你就直接换吧,我不停车。你小心点换 嗯。就这个意思 网关中的热更新 服务程序热更新这个问题在层 7 网关中尤其严重,网关中承载着大量的请求,包括 HTTP/HTTPS 短连接、HTTP/HTTPS 长连接、甚至是 websocket 这种超长连接(websocket 通常连接时间会很长,十几分钟到几天不等)。服务进程热更新是非常有必要的。 网关作为一个基础组件,需要保证高可用,是很难将其先停下来再更新的; 有人说可以使用负载均衡将需要更新的组件先隔离,再停机更新,但是如果是一个很小的集群没有负载均衡呢,又或者这样手动一台一台升级也着实麻烦,部分情况下就算隔离了也不过是不会有新的连接过来,旧的连接/请求依旧需要处理完成,否则就会造成部分服务不可用 不过实际上线上操作是集群隔离加热更新一起操作 nginx 热更新 (Upgrading Executable on the Fly) nginx [engine x] 是 Igor Sysoev 编写的一个 HTTP 和反向代理服务器,另外它也可以作为邮件代理服务器。 它已经在众多流量很大的俄罗斯网站上使用了很长时间,这些网站包括 Yandex、Mail.Ru、VKontakte,以及 Rambler。据 Netcraft 统计,在 2012 年 8 月份,世界上最繁忙的网站中有 11.48%使用 Nginx 作为其服务器或者代理服务器。 NginX 采用 Master/Worker 的多进程模型,Master 进程负责整个 NginX 进程的管理。Nginx 的模块化、热更新、Http 处理流程、日志等机制都非常经典。这里将会简要介绍一下热更新的机制 nginx 热升级流程 步骤 1、升级 nginx 二进制文件,需要先将新的 nginx 可执行文件替换原有旧的 nginx 文件,然后给 nginx master 进程发送 USR2 信号,告知其开始升级可执行文件;nginx master 进程会将老的 pid 文件增加。oldbin 后缀,然后拉起新的 master 和 worker 进程,并写入新的 master 进程的 pid。 ...

December 28, 2020 · 13 min · 2624 words · [厉辉(Yousa)](https://github.com/Miss-you)

获取服务器本机 IP 的不同语言实现

C/C++ 版本 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 int CNetOperations::GetLocalIp(__be32 *pLocalIp, const char* pIfName) { if (!pLocalIp || !pIfName) { return (-EINVAL); } int iSocket; iSocket = socket(AF_INET, SOCK_DGRAM, 0); if (iSocket < 0) { return (-errno); } struct ifreq stIfr; memset(stIfr.ifr_name, 0x0, sizeof(stIfr.ifr_name)); strcpy(stIfr.ifr_name, pIfName); int iRet; iRet = ioctl(iSocket, SIOCGIFADDR, &stIfr); if (iRet < 0) { close(iSocket); return (-errno); } (*pLocalIp) = ((struct sockaddr_in *)&stIfr.ifr_addr)->sin_addr.s_addr; close(iSocket); return 0; } golang 版本 shell 版本 最初的想法 ...

November 25, 2020 · 1 min · 128 words · [厉辉(Yousa)](https://github.com/Miss-you)

perf 入门教程(待补充和完善)

perf 使用教程 perf 简介 Perf 是 Linux kernel 中的系统性能优化工具,perf 基本原理的话是在 CPU 的 PMU register 中 Get/Set performance counters 来获得诸如 instructions executed,cache-missed suffered,branches mispredicted 等信息。 perf 本身的工具有很多,这里主要介绍个人在查询程序性能问题时使用的一些工具 包括 perf list、perf stat、perf record、perf report perf list 使用 perf 之前肯定要知道 perf 能监控哪些性能指标吧?那么就要使用 perf list 进行查看,通常使用的指标是 cpu-clock/task-clock 等,具体要根据需要来判断 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 $ perf list List of pre-defined events (to be used in -e): cpu-cycles OR cycles [Hardware event] instructions [Hardware event] … cpu-clock [Software event] task-clock [Software event] context-switches OR cs [Software event] … ext4:ext4_allocate_inode [Tracepoint event] kmem:kmalloc [Tracepoint event] module:module_load [Tracepoint event] workqueue:workqueue_execution [Tracepoint event] sched:sched_{wakeup,switch} [Tracepoint event] syscalls:sys_{enter,exit}_epoll_wait [Tracepoint event] … 不同内核版本列出的结果不一样多。.. 不过基本是够用的,但是无论多少,我们可以基本将其分为三类 ...

November 25, 2020 · 5 min · 994 words · [厉辉(Yousa)](https://github.com/Miss-you)