
使用FlashCache后,I/O性能提升评估可以用以下公式: f(ssd):SSD IOPS f(hdd): HDD IOPS α :Cache命中率 f(flashcache):FlashCache IOPS 说明: 1、Cache命中率α越大,FlashCache IOPS越大; 2、SSD IOPS性能f(ssd)越大,FlashCache IOPS越大; 3、相比SSD IOPS,Cache命中率α越对FlashCache性能影响最大。
READ MORE »使用FlashCache后,I/O性能提升评估可以用以下公式: f(ssd):SSD IOPS f(hdd): HDD IOPS α :Cache命中率 f(flashcache):FlashCache IOPS 说明: 1、Cache命中率α越大,FlashCache IOPS越大; 2、SSD IOPS性能f(ssd)越大,FlashCache IOPS越大; 3、相比SSD IOPS,Cache命中率α越对FlashCache性能影响最大。
READ MORE »这个教学材料,值得收藏和学习。 来源:https://www.seas.harvard.edu/courses/cs20/ 原下载链接:Mathematics for Computer Science 本地下载:Mathematics for Computer Science
READ MORE »在学习客户业务过程中接触到机器学习,本文是基于网上多份材料基础上综合而来,希望能够帮助读者快速了解机器学习的概念、作用、常用算法及与大数据的关系。 作为初学者,理解有偏颇之处,欢迎各位批评指正。 下载链接:机器学习介绍
READ MORE »在块设备上的操作,涉及内核中的多个组成部分,如图1所示。假设一个进程使用系统调用read()读取磁盘上的文件。下面步骤是内核响应进程读请求的步骤; (1)系统调用read()会触发相应的VFS(Virtual Filesystem Switch)函数,传递的参数有文件描述符和文件偏移量。 (2)VFS确定请求的数据是否已经在内存缓冲区中;若数据不在内存中,确定如何执行读操作。 (3)假设内核必须从块设备上读取数据,这样内核就必须确定数据在物理设备上的位置。这由映射层(Mapping Layer)来完成。 (4)此时内核通过通用块设备层(Generic Block Layer)在块设备上执行读操作,启动I/O操作,传输请求的数据。 (5)在通用块设备层之下是I/O调度层(I/O Scheduler Layer),根据内核的调度策略,对等待的I/O等待队列排序。 (6)最后,块设备驱动(Block Device Driver)通过向磁盘控制器发送相应的命令,执行真正的数据传输。 对于(1)、(2)两个步骤,在Linux虚拟文件系统中,我们讨论了VFS(Virtual Filesystem Switch)主要数据结构和操作,结合相关系统调用(如sys_read()、sys_write()等)的源码,我们不难理解VFS层相关的操作和实现。而对于第(3)步中的Mapping Layer需要结合具体的文件系统解释,我们暂时不考虑。 本文主要分析(4)步,就是通用块设备层。 完整文档下载:Linux通用块设备层
READ MORE »我们对系统调用read()非常熟悉,也常听说“零拷贝”。在看Linux内核源码时,有很多人会有一些困惑:比如读文件的整个流程是怎样的?内核是如何Cache已经读取的文件数据?驱动从磁盘上读取的数据是否会直接写到用户的缓冲区中?内核是在哪个地方分配空间来存储将要读取的数据?是在哪个地方将当前进程阻塞,直至读取数据结束?“零拷贝”是如何实现的? 本文以Redhat Enterprise Linux 6 Update 3内核版本2.6.32-279.el6.x86_64为例,分析从用户进程通过read()读取文件,直至数据返回给用户的整个流程。 目 录Table of Contents 1 概述… 4 2 虚拟文件系统与ext4文件系统层… 6 2.1 sys_read()… 6 2.1.1 fget_light()和fput_light()… 7 2.2 vfs_read()… 8 2.3 do_sync_read()… 10 2.3.1 异步I/O.. 10 2.3.2 do_sync_read()… 12 2.4 generic_file_aio_read()… 14 2.5 do_generic_file_read()… 17 2.5.1 address_space->readpage()方法… 24 2.5.2 file_read_actor()… 25 2.6 […]
READ MORE »用户进程通过系统调用write()往磁盘上写数据,但write()执行结束后,数据是否立即写到磁盘上?内核读文件数据时,使用到了“提前读”;写数据时,则使用了“延迟写”,即write()执行结束后,数据并没有立即立即将请求放入块设备驱动请求队列,然后写到硬盘上。 本文以Redhat Enterprise Linux 6 Update 3内核版本2.6.32-279.el6.x86_64为例,分析内核写文件过程。 目 录Table of Contents 1 概述… 4 2 虚拟文件系统与ext4文件系统层… 7 2.1 sys_write()… 7 2.2 vfs_write()… 8 2.3 do_sync_write()… 9 2.4 ext4_file_write()… 10 2.4.1 Ext4文件系统extent特性… 10 2.4.2 ext4_file_write()函数分析… 13 2.5 generic_file_aio_write()… 15 2.6 __generic_file_aio_write()… 16 2.7 generic_file_buffered_write()… 19 2.8 generic_perform_write()… 20 2.8.1 ext4文件系统address_space_operations. 20 2.8.2 […]
READ MORE »在分析sys_write()的源码过程中,generic_perform_write()函数执行完后,会逐 层返回,直至sys_write()返回,系统调用结束。但此时要写的数据,只是拷贝到内核缓 冲区中,并将相应的页标记为脏;但数据并未真正写到磁盘上。那么何时才会将数据写到磁 盘上,又由谁来负责将数据写到磁盘上呢?
READ MORE »《了凡四训》又名《命自我立》,是中国明朝袁了凡先生,结合了自己亲身的经历和毕生学问与修养,为了教育自己的子孙而作的家训,教戒他的儿子袁天启,认识命运的真相,明辨善恶的标准,改过迁善的方法,以及行善积德谦虚种种的效验。他在早期验证了命数的准确性,后来进一步通晓了命数的由来,知道人们可以掌握自己的未来,改造自己的命运。就在他的下半生中,又验证了人们完全可以自我“立命”,自求多福的准确性。不过,光是知命安命是消极的无益的;而自强不息改造命运的“立命之学”则是积极的和有益的。了凡先生以自己改造命运的经验来“现身说法”;读了可以使人心目豁开,信心勇气倍增,亟欲效法了凡先生,来改造自己的命运;实在是一本有益世道人心,转移社会风气不可多得的好书。 献给 – 勇于改造命运的人 “命中注定”,大家耳熟能详。 但 是 真有一个操纵命运的主宰吗? 答案是肯定的 – 那就是“自己”! 人是命运的主人翁, 却常为命运所戏弄! 愿 您 读完此书后, 能走出被命所运的阴霾, 成为一个 勇于创造命运的人! 下载: 白话文版《了凡四训》 简注易解版《了凡四训》 这本书值得大家花3小时认真看一遍,将终身受益。
READ MORE »同样的代码,在ARM64和x86_64分别运行,发现部分计算结果从小数点后17位开始出现不同,双精度浮点运算结果有细微差异。 为了方便定位差异,我们编写一段简单浮点运算代码。 #include <math.h> #include <stdio.h> int main() { double dv[] = {-0.13942759833577333949961030157283, -0.046687081540714665817137785097657, -0.48496455527857718070805503884912, -0.60722091847450498924843032000354, 1, 1, 0, 0, -3.4221570491790771484375}; double dw[] = {0.019916933333333299710465880139054, -0.021317733333333300366208007403657, 0.13007783333333300390677322866395, 0.0013823433333333299752321288167423, 0.11358973333333299837732965897885, 0.21664233333333299258427473432675, -0.078728843333333298204479433479719, 0.31518266666666699959975517231214, 0.10316096666666700609749085515432 }; double dp = 0.0; int i = 0; for(i=0; i<9; i++){ dp += dv[i]*dw[i]; printf("\n========================"); printf("\ndv[%d]:%.32f ", i,dv[i]); printf("\ndw[%d]:%.32f ", i, […]
READ MORE »EvoLve theme by Theme4Press • Powered by WordPress Intelligent Computing Architecture
Research & Innovation