linux-sides-Timers and time management-Introduction

这篇文章 Timers and time management in the Linux kernel. Part 1. 是出自 linux-insides一书中 Timers and time management 章节 Introduction 内核版本比对5.3-rc 进行了相关调整, 增加相关备注 Linux内核中的定时器和时间管理. Part 1. 介绍 这是另一篇文章,它在linux-insides一书中开启了新的篇章。前面的部分描述了系统调用概念,现在是时候开始新篇章了。正如人们可能从标题中理解的那样,本章将专门讨论Linux内核中的“定时器”和“时间管理”。当前章节的主题选择并非偶然。定时器(通常是时间管理)非常重要,并且在Linux内核中广泛使用。 Linux内核使用计时器执行各种任务,例如TCP实现中的不同超时,内核知道当前时间,调度异步函数,下一个事件中断调度和还有更多。 因此,我们将开始学习本部分中不同时间管理相关内容的实现。我们将看到不同类型的计时器以及不同的Linux内核子系统如何使用它们。与往常一样,我们将从Linux内核的最早部分开始,并完成Linux内核的初始化过程。我们已经在特殊的章节-Kernel initialization process中完成了它,它描述了Linux内核的初始化过程,但是你可能还记得我们错过了那里有些东西。其中一个是定时器的初始化。 我们开始吧。 初始化非标准PC硬件时钟 Linux内核解压缩后(更多关于此内容,您可以在内核解压缩部分中阅读)非特定代码开始在init/main.c源代码文件中工作。初始化lock validator后,初始化cgroups并设置canary值,我们可以看到setup_arch函数的调用。 你可能还记得,这个函数(定义在arch/x86/kernel/setup.c)准备/初始化特定于体系结构的东西(例如它为bss部分保留一个位置,为initrd保留一个位置,解析内核命令行以及许多其他事情)。除此之外,我们还可以找到一些时间管理相关的功能。 首先是: 1 x86_init.timers.wallclock_init(); 我们在描述Linux内核初始化的章节中已经看到了x86_init结构。此结构包含指向不同平台的默认设置功能的指针,如 Intel MID,Intel CE4100 等x86_init结构定义在arch/x86/kernel/x86_init.c,正如您所看到的,它默认确定标准PC硬件。 我们可以看到,x86_init结构具有x86_init_ops类型,它为平台特定的设置提供了一组函数,如保留标准资源,平台特定的内存设置,中断处理程序的初始化等。这种结构如下所示: 1 2 3 4 5 6 7 8 9 10 11 12 struct x86_init_ops { struct x86_init_resources resources; struct x86_init_mpparse mpparse; struct x86_init_irqs irqs; struct x86_init_oem oem; struct x86_init_paging paging; struct x86_init_timers timers; struct x86_init_iommu iommu; struct x86_init_pci pci; struct x86_hyper_init hyper; struct x86_init_acpi acpi; }; 备注: 新增以下两个成员 ...

2019-08-07 · 4 min · 796 words · Garlic Space

Airbnb Blog- 分布式支付系统中交易完整性的测量

 这篇文章 Measuring Transactional Integrity in Airbnb’s Distributed Payment Ecosystem 是出自 Airbnb Blog。 由于Airbnb的全球品牌, 其支付生态系统也异常复杂,目前支持190多个国家和全球40种货币, Airbnb与少数网关以及十多个支付机构对接,实现全球支付的覆盖。但是对接的系统中成熟度不通, 对接模式不通, 清算方式不通,而且由于其业务模式要求, 对于一笔付款需要其拆分成两笔交易, 一笔是旅行者支付到平台, 另一个笔是平台支付给房东。 在旅行者支付过程中还会涉及更改, 存款, 分期, 增值税等相对负责的交易, 在通过银行给房主付款过程中由于大多数银行采取批量模式,使得清算过程异常艰辛和漫长。 在此情况下Airbnb打造了自己新的支付网关 参考现有支付平台以及银行系统方式,新的支付网关提供商户,对账报表和流水。 但是传统的工具对账并不充分。尤其是对一些历史交易,比如撤销授权, 虽然不涉及资金但是由于是跨天交易,所以也会影响我们对账交易的范围, 数据量的增加, 从而影响系统性能。 Airbnb这里采用 Hive , Hadoop, HDFS, Airflow, S3 系列工具包, Hive提供类似SQL的界面查询数据,可以大规模的执行map-and-reduce作业。 Hadoop提供可扩展性, 适用于大型不断增长的数据集之间比较, HDFS使我们能够定期快照事务完整性, S3可以做为经济性的数据存储。Airflow是Airbnb自己开发调度工具, 用于协调各个计算步骤从而生产相关报告。 除了保障性机制外, 其还有对应的监控机制主要是通过Druid获取香瓜事务数据, Superset生成自动报告, 通过灵活配置异常检测算法, 能够支持email/slack通知。 交易完整性分析帮助识别调整问题 并有助对系统参数进行微调。 通过以上辅助工具的在保障完整性使得财务报告准确简化运营, 深度学习分析帮助轻松监控分析问题并进行报警 。 未来的一些展望, 针对自动重试, 幂等性(idempotence guarantee )事务跟踪进行了一些探讨。 由于本身工作原因也接触了银行收单方面的工作,接触过银行收单系统, 清算机构,第三方支付系统,在银联出现之前, 普通商户银行卡支付支付要支持多家银行,是需要分别对接各家银行的, 后来出现了银联系统, 我理解就是文中的网关,对于接触过的一些商户对于如果需要支持银行的特殊的交易如分期, 积分, 商户还是要直接对接某一个银行, 而要做跨行,由对接银行链接银联实现跨行,再后来出现了 微信支付, 支付宝支付,其实还是由银行或第三方/第四方支付机构做了这个网关的工作。 随着不断的发展还会出现新的支付方式, 新的网关,必然使得支付系统会越来越复杂。 网关是个不错的选择, 真正能做到网关级别的都是相当多的资源, 当然也会从中获取相应的利益。 前一阵facebook推出的 Libra或许是一个新的解决方案。

2019-07-25 · 1 min · 77 words · Garlic Space

Netflix Blog- 重构视频GateKeeper

 这篇文章Re-Architecting the Video Gatekeeper 是出自 Netflix Technology Blog。 Netflix上的视频需要通过Title Operations 团队的策划,使其遵守的合同;字幕、配音、翻译能够提供给合适的人群;标题名称和概要可供使用和翻译;满足各个国家的成熟度等级(分级)。 Gatekeeper是Netflix的系统, 他通过汇集多个上游系统数据, 应用一些业务逻辑,为每一个国家地区每一个视频状态的输出来完成器规定任务。GateKeeper 设置这些视频是否对用户可见。为Title Operations 指出缺少的内容, 协助其工作。 现存问题: GateKeeper是一个事件驱动的系统,上游系统每个改变都会向GateKeeper发送事件,GateKeep再通过访问每个上游服务来响应事件。可能会出现下问题: I/O 瓶颈 处理延时 事件丢失 而主动扫描处理一些指定目录可以缓解这些问题, 但是增加了更多的事件。 解决方案: 使用技术:Hollow 可以看下这篇文章使用技术 Hollow ( Drew Koszewnik),( 2016年,是这篇的作者) Netflix Hollow是一个java库和工具集,用于将内存数据集从单个生产者传播到许多消费者,以实现高性能的只读访问。 适合小到中级数据集 Hollow 第一阶段: 使用Hollow为每个上游系统在GateKeeper增加缓存, 在指定周期内循环迭代处理所有国家地区的视频,并生成完整输出。 第二阶段: 由于第一个阶段时间片相对较长, 整个数据来自实际数据源,一个迭代周期需要很长时间。需要进一步优化。 将Hollow分为更小时间片单位, 应用程序将每次的更改通过kafka推送 Hollow,辅助周期性的整个数据源扫描来防止数据遗漏。 效果: 性能及可用性提高:消除了I/O瓶颈,提高了性能,单个上游系统故障下可以通过过时数据进行评估。 对于新投产版本,将某一个时间X的数据做为输入, 将其输出结果其与生产版本应用的输出结果进行对比(diffed )来准确判断是否达到预期效果。对于开发,验证,部署都比之前有了很大提高, 安全性方面也比以前架构更高。 在文末也写道将在未来几个季度实现这一目标。 对于文中描述的实时推送,全量补齐方式,实施的项目中也使用过,不过是联机+批量模式:报文从一个系统A实时推送到系统B, 夜间再通过下发批量进行全量更新补全推送时丢失的信息。 对于数据重放到预发布版本,与生产版本比较执行执行结果, 来验证新版本是否达到预期效果,和我现在项目中验证方式不一样, 目前投产后通过实际交易进行验证, 如果能方便将相关数据重放到新版本进行验证,确实将减少不少验证的工作, 不过也需要相应的应用做出相关的改造才可以。

2019-07-22 · 1 min · 61 words · Garlic Space

Netflix Blog- Netflix的应用安全

这篇文章 Scaling Appsec at Netflix 是出自 Netflix Technology Blog Netflix的 应用安全团队的主要服务对象是在云基础架构上发布应用的工程团队, Netflix安全主张:安全是每个产品团队的责任 Netflix安全团队工作主要分为三类: 应用安全运营功能:传统的AppSec活动: BUG赏金分类,测试, 威胁建模,漏洞管理,产品安全。 安全合作伙伴关系:推动整体安全改进降低风险。 应用安全自动化:构建全面的应用程序库并启动自助安全指导。 运营Appsec功能由于存在高度中断,非持续性,过去的几个月,团队进行了重组,分为自动化和合作伙伴小组两个团队。 APPsec自动化队目标是提供 一致,可操作, 自我服务,为开发提供指导。通过Spinnaker 的平台,为开发人员提供单一的视图提供相关操作, 确保应用安全。 安全工作从过去的使用一些传动的DevSecOps方法如:静态代码扫描,动态测试,反模式grep, 转变为使用自动化方式提供自助服务。 合作伙伴小组更关注于与具有高风险的工程和产品团队(例如支付工程)密切合作, 目标是确定安全风险领域, 专注于更大的战略举措从而降低风险。 团队的最终目标是退出运营职责,将工作重点放到自动化和合作伙伴两种工作模式上。

2019-07-13 · 1 min · 30 words · Garlic Space

汇编文件中的CFI指令

这篇文章CFI directives in assembly file (18 Jan 2017), 是出自google 工程师Adam Langley 问题提出: 函数调用栈 1 2 3 4 5 6 7 8 : : | caller's stack | +----------------+ <----$rsp value before CALL | return address | +----------------+ <----$rsp at function entry | caller's rbp | +----------------+ <----$rbp always points here | callee's stack | 函数调用中 调用call指令时将call指令的下一条指令 return address 入栈, 其中return address存放在RIP寄存器中也就是将 RIP入栈,之后进入子函数后会将父函数的栈基地址入栈,其中父函数的栈基地保存在RBP寄存器中。 函数栈调用框架: push rbp mov rbp, rsp ...

2019-07-09 · 2 min · 248 words · Garlic Space

Netflix Blog-令人愉快的用户界面:复活节彩蛋

 这篇文章 Delightful User Interfaces: Easter Eggs 是出自 Netflix Technology Blog 作者分享了网剧《Marvel’s Jessica Jones》最后一季的预告片标题页上设置的动态图特效的(Easter Eggs)的实现方法。 背景中摇摆闪烁的电灯,点击后预告片中的照片由 Jessica Jones和她的朋友,转化为Gregory Sallinge。 而这个特效没有使用视频或者webGL , 是通过css实现的。相比视频10MB,仅需要10kb的css与722kb 图片, 背景图片由5mb压缩到108kb, 没有对效果产生影响。(这里的kb我理解是byte) 下面从三个方面介绍了CSS动态图的实现思路: 1. 开灯效果(Turning on the lights) 使用animation property 通过三张片(关闭,闪烁,开启)图片的切换实现灯泡打开的效果; 通过transform ( (rotateX, rotateX, and translate), 及30帧图片模拟灯泡摇摆。 2. 灯管特效(Lighting: Flare and Flair) border-radius 设置影响边界, and filter: blur(80px) 设置影响区域. mix-blend-mode: 与背景颜色混合, 效果看上去很棒。 3. 背景聚焦(Bringing the background to focus) 使用 clip-path 用一个圆形对图片进行遮挡. 使用 **transition,**展示背景图片。 遇到的问题(求助StackOverflow) 1. 图片不能再某些浏览器分辨率下可以显示,解决方案 , 将opacity过渡到父元素 不仅仅是预告片 UI工程师与设计师的合作将其实现的更为简洁而有创意。

2019-06-27 · 1 min · 72 words · Garlic Space

Netflix Blog-容器的预测性CPU隔离

 这篇文章 Predictive CPU isolation of containers at Netflix 是出自 Netflix Technology Blog 现存问题: 应用在云中共享空间内性能隔离。 解决方案: 操作系统级别的方案: Linux CFS(Completely Fair Scheduler), 公平的方式将正在运行的进程分配给CPU时间片。 方案问题: 应用规模: millions of containers on thousands of machines 。 千台以上的机器上运行百万级别的容器。 组合优化: 数学中 组合优化 combinatorial optimization方法解决, 给定一组K个容器,每个容器在具有d个线程的实例上请求特定数量的CPU,目标是找到大小为(d,K)的二进制分配矩阵M, 使得每个容器获得它请求的CPU的数量。 可以使用的一些策略如: 避免将容器分散到多个NUMA socket; 尽量减少超线程 平衡L3 的缓存压力 减少容器的防止决策的操作 实现: 通过Titus是Netflix的容器平台, 管理容器 使用Linux cgroup实现CFS为每个容器操作的策略。 用户空间通过 titus-isolate Titus子系统定义三个优化时间: add:新增容器; remove:移除完成的容器, rebalance:根据CPU使用率重新评估放置策略; 每次发生时间后, 触发远程查询优化动作, 通过查询GBRT模型, 通过上下文功能 与容器关联的元数据:谁启动它,图像,内存和网络配置,应用程序名称等,以及CPU Accounting Controller(统计cgroup cpu使用情况)来预测未来10分钟内 每个CPU 95%使用率。 使用用cvxpy作为前端,将预测送入MIP(混合整数程序)求解。 服务将放置策略返回主机, 主机通过修改容器的cpusets来执行它。 后续: 支持 CPU超额预定(CPU oversubscription) 利用内核PMC事件来更直接地优化最小的缓存噪声

2019-06-20 · 1 min · 75 words · Garlic Space

什么是RCU :API

详解 Linux 内核 RCU 的 API 接口和使用方法

2019-06-15 · 1 min · 55 words · Garlic Space

什么是RCU:用法

RCU 在实际场景中的使用方法和最佳实践

2019-06-12 · 3 min · 435 words · Garlic Space

什么是RCU

深入理解 Linux 内核 RCU(Read-Copy-Update)机制的基本原理

2019-06-02 · 2 min · 235 words · Garlic Space