存档

2014年5月 的存档

SSD 中的 TRIM 指令

2014年5月21日 没有评论

SSD 写数据的原理

在机械硬盘中, 写入新数据的时候可以直接覆盖原数据, 但是在 SSD 中, 情况发生
了变化. SSD 并不能直接覆盖原来的数据, 必须先要把旧的数据先擦除然后才可以
把新的数据写入.

从物理结构上讲, SSD 被分为许多 block, 每个 block 又可以
再往下划分为 pages. 数据可以直接以页面为单位写入, 但是要想删除数据却需要以
块为单位. 因此在删除数据的时候稍微麻烦一些: 首先需要把一个块内包含有用的数据
先复制粘贴到全新的块中的页面内, 这样原来块中包含的无用数据才能够以块为单位
删除. 删除后, 才能够写入新的数据.

所谓的 SSD 的垃圾回收就是把现存数据重新转移到其他闪存位置, 并且把一些无用
的数据彻底删除的过程.

这样会带来一个问题: 系统删除某个文件只是简单的在逻辑数据表内把存储要删除的数据
的位置标记为可用. 这在机械硬盘的情况很正常. 但对于 SSD , 由于其并不具备直接
覆盖旧数据的能力, 直到写入那个位置的时候, 它才意识到这些数据已经无
效了(被操作系统删除了). 在此期间发生的垃圾回收操作就会读写这些无效的数据,
大大降低 SSD 的性能.

TRIM 指令解析

TRIM 是基于 SATA 控制器的一个指令, 一旦有文件删除或者分区格式化. 操作系统就会
发送 TRIM 指令给 SSD 告诉它某处的数据已经删除了, SSD 因而知道这些数据是无效
的, 在垃圾回收的时候就可以直接忽略这些区域, 对这些区域可以直接进行清空. TRIM
指令的存在使得 SSD 能够紧紧跟随 OS 的操作意图, 达到性能的最优化和空间的最大化.

TRIM 的优势

  • 写入的吞吐量大大得到改善: 因为在垃圾回收的时候那些被标记为删除的数据不需要重写,
    节省了大量时间
  • 更多的空闲空间, 一旦数据被标记为删除, 这些空间马上就可以利用.
  • 设备的使用寿命得到增加: 由于不在需要重新写入无用数据, 减少了 SSD 实际写入次数.

如何使用

Mac

对于原装 Mac 的 SSD 硬盘来讲, 默认情况下 TRIM 已经打开了. 无论如何, 可以使用:
关于本机 -> 更多信息 -> 系统报告 -> SATA/SATA Express
里面的信息查看 “TRIM 支持”.

Linux

用下列指令查看 SSD 是否支持 TRIM:

# hdparm -I /dev/sda | grep -i trim

然后在 mount 的挂载参数添加 discard 选项.

或者调用 fstrim 向 SSD 设备发送 trim 指令.

Windows

Note: 首先 XP 系统不支持 TRIM 指令.

一般 Windows 系统下, TRIM 指令默认是开启的, TRIM 本来就是 Windows 联合厂商
提出来的.

在命令行提示符下: 输入以下指令查询 TRIM 的开启情况

C:\Windows\system32> fsutil behavior QUERY DisableDeleteNotify
DisableDeleteNotify = 0

0 表示启用, 1 表示没有启用.

用户可以使用下列指令开启 TRIM:

C:\Windows\system32> fsutil behavior set disabledeletenotify 0
DisableDeleteNotify = 0

用户可以使用下列指令关闭 TRIM:

C:\Windows\system32> fsutil behavior set disabledeletenotify 1
DisableDeleteNotify = 1

分类: Storage 标签:

使用 gitstatus 生成项目的图标统计信息

2014年5月4日 没有评论

最近老板要统计一下团队中各个开发人员的工作情况, 比如写的代码行数之类的. 由于我们
团队是用 git 来做代码管理工具的, 所以很自然地我需要从 git 本身挖掘这些信息.

当然我可以使用 git log 加上各种文本处理工具(e.g. grep)来达到我的目的, 但是这种
方式太麻烦, 生成图表更不容易. 为了不重复发明轮子, 我放狗搜索了一下, 找到了 gitstat
这个工具完美实现我的要求.

gitstat 特性

  • 以各种维度统计代码信息, 包括代码提交次数, 代码行数, 提交持续时间, 项目的活
    跃度, 项目标签等等.
  • 支持合并多个项目的统计信息
  • 统计可以以图表的形式输出
  • 统计输出 html 格式的文件, 可以部署到网站上
  • 不支持 pdf 等其他格式的输出

怎样使用

gitstat 的使用非常简单:

# gitstats [options] <repository1> <repository2> <repository3> <output dir>

比如, 我以 spice 项目的统计信息为例, spice 项目有 spice-server, spice-gtk,
spice-procotol, vd_agent 等子项目, 把结果保存在 var/www 目录中,
使用以下命令:

# gitstat spice spice-gtk spice-procotol vd_agent /var/www

完成之后, 用浏览器打开 /var/www/index.html 就可以看到具体的统计信息了.

献上截图两章, 列位看官可以在里面看到我吗?

gitstatus1

gitstatus2

分类: Tools 标签: