SSD到底快多少

做驱动开发的人都曾有过无数次测试重启后的等待,等待着新驱动在debug窗口传出的一串特定的字符,等待着下一个不期而遇的BSOD,等待着新代码终于工作时那一声惊人的呐喊。

等待的心情总是很复杂,或期盼,或疑惑,或焦急,或无奈。等待的状态同样无奇不有,或似无所事事的发呆,或白痴+花痴状直沟沟得盯着屏幕,或紧握鼠标迫不及待的要在第一时间挥出致命一击,或者做个忙里偷闲状伸个懒腰,抑或干脆走开…

等待的时间里,无论多短,总会觉得很长很长!随着硬件速度的提升,人的耐性却是直线式的下降。

于是,SSD来了。一周前我还在考虑要不要将测试机换上个SSD,然后周三就看到超能网上的SSD团购。第二天京东就送来了影驰战将240G。今天(周五)下午终于有时间折腾测试系统,从原来500G的ST7200.4上转移到这个容量只有一半大的SSD上。

我的测试机是一台较古老的Thinkpad X61 (T8100 2.1G双核, 内存5G),硬盘是ST Momentus 7200.4,装有xp, win7 32位,win7 64位,win8 64位及 Ubuntu 12.10共5个操作系统,但新购SSD只有240G,故舍弃了win7 32位系统,做了备份必要时可以随时恢复。

测试过程中发现用HDTunePro及ATTO Bench测试SSD时的最好I/O速率只有110MB/s。经过几番周折才发现X61的SATA接口竟然是SATA1的,联想在BIOS里做了人为限制。通过BIOS升级可以解除了SATA1的限制。SATA2的表现明显好于SATA1,性能平均要比SATA1高50%多。

下面是HDTunePro 5.50分别在SATA1及SATA2接口下的性能对比:

20140509-SSD-HDTUNE-sata120140509-SSD-HDTUNE-sata2

ATTO Bench 结果对比 (direct i/o, i/o comparison):

20140509-SSD-sata120140509-ssd-sata2

SATA2的I/O性能虽然好了很多,但在操作系统重启动时间的对比测试中,并没有带来很大提升。参见下面的各操作系统启动时间的对比图:

启动时间的测试,是从开启电源开始算,直接操作系统启动,自动登录,然后弹出我的一个测试程序的界面。关机时间的测试,是从点击“关机”按钮直到电脑电源关闭。

20140509-SSD-perf-booting20140509-SSD-perf-bootingdata

相对于原来的机械硬盘,SSD的表现还是非常给力的。至于SATA1及SATA2接口,虽然最大的I/O性能强了很多,但在系统启动及关闭的时间测试上,并没有很大差别。

小五台一日连穿

20130920-小五台一日连穿

17个小时,全程42.2KM,海拔上升3238M。

行程:赤崖堡-北台-东台-三岔-中台-南台-中台-三岔-西台-西金河口

致命误操作

Gigabyte BRIX (XM11-3337)在路上飘近一个多月之后,终于到手。遂即安装了Win7及Ubuntu双系统,但Ubuntu不能正常启动。通过U盘启动了Ubuntu Live去查看原因, 在准备chroot环境时,不小心打错了命令:

tar zcvf /dev/sda*

结果,硬盘上的分区及引道记录全被覆盖,好在/dev/sda*只是设备名称,只冲写掉前面几个扇区,数据区域无碍。

通过/proc/partitions里的数据重建分区,前面的主分区正确识别,但扩展分区无法识别,应该是有错位,在新建的扩展分区前后搜索”55 AA”标志,遂找到了正确的扩展分区起始位置。主引导记录的修复只好用Windows 7安装光盘来修复。

后来还要接着搞grub无法启动Ubuntu的问题,grub提示无法找到/boot/grub/normal.mod,此时grub仅支持少量和命令,如ls, set, insmod等,linux及initrd命令必须等linux.mod加载后方能生效,通过set命令查看:

prefix=(hd0,msdos3)/boot/grub

(hd0,msdos3)为/boot分区,并不是root,故需要修改prefix为: (hd0,msdos3)/grub,即

set prefix=(hd0,msdos3)/grub

之后就可以手工启动Linux 了:

insmod linux
linux (hd0,msdos3)/vmlinuz-3.8.0-…-generic ro root=/dev/sdaX
initird (hd0,msdos3)/initrd-3.8.0-…-generic
boot

Ubuntu可以正常启动了,但问题的修复还要费些脑筋,因为我的Ubuntu系统设置了独立的boot分区,早知如此当初就不这么麻烦了,好在还有个比较投机的办法,在/boot目录下建了一个指向上层目录的symbolic link:

ln –s .. ./boot

重启系统并验证grub可以正常启动Ubuntu了。

生命不止,折腾不息!附个BRIX酷照:

Gigabyte Brix

 

用CubieBoard玩转网络共享

将CubieBoard或Raspberry Pi架成Wireless Access Point的办法网上已有很多,但和我的需求正好相反,我是打算让连在CubieBoard的ethernet上的内部子网络可以共享CubieBoard的无线网络端的internet联接,即AP Client方式。

AP client的实现并不复杂,通过dhcpd及NAT即可做到。

第一步:设置有线网口(eth0)为固定ip

~# cat /etc/network/interfaces
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
address 192.168.0.1
netmask 255.255.255.0

第二步:安装并配置dhcpd服务

~# apt-get install isc-dhcp-server

添加dhcp网段地址:

~# cat /etc/dhcp.dhcpd.conf
……
subnet 192.168.0.0 netmask 255.255.255.0
{
    range 192.168.0.50 192.168.0.250;
    option routers 192.168.0.1;
    option domain-name-servers 8.8.8.8,4.2.2.2;
}

限定dhcp服务运行于连接在eth0上的子网:

~# vi /etc/default/isc-dhcp-server
……
INTERFACES="eth0"

启动dhcpd服务:

~# service isc-dhcp-server restart
isc-dhcp-server stop/waiting
isc-dhcp-server start/running, process 23686

~# ps -efa | grep dhcpd
root     23686     1  0 15:45 ?        00:00:00 dhcpd -user dhcpd -group dhcpd -f -q -4 -pf /run/dhcp-server/dhcpd.pid -cf /etc/dhcp/dhcpd.conf eth0

此时dhcpd服务架设成功,连在网口eth0子网上的电脑客户端可以自动获取到ip了。

第三步:设置无线上线

用实际的ssid及password替换下面的命令:

~# wpa_passphrase ssid password >> wpa.conf
~# cat wpa.conf
network={
        ssid="ssid"
        #psk="password"
        psk=44116ea881531996d8a23af58b376d70f196057429c258f529577a26e727ec1b
}

连接无线网络:

~# wpa_supplicant -iwlan0 -B -Dwext -c ./wpa.conf
~# dhclient wlan0
~# ifconfig wlan0

wlan0     Link encap:Ethernet  HWaddr 14:xx:xx:xx:xx:xx
          inet addr:10.0.3.93  Bcast:10.0.3.255  Mask:255.255.255.0
          inet6 addr: fe80::16cf:92ff:fe1b:34ef/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:240 errors:0 dropped:0 overruns:0 frame:0
          TX packets:497 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:2299089 (2.2 MB)  TX bytes:1124901 (1.1 MB)
~# ping www.google.com
PING www.google.com (74.125.128.99) 56(84) bytes of data.
64 bytes from hg-in-f99.1e100.net (74.125.128.99): icmp_req=1 ttl=46 time=69.2 ms
64 bytes from hg-in-f99.1e100.net (74.125.128.99): icmp_req=2 ttl=46 time=59.4 ms
^C

第四步:设置网络转发及NAT

编辑/etc/sysctl.conf启用ip forward:

~# cat /etc/sysctl.conf
…
net.ipv4.ip_forward=1

…

使ip forward更改生效:

~# sysctl –p

设置NAT转发:

~# iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE

设置好NAT后,子网客户端就可以上网了。

注1:dhcpd server可以用udhcpd来替代
注2:无线网络的设置也可以通过/etc/network/interfaces来做
注3:ip forward的设置(/etc/sysctl.conf方式)重启仍然有效
注4:有关iptables的设置及防火墙配置请参阅相关资料

“曾经沧海”正是我们的梦

 
我所见过的事情 你们人类绝对无法置信
我目睹了战舰 在猎户星座的边缘中弹 燃起熊熊火光
我见过C射线 划过了‘唐怀瑟之门’ 那幽暗的宇宙空间
然而所有的这些片段
那所有的瞬间
都将湮没于时间的洪流
就像泪水消逝在雨中
                          ----《银翼杀手》对白。

活法

1, Living a Life Well Lived

甩下包袱,大踏步前行吧。世界有太多的未知等你去探索,前面有太多的体验等你去尝试。每一次冒险也最终将会成就你自己!

Jim Whittaker,first America to top of Mt. Everest.
http://www.adventure-journal.com/2013/06/living-a-life-well-lived/

2,活出我们的精彩

把握住你的时间,有想法便全情去做,努力做好!

Aaron Swartz在26岁的年纪以自杀的方式结束了自己的生命,但26岁的他活得却异常精彩。 RSS1.0标准的制定者之一,社交新闻网站Reddit的合作创始人,为了一个单纯的资源共享让全社会受益的理想,最终迫于压力而自杀,令人惋惜。

Aaron Swartz: http://en.wikipedia.org/wiki/Aaron_Swartz

3,活出我们的良心

以自由和平等为信念的美国却以反恐的名义收集着全世界人的隐私,侵犯了全世界人的权益!Edward Snowden站出来了,在明知道自己将会面对怎么的后果的情况下,他还是站出来了,并将NSA的这个不光彩的勾当告之以全天下。

反恐的底线在哪里?为了反恐我们人类真得要承受如此的代价吗?