Alienware 惊魂记

Alienware M17x R3 已经到手很久了,本来配置的 AMD Radeon HD 6990M 是准备拿来玩 GPGPU 的。但由于 Alienware 坚持使用 Muxed Graphics Switch(人工切换集/独显比较可靠),而 Linux 下的新版本 AMD Catalyst 驱动只支持 Muxless Graphics Switch,使得这块卡在 Linux 下一直得不到很好的应用。

Read More

[zz] Optimizing TCP Socket Across Data Centers

原文链接:http://sna-projects.com/blog/2011/01/optimizing-tcp-socket-across-data-centers/

一点评注: 广域网中高延迟带宽积链路的基本优化方式就是增加 TCP 连接的确认窗口大小,确认窗口大小在 Linux 下直接对应于 socket send/recv buffer size 设置,大于 64 KB 的窗口大小是 TCP 扩展选项,需要在 3-way handshake 时进行双方协商,因此对 socket send/recv buffer size 的设置必须在 listen / connect 之前进行,否则在 TCP 连接建立以后就无法使用大于 64 KB 的窗口了。看 man 7 tcp 就能发现相关说明。

另外应用程序能自行设置的最大 send/recv buffer size 同时收到 kernel 配置项 net.core.rmem_max / net.core.wmem_maxnet.ipv4.tcp_rmem[2] / net.ipv4.tcp_wmem[2] 的约束,设置很大的 buffer size 前先看看需不需要提升这些限制。

Baidu 首页手写输入法交互数据格式分析

手写识别接口以 HTTP POST 方式访问 http://hw.baidu.comContent-Typeapplication/x-www-form-urlencoded ,POST body 中包含如下 2 个参数:

  • type - 总是为 1;
  • wd - 为手写笔划矢量数据,格式如下:
    • 每条矢量笔划数据都是形如 x1,y1,x2,y2,... 的坐标列表,其中 x 和 y 坐标的有效值范围在 4~209 之间(屏幕坐标系,左上角为原点,向右向下坐标递增),以字符 "a" 作为分隔符将 10 进制坐标数值序列化为字符串。例如一个笔划经过的坐标若为 (15,15)-(15,30) ,则该笔划序列化后的字符串为 "15a15a15a30" ;而另一条笔划经过的坐标若为 (15,30)-(30,30) ,则序列化后的字符串为"15a30a30a30";
    • 多条矢量笔划数据字符串之间以 "aa" 分隔后作为最终数据串,例如上述 2 条笔划组成的最终数据串为 "15a15a15a30aa15a30a30a30"

Read More

Erlang 中 DNS 解析顺序的问题

Erlang 的 DNS 解析方法有包括 file(读取 /etc/hosts 文件)、dns(Erlang 自己的 DNS 客户端)、native(调用外部程序 inet_gethost 用 libc 的 gethostbyname 函数解析域名) 在内的好几种方式,可以在 kernel inetrc 文件中以 {lookup, [...]} 形式指定多种 DNS 解析方法的应用顺序。在 inet:gethostbyname_tm/4 函数中可以发现任意一个域名的解析顺序是:

Read More