1作者: manjusg9 个月前
Hi HN, 我今年 19 岁,正在开发 VigyanVerse,一个通过结构化的“卡片”来探索知识的 Web 应用。每张卡片都有一个快速摘要 → 更深入的章节 → 如果你感兴趣,还有高级细节。 早期版本:<a href="https:&#x2F;&#x2F;vigyanverse.netlify.app" rel="nofollow">https:&#x2F;&#x2F;vigyanverse.netlify.app</a> 目前的功能: * 通过交互式卡片浏览科学/技术主题 * “深入了解”以获取更详细的解释 * 深色/浅色模式,移动友好的用户界面 * 跟踪浏览量和分享 我希望得到关于以下方面的反馈: * 什么会让你每天都回来使用? * 缺少哪些功能或值得添加哪些功能? * 如何让学习过程更有趣、更令人上瘾? 独立开发,零资金,仅使用 HTML/JS + Firestore + Netlify。
2作者: jkool7029 个月前
注意:这是对[这个](<a href="https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=44568529">https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=44568529</a>)“Show HN”帖子的更新。<p>timep是一个基于调试陷阱的、最先进的 bash 性能分析器,它高效且极其准确。与其他性能分析器不同,timep 记录:<p>1. 每个命令的墙钟时间<p>2. 每个命令的 CPU 时间,以及<p>3. 每个命令的父函数调用/子shell 的层次结构<p>墙钟时间 + CPU 时间的组合使您能够确定特定命令是 CPU 密集型还是 IO 密集型,而分层日志记录为您提供了代码实际执行方式的地图。<p>timep 的突出特点是它将获取这些记录并自动生成一个 bash 原生的火焰图(显示 bash 命令,而不是系统调用)。<p>------------------------------------------------<p>用法<p>timep 极其易于使用 - 只需从 repo 中 source `timep.bash` 文件,并在您想要分析的任何内容前面添加“timep”。例如:<p><pre><code> . &#x2F;path&#x2F;to&#x2F;timep.bash timep .&#x2F;some_script echo &quot;stdin&quot; | timep some_function </code></pre> 对要分析的代码无需进行任何更改!<p>------------------------------------------------<p>示例<p>[将被分析的测试代码](<a href="https:&#x2F;&#x2F;github.com&#x2F;jkool702&#x2F;timep&#x2F;blob&#x2F;main&#x2F;TESTS&#x2F;timep.tests.bash" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;jkool702&#x2F;timep&#x2F;blob&#x2F;main&#x2F;TESTS&#x2F;timep.test...</a>)<p>[该测试代码的输出配置文件](<a href="https:&#x2F;&#x2F;github.com&#x2F;jkool702&#x2F;timep&#x2F;blob&#x2F;main&#x2F;TESTS&#x2F;OUTPUT&#x2F;out.profile" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;jkool702&#x2F;timep&#x2F;blob&#x2F;main&#x2F;TESTS&#x2F;OUTPUT&#x2F;out...</a>)<p>[该测试代码的火焰图](<a href="https:&#x2F;&#x2F;github.com&#x2F;jkool702&#x2F;timep&#x2F;blob&#x2F;main&#x2F;TESTS&#x2F;OUTPUT&#x2F;flamegraph.ALL.svg" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;jkool702&#x2F;timep&#x2F;blob&#x2F;main&#x2F;TESTS&#x2F;OUTPUT&#x2F;fla...</a>)<p>[“forkrun”的“真实世界”测试的火焰图,这是一个用 bash 编写的并行化引擎](<a href="https:&#x2F;&#x2F;github.com&#x2F;jkool702&#x2F;timep&#x2F;blob&#x2F;main&#x2F;TESTS&#x2F;FORKRUN&#x2F;flamegraph.ALL.svg" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;jkool702&#x2F;timep&#x2F;blob&#x2F;main&#x2F;TESTS&#x2F;FORKRUN&#x2F;fl...</a>)<p>在“forkrun 测试”中,使用 28 个并行工作线程在 ramdisk 上为大约 67 万个小文件计算了 13 个不同的校验和。这重复了两次。总的来说,这个测试运行了大约 67,000 个单独的 bash 命令。[这是它的 `perf stat`(不使用 timep)](<a href="https:&#x2F;&#x2F;github.com&#x2F;jkool702&#x2F;timep&#x2F;blob&#x2F;main&#x2F;TESTS&#x2F;FORKRUN&#x2F;perf.compare.txt" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;jkool702&#x2F;timep&#x2F;blob&#x2F;main&#x2F;TESTS&#x2F;FORKRUN&#x2F;pe...</a>)。<p>------------------------------------------------<p>效率和准确性<p>forkrun 测试(请参阅上面的“示例”部分)基本上是 bash 中可能遇到的最苛刻的工作负载。它充分利用了 14c/28t i9-7940x CPU 上的 24.5 个核心,在约 34.5 秒的墙钟时间内累积了 840 多秒的 CPU 时间。在使用 timep 分析这组 67,000 个命令时:<p>1. 使用调试陷阱工具运行代码所需的时间约为 38 秒,仅增加了 10% 多一点。CPU 时间也有类似的增加。<p>2. 配置文件在 +2 分钟(分析运行结束后 1 分钟 + 15 秒)准备就绪<p>3. 火焰图在 +5 分钟(分析运行结束后 4 分钟 + 15 秒)准备就绪<p>请注意,timep 记录了每个命令的“开始”和“停止”时间戳,并且调试陷阱工具在命令的“停止”时间戳和下一个命令的“开始”时间戳之间运行,这意味着配置文件计时中的误差远小于 10% 的开销。比较 perf stat 给出的总(系统 + 用户)CPU 时间(未使用 timep)和 timep 给出的 CPU 时间(从将所有大约 67,000 个命令的 CPU 时间相加得到),差异几乎总是小于 0.5%,并且通常小于 0.2%。我见过低至 0.04% 的情况,这相当于在运行了大约 850 秒 CPU 时间的情况下,仅用了 1/3 秒。<p>------------------------------------------------<p>自上次“SHOW HN”帖子以来的主要变化<p>1. 现在也记录 CPU 时间(而不仅仅是墙钟时间)。这是通过一个可加载的内置程序完成的,该程序调用 `getrusage` 和(如果可用)`clock_gettime` 来高效准确地确定进程及其所有后代的 CPU 时间。<p>2. 使用可加载的内置程序所需的 .so 文件直接构建到脚本中,并具有嵌入的压缩 base64 序列。我还开发了它使用的 bash 原生压缩方案。包括 x86_64、aarch64、ppc64le 和 i686 的 .so 文件。我希望很快也能添加 arm7。火焰图生成器 perl 脚本也被嵌入,使脚本 100% 完全自包含。注意:这些嵌入的 base64 字符串包括生成的 .so 文件的 sha256 和 md5 校验和,这些校验和在提取时进行验证。<p>3. 火焰图生成已完全改进。现在,火焰图 a) 根据运行时进行着色(暖色 = 较长的运行时),b) 对于 CPU 时间 << 墙钟时间的命令(例如,阻塞读取、睡眠、等待等)使颜色饱和度降低,以及 c) 使用运行时加权的 CDF 颜色映射,确保无论底层数据的分布如何,生成的火焰图在颜色空间中具有大致相等的每种颜色量(其中“相等”表示“显示每种颜色的像素数量相同”)。timep 还通过将多个火焰图(显示墙钟时间与 CPU 时间,并使用完整与折叠的跟踪集)垂直堆叠到单个 SVG 图像中来组合它们,从而提供“双堆栈”和“四堆栈”火焰图。<p>4. 后处理工作流程基本上已经完全重写,使其更健壮、更容易理解/维护,并且速度更快。上面链接的“forkrun”测试(运行了 67,000 个命令)以前需要大约 20 分钟。使用新版本,您可以在 2 分钟内获得配置文件,或者在 5 分钟内获得配置文件 + 火焰图 - 速度提高了 4 到 10 倍!
30作者: keepamovin9 个月前