2016-12-09
In-kernel memory compression 翻译:内核内实现的内存压缩

(发布于 April 3, 2013, 意译于12/9/2016)


阿姆达尔定律告诉我们一个计算机系统肯定存在一个瓶颈。历史上,对于很多工作负载这个瓶颈都是cpu,所以人们在不断提升cpu性能。所以现在,渐渐地,ram成为了瓶颈。有时当数据在ram和disk之间来回传递时,cpu就在一边干瞪眼呢。增大ram有时并不是一个好的或者经济的做法,更快的I/O或者ssd可以缓解问题,但是不能消除这个瓶颈。

如果可以增大ram中数据的有效容量,不是很好吗?既然cpu闲置,也许我们可以拿闲置的cpu周期来专注这件事。这就是内核内压缩的目标:用闲置的cpu周期来做ram中的压缩和解压缩。

算上刚刚发布的zswap,现在有3个内核内实现的压缩方法在被建议merge到内核的内存管理(memory management, MM) 子系统:zram, zcache和zswap。乍一看可能会让人觉得一个就够了吧,但是他们三个却有很大的不同,可能面向着不同的用户群。所以就像现在内核中存在很多文件系统一样,有一天内核中也会存在多种压缩方案吧,不过这还得李纳斯大神和主要的内核开发者说了算。。。为了方便说明,本文把这些方案统称“zproject”,并对比了这些方案。我们先说明一些关键原则和压缩遇到的挑战。然后我们会从三个层次说明并详细地阐释这些zprojects设计上的不同选择,之后我们还讨论zprojects怎么和内核其他部分交互,最后给出结论。

压缩基础

要让压缩在内核中工作,内核必须把字节序列放入内存中再压缩,之后内存中也应保有压缩后的版本,以备这些数据被再次使用。压缩状态下的数据不能被读写,所以对压缩版本的数据再进行解压缩后才能继续读写这些数据。

字节序列压缩多少都可以,但还是以一个固定大小的单元压缩较方便。贯穿整个内核的一种基本的存储单元是page,一个page由PAGE_SIZE个字节组成,通常的linux支持的架构中,page的大小是4KB。如果这个page对准了PIGE_SIZE的地址分界,那么它就被称为page frame。对于每个page frame,内核在ram中都有相应的struct page结构。所有这三个zprojects都用page作为压缩的单元,并且通过开辟和管理page frames来存储压缩页。

有很多可用的压缩算法,但总的来说,高压缩比意味着高cpu周期,运行的快的算法一般压缩比较低。在时间效率和压缩率之间做出权衡很重要。这三种zprojects,默认都使用内核lib/文件夹中的LZO(1X)算法,这种算法做出了很好的权衡。然而,算法的选择还是很灵活的,也许cpu运行的算法还会被一些特殊架构的硬件压缩引擎取代呢。

一般,存在一些数据一会儿压缩一会儿解压缩的循环,数据序列大概和序列中的字节数成正比。因为页比较大,页压缩和解压缩都是很昂贵的操作,所以我们希望限制这些操作的数量。因此我们必须谨慎的选择哪些页要被压缩,尽可能找到那些可能会被再次用到同时最近不会用的页,以免把cpu时间浪费在重复的压缩然后立刻又解压缩上。因为压缩页不能直接访存某个字节,我们必须要保证内核清楚地辨识出哪个是压缩页,避免对压缩页中的字节尝试cpu的线性地址操作,同时保证压缩页可以被找到并可以在被访问时解压缩。

Read More
 2016-11-16
Shell脚本中进行多行注释的方法

我发现。。shell脚本貌似不像C或者Python一样自带注释语法,不过拐弯抹角还是有一些方法的。。囧

方法1:利用逻辑语句

利用了逻辑语句的执行顺序,缺点是注释中不能出现括号,否则会报错!

###逻辑或前如果为真,后边的语句块自动不执行
#1
:||{
 注释内容...
}
#2
((1))||{
 注释内容...
}
#3
true||{
 注释内容...
}
###逻辑与前如果为假,后边的语句块自动不执行
#4
((0))&&{
 注释内容...
}

Read More
 2016-11-12
两台服务器间SSH或SCP实现无密码登录或文件传输

最近由于需要实现从一个客户端电脑定时远程上传图片到阿里云服务器的功能,需要实现SCP的免密码传输。所以查资料并做了一个记录,希望对大家有帮助。

步骤

1.Client上某用户执行ssh-keygen命令,生成建立安全信任关系的证书

ssh-keygen -b 1024 -t rsa

这里如果~/.ssh/id_rsa.pub 已经存在,说明以前已经生成过,可以直接跳过这步。

2.将公钥证书id_rsa.pub内容复制到Server某用户的~/.ssh/authorized_keys目录中

## 方法1
scp -p ~/.ssh/id_rsa.pub  [username]@[server_ip]:[user_home]/.ssh/authorized_keys
## 方法2
client: cat ~/.ssh/id_rsa.pub #然后复制它
server: vim ~/.ssh/authorized_keys #然后粘贴保存

3.使用方法

#已经不需要输入密码
#比如ssh登录:

Read More
 2016-11-02
qemu/qemu-kvm/qemu-system-x86_64/qemu-x86_64命令的区别?

刚想玩玩kvm,结果分不清这几个命令。。搜了一下,记录下来,希望对大家有帮助。

摘抄

1

在老版本中有单独的qemu-kvm模块存在,结合qemu一起做虚拟机工作。在后续新版本中,已经将qemu-kvm模块完全合并到qemu中去。因此当需要使用kvm特性时候,只需要qemu-system-x86_64 启动命令中增加参数 --enable-kvm参数使能即可。

(http://blog.csdn.net/tantexian/article/details/41281171)

2

I asked the mailing list, here's what I got:

qemu-arch like /usr/local/bin/qemu-x86_64 is for running a program of that arch on the host machine of what ever arch, but not a virtual machine qemu-system-arch like /usr/local/bin/qemu-system-x86_64 is for running a system of that arch on the host machine to enable kvm support, qemu parameter -enable-kvm is needed, libvirt should have taken care of this if right xml is configured

Thanks Jakob for the answer in the mailing list.

(http://serverfault.com/questions/767212/difference-between-qemu-kvm-qemu-system-x86-64-qemu-x86-64)

意思是,类似qemu-x86_64这种命令是运行某种架构的程序的,qemu-system-x86_64是运行某种架构系统的(虚拟机),如果需要kvm支持,需要加上参数 -enable-kvm, 如果使用libvirt可以配置相应的xml来实现kvm支持。

Read More
 2016-04-02
Jc的sed简单入门/sed命令总结

这是我学习sed的一个总结,只限于自己和比我水平低(就是没接触过)的同学看。。。除了参考资料,讲解也包括很大成分的个人理解,如果发现错误,希望大家可以提醒我及时更正,谢谢~!

sed概述

sed是一个流编辑器,更准确的说是一个行编辑器,就是sed处理文本处理命令用于逐行处理文本中的文字。

这是sed命令的格式: sed [options] [commands] [input-file]

就是说sed命令一般由“sed”、选项、命令和待处理文本文件组成。 举个例子: 对于文本test.txt:

this is the first line.
the 2nd line.
hello, this is the 3rd line.

命令sed -n '/hello/p' test 就会产生以下输出:

hello, this is the 3rd line.

其中-n选项表示屏蔽sed默认输出。单引号中/hello/表示匹配带有hello的行p代表打印所匹配的行。

sed执行的流程

  1. 读取一行到模式空间缓冲区

Read More
 2016-03-29
Jc的常用Git命令记录

常用git,做个记录,方便查询,利人利己,如有错误,欢迎指正~

创建仓库

git init 创建仓库

git clone xxx.git(远程库的地址) 克隆一个远程仓库

git remote add origin xxx.git(远程库的地址) 指定一个远程仓库地址,命名为origin

提交更改

git rm file_name 删除文件

git add file_name 添加文件到仓库暂存区(index)

git commit -m xxx 提交更改给仓库

git commit -am xxx 上两条的终极合体,添加所有已追踪文件的更改到暂存区,并提交 git log 显示提交日志

git status 显示当前仓库状态

git push [-f] [remote_name] [branch_name] 上传到远程仓库,加-f表示强制覆盖远程仓库的上传(要谨慎)

Read More
 2015-12-10
LeetCode第26/27题:Remove Duplicates from Sorted Array和Remove Element 总结

 题目一

Given a sorted array, remove the duplicates in place such that each element appear only once and return the new length.

Do not allocate extra space for another array, you must do this in place with constant memory.

For example, Given input array nums = [1,1,2],

Your function should return length = 2, with the first two elements of nums being 1 and 2 respectively. It doesn't matter what you leave beyond the new length.

  • 大意:给定一个已排序的数组,在原数组上移除重复元素,让每个元素只出现一次,返回新数组的长度。(注意:不要申请新数组,必须用原数组的常数空间)比如:输入[1, 1, 2],返回length = 2

思路

注意实在原位修改,所以不能定义一个列表然后append。其实我们可以直接在原列表从0开始记录,因为遍历过程中,不可能出现所修改的元素位置比所遍历的位置靠后的情况。

比如
1 1 2 2 2 3 4
现在遍历到了3的位置,我们把3实际写到了第2个位置(从0开始)
数组此时实际为:
1 2 3 2 2 3 4
遍历位置永远比写入位置靠后或相同
所以只需要记住当前的遍历位置和写入位置两个位置即可

Read More
 2015-12-10
Galileo开发板+opencv+微信公众平台实现简单的物联网家庭监控(2)

紧接上篇文章(《Galileo开发板+微信公众平台实现简单的物联网家庭监控》( http://blog.jcix.top/2015-11-27/galileo_wechat/ ) ), 以下功能做了改进:

  • 实现了Galileo开发板上用USB摄像头+python版opencv监控并通过微信公众平台进行异常报警的功能。
  • 通过connman实现了wifi网络的自动连接和随时修改功能。
  • 通过post到服务器,实现了微信控制led灯亮、灭或者光控的功能。

视频监控功能的实现

(完整代码在github: https://github.com/zhangjaycee/galileo_pys/blob/master/cam_wechat.py )

1.图像采集

galileo支持python的opencv库,这给简单的图像处理提供了极大的便利。 图像采集:

cap = cv2.VideoCapture(0)#打开摄像头
cap.set(3,320)
cap.set(4,240)
while True
    ret, frame = cap.read()

2.图像处理

我们要做键控,所以可以记录第一帧,然后通过帧间差别进行报警。

cap = cv2.VideoCapture(0)


[show0]:http://blog2.jcix.top/static/img/2015121001.png
[show1]:http://blog2.jcix.top/static/img/2015121002.png
[show2]:http://blog2.jcix.top/static/img/2015121003.png

Read More
 2015-12-10
Intel Galileo开发版PCI-e无线网卡wifi配置

由于网上很多配置wifi的方式在我的伽利略开发板上都行不通,最后终于找到这个可以用的“冷门”办法:

系统配置

开发板: Intel Galileo gen2 无线网卡:PCI-e intel wifi link 5100 开发板系统: EGLIBC based Linux(download)

所用工具

硬件:

usb无线网卡或者pci-e接口的无线网卡。 (注意如果你用的是和我一样的pci-e网卡,注意顺便买来天线接上,不然信号贼弱,这种网卡不接天线是不行的。)

软件:

comman(开发板的完整版linux已经内置)

参考:

《connman百度百科》( http://baike.baidu.com/link?url=3C6RQqswxVvGMxNy7XA1-bWUBU6W0G7_Rvvsv2DRyv04nontgZ9oX7MRgeeNvMuRmjRMqf75_tqspSgjhb8Ysa )

Read More
 2015-12-09
LeetCode第24/25题:Swap Nodes in Pairs和Reverse Nodes in k-Group总结

题目一

Given a linked list, swap every two adjacent nodes and return its head.

For example, Given 1->2->3->4, you should return the list as 2->1->4->3.

Your algorithm should use only constant space. You may not modify the values in the list, only nodes itself can be changed.

× 大意: 给定一个链表,依次交换两个相邻节点,并返回头节点。 比如: 1->2->3->4 交换后应该为 2->1->4->3.

思路

交换前:
O->A->B->C->D->E
^  ^  ^  ^
p  p1 p2 p3
交换后:
O->B->A->C->D->E
^  ^  ^  ^
p  p2 p1 p3

Read More
 2015-12-10
Galileo开发板+opencv+微信公众平台实现简单的物联网家庭监控(2)

紧接上篇文章(《Galileo开发板+微信公众平台实现简单的物联网家庭监控》( http://blog.jcix.top/2015-11-27/galileo_wechat/ ) ),以下功能做了改进:实现了Galileo开发板上用USB摄像头+python版opencv监控并通过微信公众平台进行异常报警的功能。通过connman实现了wifi网络的自动连接和随时修改功能。通过post到服务...

Read More
 2015-12-10
Intel Galileo开发版PCI-e无线网卡wifi配置

由于网上很多配置wifi的方式在我的伽利略开发板上都行不通,最后终于找到这个可以用的“冷门”办法:系统配置开发板: Intel Galileo gen2无线网卡:PCI-e intel wifi link 5100开发板系统: EGLIBC based Linux(download)所用工具硬件:usb无线网卡或者pci-e接口的无线网卡。(注意如果你用的是和我一样的pci-e网卡,注意顺便...

Read More
 2015-11-27
Galileo开发板+微信公众平台实现简单的物联网家庭监控

上次写的博客,介绍了下刚拿到galileo开发板的时候如何进行折腾。上次折腾完后,因为我发现galileo本身和一个装着linux的arduino/pc一样,那么用它来实现一些物联网应用会比较简单,又赶上本学期的工程设计课作业,所以初步实现了一个能用微信监测室内温度和拍摄室内照片的小型物联网系统。参考:《鼓捣Galileo开发板的一些吐槽》( http://blog.jcix.top/201...

Read More
 2015-11-04
鼓捣Galileo开发板的一些吐槽

这几天折腾伽利略开发板,写下一些吐槽,以便以后再看到这篇博客,仍然能记起这些值得吐槽的地方。。。也希望看到这篇博客的人能够因此少些吐槽( ╯□╰ )。。网上其实是有不少资源的,但是相对其他更热门的板子,显然找资料并不是和喝白开水一样简单,由于我表达能力较差,所以准备采用简述+大量站外链接的形式,给出一个希望不会让人误入歧途的引导。。。介绍Intel Galileo(点击查看中文官网),是一个...

Read More
 2014-04-09
只用OS X系统实现A8嵌入式试验箱(linux)的交叉编译

连接以电脑为终端,采用基于PL2302芯片的串口转USB线链接电脑和试验箱,MAC OS X系统需要安装芯片的驱动(文件名md_PL2303_MacOSX10_6_dmg_v1_4_0.zip)通过文件内说明文档进行相关设置,然后可以连接成功。Mac终端下用screen命令实现试验箱终端功能.screen /dev/tty.usbserial 115200>注意拔下USB时要用A(ct...

Read More
 2016-11-12
两台服务器间SSH或SCP实现无密码登录或文件传输

最近由于需要实现从一个客户端电脑定时远程上传图片到阿里云服务器的功能,需要实现SCP的免密码传输。所以查资料并做了一个记录,希望对大家有帮助。步骤1.Client上某用户执行ssh-keygen命令,生成建立安全信任关系的证书ssh-keygen -b 1024 -t rsa这里如果~/.ssh/id_rsa.pub 已经存在,说明以前已经生成过,可以直接跳过这步。2.将公钥证书id_rsa...

Read More
 2017-07-25
Steam是如何吸走我们的钱的(三)----从红警2说起

第一篇和第二篇文章中,我们分别从差异化定价和虚拟交易两个方面揭露了一下Steam的坑钱大法。今天要讲一下游戏内容了,毕竟人们来Steam主要是想玩游戏的。任何一款游戏发售之前,开发商都应该是设定好了游戏道具、游戏方式、各种参数等一切正常游戏进行需要的游戏内容。但是随着游戏时间加长,总有一天,游戏内容被玩家慢慢“消费”完,如果能减慢游戏内容的消耗时间,就能延长一款游戏的寿命,使游戏获得更多人认...

Read More
 2017-06-29
Steam是如何吸走我们的钱的(二)

上次提到了Steam通过差异化的游戏定价和频繁的打折活动,力图让最多的人以自己能接受的最高价格买走一个游戏,以此来走了最多的钱。本节我们将继续说一下集换式卡牌和社区市场这两种吸钱大法。集换式卡牌摘自百度百科集换式卡牌游戏,简称CCG(Collectible card game)或TCG(Trading card game)。顾名思义,此类游戏是以收集卡牌为基础的,游戏者需要通过购买随机包装的...

Read More
 2017-06-28
Steam是如何吸走我们的钱的(一)

首先,我认为这个问题应该从商业运营或经济学的角度来更加专业地解释,但作为一个资深的、从小就被各种电脑游戏坑钱的低端手残玩家,我还是要揭漏出steam的部分坑钱之道,以方便我们更好地被坑。非常希望各位有兴趣和相关专业的同学来和我讨论啊~什么是Steam摘自百度百科:Steam平台是Valve公司聘请BitTorrent(BT下载)发明者布拉姆·科恩亲自开发设计的游戏平台。Steam平台目前是一...

Read More
 2016-12-14
推荐一些简洁好用的Chrome插件

最近在实验室学习,chrome竟然称为了我使用的主要工具,不论是看博客或是看一些文档、论坛都离不开浏览器。chrome浏览器非常好用,通过登录google账号,可以同步设置、书签甚至插件。这里推荐几个我用的Chrome插件,能提高工作效率,大家根据名字都能搜到。Octotree可以在显示github网页左侧显示类似工程目录的侧边栏。OneTab可以一键将暂时没看完的标签收集起来,有时间(内存...

Read More
 2015-10-24
运用jekyll+Nginx+docker搭建博客的总结

博客由来今年暑假的时候就听说github上可以免费搭建静态博客。当时虽然看了看,但还是因为服务器、网页等知识欠缺太多,几次想动手都没有坚持下去。最近看了看Nginx的有关知识,算是对http服务器的搭建有了个大概了解。后来看到了docker,就买了《第一本docker书》这本书看了看,发现上边有些例子写的挺不错,其中就有jekyll+Apache搭建静态博客的例子,照着做一遍后,我决定用Ng...

Read More
 2015-10-08
折腾Docker的一些吐槽点

第一次构建Docker镜像,想照着书弄个jekyll的镜像玩玩,结果两天了,到现在还没成功。记录下国内环境实践和书本上的不同。。。首先官方的apt-get源太慢了要换成国内的速度还可以接受一点:(原文链接)做法:Dockerfile 中 RUN apt-get update 前添加一句:RUN sed -i 's/http:\/\/archive\.ubuntu\.com\/ubun...

Read More
 2015-11-09
LeetCode第14题:Longest Common Prefix总结

题目Write a function to find the longest common prefix string amongst an array of strings.大意: 写一个函数,找到一组字符串的公共最长前缀。思路我的:定义一个不断更新的变量,存储当前的最长前缀,循环时加以一定的优化,比如如果下一个字符串比当前的前缀还长,那么可以截断前缀后在进行比较。参考的:这道题在disc...

Read More
 2015-11-01
LeetCode第8题:String to Integer (atoi)总结

题目:Implement atoi to convert a string to an integer.大意:就是手动实现C语言里常用的atoi函数。。。思路和吐槽:我最讨厌这种了,完全的信息不对称。。要讨论的情况只有不断提交才知道出题人什么意思,我怎么知道你要求的是什么,况且这是算法题又不是工程题。。。。幸亏这道题比较简单,多试几次也不太费时。代码Pythonclass Solution(...

Read More
 2017-03-30
在awk中如何使用或赋值shell的变量

写shell脚本处理文本的时候,经常用到awk来配合shell命令。但是awk的大括号中和shell貌似是两个世界。本文只介绍最容易理解的方法(作者水平有限,复杂的以后可能补充),来实现awk对shell变量的使用和更改。如果我们将awk看成变成语言中的函数,或者一个封装,那么要使用或者修改外部的变量,其实就是输入参数和输出返回值的问题。对于使用shell变量,其实就是shell变量怎么作为...

Read More
 2016-11-16
Shell脚本中进行多行注释的方法

我发现。。shell脚本貌似不像C或者Python一样自带注释语法,不过拐弯抹角还是有一些方法的。。囧方法1:利用逻辑语句利用了逻辑语句的执行顺序,缺点是注释中不能出现括号,否则会报错!###逻辑或前如果为真,后边的语句块自动不执行#1:||{ 注释内容...}#2((1))||{ 注释内容...}#3true||{ 注释内容...}###逻辑与前如果为假,后边的语句块自动不执行#4((0)...

Read More
 2016-04-02
Jc的sed简单入门/sed命令总结

这是我学习sed的一个总结,只限于自己和比我水平低(就是没接触过)的同学看。。。除了参考资料,讲解也包括很大成分的个人理解,如果发现错误,希望大家可以提醒我及时更正,谢谢~!sed概述sed是一个流编辑器,更准确的说是一个行编辑器,就是sed处理文本处理命令用于逐行处理文本中的文字。这是sed命令的格式: sed [options] [commands] [input-file]就是说sed...

Read More
 2016-03-29
Jc的常用Git命令记录

常用git,做个记录,方便查询,利人利己,如有错误,欢迎指正~创建仓库git init 创建仓库git clone xxx.git(远程库的地址) 克隆一个远程仓库git remote add origin xxx.git(远程库的地址) 指定一个远程仓库地址,命名为origin提交更改git rm file_name 删除文件git add file_name 添加文件到仓库暂存区(in...

Read More
 2017-04-06
OVERCOMMITTING WITH KVM 翻译:KVM虚拟机对硬件资源的超量分配

译者的废话这是Red Hat RHEL 7文档中关于KVM虚拟机超量分配的说明文档,这里说的KVM,应该就是适用QEMU管理的KVM虚拟机的,因为在启动QEMU虚拟机的时候,只要-smp N和-m N参数分别就可以指定虚拟机的vCPU数和内存数,我实际实验发现,它们是都可以超过实际的物理CPU核数和内存大小的。硬件资源超量分配,说的好听是节约资源,但是资源的分配超的不切实际,也就是VPS超售...

Read More
 2016-12-30
Qemu KVM 虚拟机通过虚拟网桥实现桥接和NAT的实验

系统概况:host 和 guest 都是用的 Ubuntu Server 16.04系统。我的 host 机上有三块网卡2块有线网卡(接口 enp1s0 和 enp3s0)和1个无线网卡(接口 wls2s0)。我的 host 机通过无线网卡连在一个路由器上,并因此能够连接到互联网,所在的网段是192.168.3.0\24,ip 固定为192.168.3.5。其他两块有线网卡没有连接。实验0:...

Read More
 2016-11-02
qemu/qemu-kvm/qemu-system-x86_64/qemu-x86_64命令的区别?

刚想玩玩kvm,结果分不清这几个命令。。搜了一下,记录下来,希望对大家有帮助。摘抄1在老版本中有单独的qemu-kvm模块存在,结合qemu一起做虚拟机工作。在后续新版本中,已经将qemu-kvm模块完全合并到qemu中去。因此当需要使用kvm特性时候,只需要qemu-system-x86_64 启动命令中增加参数 --enable-kvm参数使能即可。(http://blog.csdn.n...

Read More
 2017-04-16
MySQL InnoDB透明页压缩的简单分析

从MySQL 5.7版本开始,MySQL不仅支持原有的压缩表格式(Table Compression),还支持一种称为透明页压缩的特性(Transparent Page Compression)。通过阅资料和源码,我对这个特性有了一定的了解。以下我将从它的使用方法、实现原理等方面对它进行简单分析,并同压缩表格式进行一些对比。1. 开启方法官方文档对于透明页压缩的特性的说明仅仅一页,主要说明了...

Read More
 2017-03-16
Optimizing InnoDB Disk I/O MySQL文档翻译:优化InnoDB磁盘I/O

原文:8.5.8 Optimizing InnoDB Disk I/O这页感觉比较重要,翻译一下。。如果你遵循了数据库设计和SQL操作调优的最佳实践,但是数据库仍然由于磁盘I/O负载过重而运行慢,请考虑这些磁盘I/O优化方法。如果Unix top工具或Windows任务管理器显示你的工作负载的CPU使用率百分比小于70%,那么你的数据库系统瓶颈在于磁盘。增加缓冲池(buffer pool)的...

Read More
 2017-03-16
Optimizing Disk I/O MySQL文档翻译:优化磁盘I/O

原文: MySQL 5.7 Reference Manual — 9.12.2 Optimizing Disk I/O本节将介绍当你决定更多更快的存储硬件设备投入到数据库服务器时,应该如何配置它们。 软件配置上优化InnoDB以提高I / O性能的信息,请参见第9.5.8节“优化InnoDB磁盘I/O”。磁盘寻道是一个巨大的性能瓶颈,当数据量剧增到使得缓存命中率减小时,这个问题会更为明显。对...

Read More
 2017-05-07
FAST 16论文sRoute:treating the Storage Stack Like a Network学习记录

论文原文PDF: sRoute: treating the Storage Stack Like a Network出处:USENIX FAST 161. 概述数据中心中,数据从一个应用最终到达存储服务器不仅要经过网络,还要经过很多的存储层次,这些层次可以称为存储栈(Storage stack)。对于数据中心中一个较为复杂的应用,一个IO请求甚至要经过应用缓存层、虚拟机操作系统(Guest ...

Read More