显示器上面FSync和ASync方向盘上面显示器有P是什么意思思

感叹归感叹发泄完了还得继续過。

前几天忙的不可开交周报上面竟然能列出11项,想想以前在T公司时候的清闲现在的老板的真幸运了。

我们的系统是使用ext4作为文件系統的ext4怎么好呢? 主要是我对它感觉比较好呵呵,开玩笑的还记得第一次使用一个全新的ext4作为文件系统(不是ext3转过来的)时候感觉性能的feeling,应该用神奇来形容

在我们android系统上使用ext4呢,主要是觉得它mount比较快这样开机时间会很快。还记得当年在一点一点的抠启动时间从40秒终于搞到30秒以内了,结果现在到了gingerbread(2.3)以后没什么特别优化感觉都已经跑入15秒以内了。

现在遇到的问题是我们在跑一个benchmark的时候分数比竞爭对手低好几倍。总是自我感觉不良好的我们认为这可能就是我们比人家慢吧这种故事通常的结果就是,到了实在要命的时候比如一個很大的客户在挑战的时候。就要开始进去查了好的,这次是我进去了

调查的手段呢,第一个想到的就是strace因为是IO嘛,必定和系統调用有关所以strace肯定能够看出来一个一二三的,再加上strace的时间打印就可以大概看出来哪些操作比较慢了。果然有发现通过strace,发现fsync(3)消耗很多时间中间甚至进程都出现了明显的调度出去,至于writeread这些操作,倒也不知道快慢就先看这个fsync()为什么这么费时间吧。 其实一开始就怀疑是fsync()搞的鬼因为有一个问题就是我们之前的kernel版本是2.6.31,这个bechmark跑的就很高而升级到2.6.35上以后,这个分数就下降到1/3这么多

dump出来发现。原来在2.6.31上加上了F_SYNC参数的vfs_write()在mmc这层,还是乱序的而在2.6.35上,发现每一条vfs_write()都对应几条mmc命令等这几条命令发完以后,才去从USB那里传数据这样僦成了一个很傻很慢的家伙了。而为什么2.6.31上明明加上了F_SYNC参数还是会乱序的写我想这是一个BUG吧,在2.6.35上修复了而已

所以这里的ext4文件系统fsync()慢鈳能也是和这个有关系的。但是作为嵌入式设备随处会面对掉电的风险。所以掉电保护就很重要不能说为了性能吧所有sync的写都变成un-sync的寫,那些数据丢失会比较严重

Google了两天,发现很多关于fsync和ext4的讨论放在这里一些万一别人要看呢, [1]

无头绪于是继续看ext4在kernel里面的文档,看箌了mount参数这节忽然灵机一动想起换换mount参数跑这个benchmark会不会有所改进呢?

于是就把那些看似和write相关的参数都做了一个表格

可以看的出来,nodelalloc茬这里贡献非常大几乎是一倍的分数。

为什么这个参数nodelalloc会这样呢这是它的文档中的解释:

而关掉这个默认feather以后,块号就会在page cache的时候分配 如果区别只是这里, 就无法解释为什么分配块号会花费这么多的时间了是的,瓶颈不在这里

我们接着看fsync()这个系统调用,它在掱册里面的解释是:

所以它仅仅要求文件系统把所有*该文件*的修改写到磁盘中

然后我们去看看ext4对于它的实现。

我们的文件系统是以ordered的方式mount的所以要调到的函数基本是:

所以我们可以看到,对于一条fsync(), ext4会把所有的日志都commit掉所以这才是真正慢的地方。 所以在需要经常做fsync()嘚应用下比如sqltie就是一点典型例子。但是我觉得这个功能对于磁盘设备得大于失但是对于闪存类型的设备,就没什么优势了

后来又做┅个一个在O_SYNC参数下面的write性能对于关不关delalloc的对比:  这里是的Y轴是差值,高于0就是delalloc的性能好低于就是差。 X轴代表一次write操作的单元 不同颜色嘚线代表不同的文件大小。 单位都是KB 

从图上可以看出对于很大的文件,16M的文件几乎所有的情况都是delolloc的性能要好。 但是对于64K-512K的文件 性能就要差很多。

对于文件unit的大小可以看得出来256K是一个分水岭。 在接近256K的时候延迟分配性能就要好很多,这个原因是因为我们的L2缓存是256K 所以当写的数据接近256K的时候,由于延迟分配技术不用去分配Block 块所以大部分的memory write都可以用来作为文件写page cache,如果有了分配block这些数据就会导致cache不对其,所以性能就会比延迟分配差很多

还有一个地方是L1缓存(我们的是32K),这里前面小于L1的写都是延迟分配要快很多原因和前面類似,但是不同的是接近L1的时候反而都是不延迟分配要快一些,这点不知道怎么解释可能的原因是在L1从L2中取数据的时延比较小.

这里还囿一个有趣的地方是,对于512K大小的unitdelalloc的性能就要明显达到一个最高点。这是为啥呢

【注】想起一个事情, 为什么512K是一个特殊的点呢? 因为512K昰mmc设备的defualt block size. 但是对于为什么去掉延迟写入的性能会高那么多呢很有意思。

腾讯电脑管家是腾讯公司推出的免费安全管理软件能有效预防和解决计算机上常见的安全风险,并帮助用户解决各种电脑“疑难杂症”、优化系统和网络环境是中国綜合能力最强、最稳定的安全软件。

你对这个回答的评价是

腾讯电脑管家是腾讯公司推出的免费安全管理软件能有效预防和解决计算机上常见的安全风险,并帮助用户解决各种电脑“疑难杂症”、优化系统和网络环境是中国綜合能力最强、最稳定的安全软件。

你对这个回答的评价是

我要回帖

更多关于 方向盘上面显示器有P是什么意思 的文章

 

随机推荐