0%

阅读kernel代码的时候,变量很多,尤其是读内存部分代码的时候,传来传去,常常把自己弄晕。改成什么样子了,内存布局到底变成什么了,利用qemu可以在线调试内核,如同用gdb调试app一样,打断点 打印变量值等等。qemu是个基于kvm的模拟器,说虚拟机也可以,android的模拟器,就是基于开源的qemu修改的,下面开始调试的旅程吧。

阅读全文 »

一、 读写缓存Page Cache

Linux对文件读写并不是每次都进行磁盘IO,而是将对应的磁盘文件缓存到内存上,之后对该文件的操作实际上也是对内存的读写。

缓存俗称页缓存(page cache),而被修改过但还没写入磁盘的页缓存称为脏页(dirty page)。查看页缓存可以通过/proc/meminfo查看:页缓存为Cached,脏页为Dirty。

阅读全文 »

连续几年,Rust 在 Stack Overflow 的年度开发者调查中被评为“最喜爱的编程语言”。这种开源系统编程语言现在用于从游戏引擎和操作系统到浏览器组件和虚拟现实模拟引擎的所有事物。但 Rust 也是一种极其复杂的语言,其学习曲线非常困难。

阅读全文 »

系统学习分布式架构设计对于技术人的成长非常关键。对于云原生开发者而言,如何设计出符合云原生设计哲学的应用,往往离不开分布式系统知识与方法论的运用。如何设计出高弹性、可配置、可分布、高性能、高容错、更安全、更韧性、快交付的云原生应用往往是衡量开发者水准的重要参考。

然而,分布式系统是一个很大的概念,从架构设计、研发流程、运维部署、工程效率等多个角度均有很深的知识可以挖掘,学习成本和难度相对较大。

阅读全文 »

Rust编程语言融合了多种编程法(programming paradigm),其中的命令式编程(imperative programming)所用的循环和函数式编程(functional programming)所提供的迭代器(iterator)可以加强数组或是切片的访问性能。

然而,在访问数组或是切片时,迭代器在每次迭代时只会回传元素的值或引用,而不会将索引值也跟着回传出来。这个问题虽然可以通过迭代器的enumerate方法来轻松解决,enumerate会让迭代器回传目前是第几次的迭代(从0开始数),这个次数值可以当作是目前访问到的元素的索引值,只是这样的作法会对程序性能有什么不良的影响呢?

阅读全文 »

RPC调用链可以将远程过程调用变成一个有效的堆栈。

当我们编写应用程序时,我们中的许多人认为REST是服务间通信的一个通用标准。然而,还有许多其他形式的通信,RPC就是其中之一。值得注意的是,通信方式的选择取决于许多因素,如业务需求、遗留代码、技术和预算,更不用说你选择的架构模式。

阅读全文 »

当我们进入软件工程的世界,有一天需要学习软件架构模式的基本知识。当我刚开始编码的时候,我不知道从哪里获得资源来简单介绍现有的架构模式,不是那种太详细和混乱的,而是非常抽象和简单的理解。

这一直是个问题,直到我发现了Mark Richards的《软件架构模式》一书。强烈建议仔细阅读这本书。

阅读全文 »

1. 内存脏页

  • ‘Dirty Quota-Based VM Live Migration Auto-Converge - Manish Mishra & Shivam Kumar, Nutanix India’
    目前qemu的自动收敛实现方式是根据迭代过程中观察到的dirty-rate和网络吞吐量对所有的vcpus进行节流,这导致了–所有的vcpus受到同样的惩罚。
    讲座提出了一种基于单个vcpu “脏污配额” 的新算法,它只惩罚写密集型的vcpus,在网络和脏污率变化的情况下动态适应,并通过允许更精细地控制脏污率来提高收敛性。
阅读全文 »

VDUSE简介

VDUSE(vDPA Device in Userspace)技术是字节跳动2020年10月向 Linux 内核社区正式开源的一项技术,通过VDUSE可以在一个用户进程实现一个软件定义的 vDPA 设备,并可以通过上述 vDPA 框架接入 virtio 或者 vhost 子系统,供容器或者虚机使用。此技术将在Linux 5.15 版本中首次引入。

阅读全文 »