对齐操作和非对齐操作

| *nix and Win32 Kernel

操作是否对齐是一个简单而容易忽略的性能(有时是可靠性)问题。对齐主要是指读写操作不产生不必要地跨越存储设备上原生存储单元的访问,这里的存储单元说的是在访问路径上的任何设备,它可以是外存,也可以是内存,甚至是CPU附近或内建的快取缓存,等等。

阅读全文…( 本文约 1145 字,阅读大致需要 3 分钟 )

关于备份

| Security

指望硬盘不挂掉是 很拼人品的事情(附带说一句,从某种意义上说,21世纪的硬盘质量并没有下降,只是单位容量出现故障的概率没有显著提高,而硬盘容量的扩大使得单块硬盘的故障率看起来提高了,但是如果我们从单位容量的故障率来看,坏损率并没有非常显著的增长)。所以想要长久地保存数据,就必须采用各式各样的冗余和备份手段。冗余和备份是不一样的,前者往往会采用同样的访问控制逻辑,提供在线或近线的数据存储,强调的是数据访问的及时性;而后者则强调的是数据的可恢复性。

关于访问控制

一般来说,不希望备份与原始数据采取相同的访问控制机制。例如,对网站来说,可以读写数据库的那个 Web 访客的数据库账户,很可能并不能直接读写网站的备份数据。有时,备份甚至是以一种"外科手术"的方式进行的:对文件系统做快照,然后将快照打包发到异地的另一套系统。

阅读全文…( 本文约 1155 字,阅读大致需要 3 分钟 )

出现钓支付宝鱼的网站了

| Security

今天看到一则消息说,百度搜索支付宝会找到一个钓鱼网站(现在应该已经撤掉了)。去那个钓鱼网站看了一眼,发现居然是装的正版支付宝插件。

相信插件能保护客户的安全的人可以洗洗睡了,你们根本不配说「安全」两个字,除了供一两个三流技术人员拿大量客户计算机的安全开玩乐和练手之外,这些控件没有价值。

参与评论

基于 Supermicro X7SPA-H (Atom D510) 的路由器(2)

| Development

续前。

除了硬件上直接采用的降噪措施之外,一些软件方面的配置也可以提高其效果。

首先是BIOS中的配置。风扇转速最低可调整为"Energy Saving"(即使用30%的频率)。启用Active Power State之后,可节省大约2W左右的耗电(这个选项的默认值是Disabled)。

然后是FreeBSD本身的配置。我个人采用的配置包括:

上述设置,除了ahci部分之外,可将系统闲置时的功耗降低到17W左右。

以下是实现中采用的loader.conf相关的部分:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10

hint.apic.0.clock=0
hint.atrtc.0.clock=0
hw.pci.do_power_nodriver=3
hint.ahcich.0.pm_level=5
hint.ahcich.1.pm_level=5
hint.ahcich.2.pm_level=5
hint.ahcich.3.pm_level=5
hint.ahcich.4.pm_level=5
hint.ahcich.5.pm_level=5
阅读全文…( 本文约 4499 字,阅读大致需要 9 分钟 )

FreeBSD的textdump

| *nix and Win32 Kernel | Development

最近遇到一些奇怪的bug,因为是对恢复时间有比较高要求的系统,所以顺便研究了一下用FreeBSD的textdump来代替更早前出现的minidump的方法。

阅读全文…( 本文约 754 字,阅读大致需要 2 分钟 )

基于 Supermicro X7SPA-H (Atom D510) 的路由器(1)

| Life

最近找时间做了一个家用的路由器。用基于 Intel Atom 处理器的解决方案并不便宜(与传统的嵌入式解决方案相比),但因为软硬件都是 x86,因此开发起来会方便一些。另一方面,Atom的计算性能要远高于其他的传统嵌入式方案。

阅读全文…( 本文约 585 字,阅读大致需要 2 分钟 )

RTC 与 NTP

| *nix and Win32 Kernel | #FreeBSD | #ntp

早期版本的 FreeBSD 有一个问题是,如果使用 ntpd 来校准系统时钟的话,如果长期开机,则在重启之后,时间会差很远,之前一直没仔细研究这个问题。最近突然发现 FreeBSD 8.1-RELEASE 里面没有这个问题了,于是翻看了一下代码和之前的一些邮件才明白是怎么回事,总结一下:

阅读全文…( 本文约 762 字,阅读大致需要 2 分钟 )

FreeBSD上的{rd,wr}msr_safe

| *nix and Win32 Kernel

这几天改 FreeBSDcoretemp(4) 遇到了一个问题。直接使用 rdmsr 的话,如果那个 MSR 不存在,则会触发 #GP(0),不了解 CPU 型号的情况下直接去杵肯定是不行的。后来翻了一下 cpuctl(4) 的代码发现 FreeBSD 上也有 rdmsr_safe。它的实现并不复杂( sys/amd64/amd64/support.S):

阅读全文…( 本文约 364 字,阅读大致需要 1 分钟 )

为什么要用公钥/私钥而不是密码去做SSH身份验证

| Security

SSH提供了很多种不同的身份验证,其中最常用的两种便是密码验证和基于公钥/私钥的身份验证。

基于公钥/私钥的身份验证有非常多的优点。

首先,公钥/私钥可以从根本上挫败监听来截取验证信息的企图。

阅读全文…( 本文约 705 字,阅读大致需要 2 分钟 )

Intel CPU的Tj(max)的获得

| *nix and Win32 Kernel | #CPU | #monitor | #thermal

本文主要是笔记,不保证其正确性,也不保证其不导致死机、崩溃或任何其他问题。


CPU的Tj(max)值可以通过读 MSR IA32_TEMPERATURE_TARGET,即 0x1a2 来获得【1】。目前,Intel正式的开发文档中并没有明确对这一MSR进行说明。早期的CPU中,Tj(max)值需要加上40到50摄氏度,目前不清楚具体哪些CPU必须如此,但从公开文档来看,已知:

阅读全文…( 本文约 1407 字,阅读大致需要 3 分钟 )