为什么放弃inoreader

在经过漫长的鸽期之后吾辈又回到了博客上,也只有慢节奏的生活享受得起写博客这么奢侈的消遣了。秉持着高效摸鱼(bushi)获取信息的原则一直在使用RSS订阅各种新闻源和博客,从Feedly到TTRSS再到Inoreader再到Yarr也算是经过了许多番的折腾。在订阅了Inoreader一年的基础会员快到期的时候为什么又换用(折腾)了Yarr,下面是吾辈的理由(借口 bushi)。

到期了

这是一个很现实的问题,特别是放在降本增效,开源节流大行其道的今天。虽然inoreader基础版的会员并不贵但是由于薅了腾讯云3年服务器的羊毛,作为一个高级self hosted OPS工程师,还是更倾向于使用一个能够自建的RSS工具。

基础版功能有点弱

虽然说吾辈对于RSS工具的要求没有那么高,但是在Inoreader订阅即将到期的时候却被其狠狠的伤害了一通。

惰性加载的RSS源

lazy load作为一个经典技术一直被大家所使用,但是却被inoreader用在了不应该出现的地方,因为吾辈订阅了淘宝的数据库内核月报但是却许久没有收到,在一个神秘的午后受到RSS之神的号召点开订阅源看了一下更新频率竟然是0/周,当我以为是淘宝也鸽了的时候inoreader却像感受到了什么一样一口气把之前遗漏的内容一口气全都推了过来。啊,这。。

信任危机

当信任危机出现之后就很难弥补了,毕竟我也不知道还有哪些应该在更新的内容被你lazy load了。而看了一眼PRO会员之后我就决定开始再次背上行囊寻找新的RSS工具了。

为什么放弃TTRSS

TTRSS作为一个自建RSS领域不得不提的工具,确实久经考验。在inoreader之前吾辈也是他的忠实用户,而当时抛弃他的原因有以下两个:

自建使用子路径反代有问题

当时作为一个初级self hosted OPS工程师对Nginx并没有那么的熟练,而且大学的时候TLS证书还是一个稀罕玩意儿,所以当时只签了www这一个二级域名的证书放在服务器上,于是便尝试把TTRSS放在/ttrss的子路径之上,期间历经波折甚至还fix了一波Awesome TTRSS文档错误。不过最终也没有能够完美的解决这个问题,还是有许多请求会404(比如点标题不能去原网页)。

CF 5秒盾

虽然折腾了很久的反代而且问题没有完美解决,但是也勉强能用。而真正让我放弃TTRSS转投inoreader并给他打钱的原因是某个新闻源加上了CF的5秒盾,这一下就导致了内容完全没办法看。于是在遍历了许多其他的RSS工具之后还是凉心发现投入了inoreader的怀抱。

Yarr - 简单才是最好的

第一次看到这个工具的时候觉得其过于的简单了,但是在看到作者的这个issue-yarr is feature complete之后,便勾起了我的好奇心。我倒要试试是不是complete了。

启动,导入,刷新订阅源。

虽然界面简洁,但是确实包含了全部需要的功能。

并且还有read here这么杀手级的feature,直接就给我拿下了。

沉浸式翻译插件

在ChatGPT风靡的这段时间,无意中看到了这个沉浸式双语网页翻译扩展的插件。当使用PPAP法则对这两者进行操作之后,我意识到,革命确实到了。

GPT3.5

之前很少看英文网页的原因无非是英文水平太差(queshi),而谷歌翻译也是非常的拉胯,作为翻译日常信息源来说。但是GPT3.5的翻译质量不能说原地踏步吧只能说是突飞猛击了,在整合上这个网页内翻译的插件,对于阅读英文信息源来说,只能是,诶,起飞,怎么说

革命的见证者

当然眼见为实,在read here配合上沉浸式翻译插件之后,我的阅读体验提升了九倍甚至十倍有余。

总结

当然,折腾之路永不停止,这也只是可能今年最好的方案。如inoreader的pro会员可以整合GPT翻译甚至量子速读功能的话,我也必然会继续乖乖交钱。因为GPT确实是这几年以来令我最激动并且能够带给我最多实质性收益的科技进步了。

00

不存在完美的GC

GC停顿时间比较

关注点

衡量垃圾收集器的三项最重要的指标是:内存占用(Footprint)、吞吐量(Throughput)和延迟(Latency),三者共同构成了一个“不可能三角”。

找到垃圾

引用计数

  • 循环引用问题
    • C++ 智能指针

可达性分析

  • GC Root

    • 在虚拟机栈(栈帧中的本地变量表)中引用的对象
    • 在方法区中类静态属性引用的对象
    • 在方法区中常量引用的对象
    • 在本地方法栈中JNI引用的对象
    • Java虚拟机内部的引用,如基本数据类型对应的Class对象
    • 所有被同步锁(synchronized关键字)持有的对象
    • 反映Java虚拟机内部情况的JM XBean、JVM TI中注册的回调、本地代码缓存等
  • 非死不可

    • finalize()
    • 虽然有但是不推荐使用
  • 并发可达性分析:三色标记

    • 并发扫描时的对象消失问题
      • 增量更新(Incremental Update)
      • 原始快照(Snapshot At The Beginning, SATB)
    • 浮动垃圾

如何回收

分代收集理论

  • 弱分代假说(Weak Generational Hypothesis):绝大多数对象都是朝生夕灭的。
  • 强分代假说(Strong Generational Hypothesis):熬过越多次垃圾收集过程的对象就越难以消亡。
  • 跨代引用假说(Intergenerational Reference Hypothesis):跨代引用相对于同代引用来说仅占极少数。

但是也有反例或者说不使用这个理论的对象:缓存(LRU)

算法

  • 标记-清除算法
  • 标记-复制算法
  • 标记-整理算法

流程

  • 根结点枚举
    • 必须STW
    • 安全点
      • 抢先式中断
      • 主动式中断
    • 安全区域:安全点的扩展

记忆集与卡表

为解决对象跨代引用所带来的问题,垃圾收集器在新生代中建立了名为记忆集(Remembered Set)的数据结构,用以避免把整个老年代加进GC Roots扫描范围

  • 如何维护
    • 写屏障

垃圾收集器

  • Serial收集器
    • 单线程
  • Serial Old收集器
    • 老年代版本
  • ParNew收集器
    • Serial的多线程版本
  • Parallel Old收集器
    • 老年代版本
  • Parallel Scavenge收集器
    • 关注吞吐量
    • 自适应调节策略
  • CMS收集器
    • 以获取最短回收停顿时间为目标的收集器
    • CMS收集器对处理器资源非常敏感
    • CMS收集器无法处理“浮动垃圾”
    • 大量空间碎片产生
  • Garbage First收集器
    • 基于Region的内存布局形式
    • 能够建立起“停顿时间模型”(Pause Prediction M odel)的收集器
    • 追求能够应付应用的内存分配速率(吞吐率优先)
  • Shenandoah收集器
    • 在任何堆内存大小下都可以把垃圾收集的停顿时间限制在十毫秒以内的垃圾收集器
  • ZGC收集器
    • 在尽可能对吞吐量影响不太大的前提下,实现在任意堆内存大小下都可以把垃圾收集的停顿时间限制在十毫秒以内的低延迟

G1GC

  • 极易调整,只需要设定最大停顿时间(默认200ms)
  • 混合GC(Mixed GC)
  • 在满足吞吐量的情况下尽可能少的GC
  • 写屏障,脏卡队列,使用细分线程来更新记忆集(remember set)
  • 避免full gc
  • 避免大对象分配
  • eden区会因为混合GC缩小,需要关注应用程序线程利用率

Shenandoah GC

SATB屏障(buffer)和两段并发标记

实现并发拷贝的技术点:指针引用转发

ZGC

ZGC设计:

指针染色(colored pointers)

GC阶段STW过程:

堆外表维护引用 like 指针引用转发

线程本地握手

经典技术回顾

cpu设计历史

  • 流水线 ILP
  • 功耗
  • 存储系统结构设计
  • 向量 SIMD GPU 大数据流并行结构
  • 互联网数据中心
  • 移动计算
  • 面向领域硬件

体系结构经典技术

  • 流水线
  • 动态调度
  • Cache
  • 向量机
  • RISC
  • 多发射 乱序执行
  • EPIC
  • SMT 同时多线程
  • CMP 片上多核

性能参数计算

  • 程序执行时间 = 指令 x(周期/指令)x(时间/周期):并不独立 互相相关
    • IC x CPI x CCT
    • CPI = base + stalls
  • 功耗 = 动态功耗 (电容 x 电压 x 主频)+ 静态功耗 (漏电流功耗)

CPU指令类型

  • logical
  • loads store
  • control flow

现代处理器核设计技术基础

  • Pipelines
    • 5级流水线 MIPS R3000
    • 优点 提高主频
    • 缺点 长短指令时间一致 导致停滞
      • 改进: 更深的流水线
      • 更宽的流水线 超标量流水线
      • 切分流水线
      • 乱序执行
      • 分支预测
    • 限制
      • 流水线寄存器延迟
      • 每个阶段不对等
      • 时钟漂移
      • 57级之后没有收益(功耗爆增)
    • Amdahl’s Law
  • Branch Prediction
    • BHT 转移历史表 + 译码
    • BTB 转移目标缓冲器
  • Register Renaming
    • tomasulo algorithm
  • Out-of-Order Execution
  • Re-order Buffer
  • Data Parallel Processing SIMD / Vector Extensions

存储系统设计:高速缓存

存储层次结构:

  • 寄存器
    • 逻辑寄存器
    • 物理寄存器
  • Cache TLB
    • why: memory wall
    • 经典组织结构
      • 三级缓存
    • 操作策略
      • 放置
        • 全关联
        • 直接映射
        • 多路组关联
      • 识别
        • 低位index(增加辨识度) 高位tag
      • 替换
        • LRU
        • RAND
        • FIFO
      • 写策略
        • 写通过
        • 写回
    • 性能 AMAT
      • 降低缺失率
        • 必然缺失 冷启动缺失
        • 容量缺失 -> 增加块大小
        • 冲突缺失 -> 提高关联度
        • 一致性缺失(多核)
    • 功耗
  • Memory
  • Disk
  • 网络存储

局部性原理:存储层次结构的基础

  • 时间局部性
  • 空间局部性

高速缓存优化策略

  • multi-level cache 多级cache
    • 针对每级cache做不同的优化
  • victim cache
    • 使用小cache保存L1丢弃的数据
  • pseudo-associative cache 伪关联
    • cache分块 猜测多次(猜测预测)
    • 缺陷 流水线难设计 猜测算法难设计
  • skew-associative cache 斜关联
    • 每路cache使用不同的index hashing
    • 缺点 hash函数延迟
  • non-blocking cache
    • 缺失发生时继续提供命中
  • critical word first 关键字优先
    • 优先发送缺失的字
  • prefetching
    • 硬件预取
    • 软件预取
  • multi-ported cache

优化方向

  • 降低缺失率
  • 降低缺失损失
  • 降低cache命中时间
    • 片上多级cache
    • 加速地址翻译
    • cache访问流水线

存储系统设计:主存储器

没有miss rate 只关注命中时间
操作类型:

  • LD/ST
  • DMA(直接内存访问)

RAM:

  • SRAM 用于L1/L2 cache
  • DRAM 用于主存

Memory Bank:

  • 解码读取一行
  • 选中行
  • 读取某些列
  • 输出
  • 回填数据

memory access:

  • active
  • read
  • write
  • precharge
  • refresh

burst:

  • 每次读多列
  • channel时钟比核心快

时序约束

  • tRCD 打开行读到行放大器时间
  • tCAS 打开一列到数据选出
  • tCCD 两次列命令时间间隔
  • tRP precharge时间
  • tRAS 行保持开放的时间
  • tRC 行的周期时间 = tRP + tRAS 访问不同行的最小时间间隔

rank: 片选bank
channels: 内存通道
NUMA topology: non-uniform memory access
DRAM controller 功能:

  • 翻译请求到dram命令
  • 缓存和调度请求
  • 保证操作正确(刷新)
  • 管理功耗

flash storage

是一种非易失存储器
是EPROM和EEPROM的升级产品
分类:

  • NAND
  • NOR

ISA tradeoffs

提供给程序员使用的指令集合
design point:

  • leads to tradeoff in both ISA and uarch
  • cost
  • performance
  • maximum power consumption
  • energy consumption
  • availability
  • reliability and correctness
  • time to market

soul of computer architecture:

  • ISA level tradeoff
  • 微体系结构权衡
  • 系统和任务级权衡

different ISA:

  • x86
  • PDP
  • VAX
  • IBM 360
  • CDC 6600
  • SIMD
  • VLIW
  • Power PC
  • RISC: alpha MIPS SPARC ARM

instruction:

  • basic element of HW/SW interface
  • 构成:
    • 操作码
    • 操作数

elements of ISA:

  • sequencing model
    • control flow vs data flow
  • processing style:
    • number of operands an instruction operates
    • 0,1,2,3 address machines
      • 0 stack machine
      • 1 accumulator machine
      • 2 2-operand machine
      • 3 3-operand machine
  • instructions
    • opcode
    • operand specifiers (addressing modes)
  • data types
    • definition
    • integer floating point
    • doubly linked list, queue, string, bit,vector
  • memory organization
    • address space
    • addressability
      • byte
      • bit
      • 64-bit
      • 32-bit
    • support for virtual memory
  • registers
    • how many
    • size of each register
  • load/store vs memory/memory
  • addressing modes
    • absolute
    • register indirect
    • displaced or based
    • indexed
    • memory indirect
    • auto inc/dec
  • how to interface with I/O devices
    • memory mapped I/O
    • special I/O instructions
  • privilege modes
    • user
    • supervisor
  • exception and interrupt handling
  • virtual memory
  • access protection
  • instruction length
    • fixed length
    • variable length
  • uniform decode
    • uniform
    • non-uniform
  • number of registers
  • addressing mode

availability & reliability

reliability:

  • MTTF: mean time to failure
  • MTTR: mean time to repair
  • MTBF = MTTF + MTTR

availability = MTTF / (MTTF + MTTR)
types of faults:

  • hardware
  • software
  • operator errors
  • environment factors
  • security breaches
  • planned service events

performance engineering

steps:

  • measurement
  • analysis
  • improvements
  • repeat

performance:

  • IPC
  • IPS
  • QPS
  • execution time
  • AMAT: average memory access latency
  • fairness,priorities

power:

  • watts
  • instructions

evaluation choices:

  • real experiments
  • using analytical models
  • using a simulator

on-chip networks

shift to multicore 单核很难提升
amdahl law:串行部分影响加速比
design:

  • topology
    • bus 总线
    • crossbar 交叉开关网
  • flow control
    • messages,packets,flits,phits
    • bufferless
      • circuit switching
      • dropping
      • misrouting
    • buffered
      • store and forward
      • virtual cut through
      • wormhole
      • virtual channel
  • router microarchitecture
  • routing
    • deterministic
    • adaptive
    • minimal
    • deadlock free

cache coherence

communication models

  • shared memory
  • message passing

implementing
tow rules:

  • write propagation 写传播
  • write serialization 写顺序 有顺序且所有处理器都看到同一顺序

如何保证写传播

  • 写无效
  • 写更新

跟踪缓存状态和序列化

  • 基于侦听
    • VI协议
    • MSI协议
    • MESI协议
    • MOSI
    • MOESI
  • 基于目录

memory consistency

顺序一致性模型
松散一致性模型:

  • load 越过 load
  • load 越过 store
  • 允许store乱序执行
  • store越过load

单核优化技术在多核存储一致性上遇到的问题:

  • store buffer
  • store lod bypassing
  • non FIFO store buffers
  • non blocking caches
  • register renaming
  • speculative execution 推测执行
  • address speculation 地址推测
  • store atomicity
  • causality

弱一致性模型 + 内存保护指令

超算

GPU

领域特定架构

0%