博文

目前显示的是 一月, 2013的博文

ATI显卡与Xserver 1.13

我在解决了CPU频率不对的问题之后,发现我的Fedora18还是非常非常慢,很卡。我一想, 啊,没装显卡驱动。我的显卡是AMD Mobility Radeon HD 4500。驱动在 http://support.amd.com/us/gpudownload/linux/legacy/Pages/legacy-radeon_linux.aspx,目前最新的是12.6版。对Xserver只支持到1.12。于是我装完之后就:[ 41.600] Loading extension GLX
[ 41.600] (II) LoadModule: "fglrx"
[ 41.601] (II) Loading /usr/lib64/xorg/modules/drivers/fglrx_drv.so
[ 41.820] (EE) Failed to load /usr/lib64/xorg/modules/drivers/fglrx_drv.so: /usr/lib64/xorg/modules/drivers/fglrx_drv.so: undefined symbol: noXFree86DRIExtension
[ 41.820] (II) UnloadModule: "fglrx"
[ 41.821] (II) Unloading fglrx
[ 41.821] (EE) Failed to load module "fglrx" (loader failed, 7)
[ 41.821] (EE) No drivers available.ubuntu 12.10用的xserver也是1.13。也遇到了这个问题。只能表示很无奈。顺便抱怨下,github.com被墙了。目前主要是让DNS返回错误的IP。改下hosts文件即可。

Fedora18的cpufreq bug

# cpupower frequency-info
analyzing CPU 0:
driver: acpi-cpufreq
CPUs which run at the same hardware frequency: 0 1 2 3
CPUs which need to have their frequency coordinated by software: 0
maximum transition latency: 10.0 us.
hardware limits: 933 MHz - 2.40 GHz
available frequency steps: 2.40 GHz, 2.27 GHz, 2.13 GHz, 2.00 GHz, 1.87 GHz, 1.73 GHz, 1.60 GHz, 1.47 GHz, 1.33 GHz, 1.20 GHz, 1.07 GHz, 933 MHz
available cpufreq governors: conservative, userspace, powersave, ondemand, performance
current policy: frequency should be within 933 MHz and 960 MHz.
The governor "performance" may decide which speed to use
within this range.
current CPU frequency is 933 MHz (asserted by call to hardware).
boost state support:
Supported: no
Active: no
1800 MHz max turbo 2 active cores
1800 MHz max turbo 1 active cores/sys/devices/system/cpu/cpu0/cpufreq/bios_limit里面的值是正常的。以前我在FreeBSD下也遇到过这种bug,为了省电而自动降低cpu频率,结果一直锁死在一个我无法忍受的低频下(无论CPU负载有多高)。但是FreeBSD下很轻易的就结果了,卸载相关模块即可。fedora这个2B,竟然把这个模块给内置在kernel中了,而且没有办法通过启动时的命令…

2013-01-16

在京东上买了一个笔记本电源,插上之后外接显示器狂闪。无论是在公司还是在家都是如此,换显示器也没用。想退货时发现,得先绑定手机号,然后设置一个新的交易密码,京东才会考虑给我退货。今天把shrpx的代码check下来改了改。 这是一个SPDY的proxy server。和我上次发的nodejs的版本相比,这个是纯C/C++的,占用内存只有3-4MB。而nodejs则要40-70MB。我刚改了改给它加上HTTP Basic身份认证。想下一步如何去除对squid的依赖,把它变成一个简单轻巧独立的proxy server。HTTP Basic身份认证是无状态的。我拿chrome测试了一下,它第一次访问proxy的时候,不知道需要密码。所以每个connection新连上来的时候,我要给它回复407,在reply headers中告诉它需要什么模式的身份认证。然后它每次发http request的时候都会把用户名密码带上。这就是所谓的stateless。可是,我真的有必要每次都去检查密码是否正确吗? 还是对于每个connection,只检查第一次就行了?你们先别急着用。等我把对squid/apache的依赖去掉了再release。update: 2013-08-29 我已经把这个项目从github上删除了。因为暂时觉得squid挺好的。

Fedora 18 released

图片
从 fedora 17更新到fedora 18的方法:# yum install -y fedup
# fedup-cli --network 18 --debuglog fedupdebug.log --instrepo=http://mirrors.kernel.org/fedora/releases/18/Fedora/x86\_64/os/重启后会进入fedup模式。然后升级完之后会自动再重启一次。我正在一台台的顺序升级。刚完成2台。1月16日 00:36本站升级完毕。因为我用的vps不支持grub2(事实上xen 3.x只支持grub 0.9x),所以fedup并未能成功的帮我更新grub的配置文件。reboot之后grub的引导菜单中并没有fedup的选项。解决办法是kernel 文件是vmlinuz-fedup。kernel末尾还要加上upgrade systemd.unit=system-upgrade.target 参数。否则会再挂载完文件系统后卡死在那里(我等了50分钟才手动重启)initrd文件是initramfs-fedup.img 。按照以上信息,在grub中手动引导下就ok了。升级后,apache的版本是2.4.3。由于api的改变,二进制版的spdy mod用不了了。"Apache 2.4 renames unixd_config -> ap_unixd_config "。kernel升级到了3.7.2。理论上来说,已经支持tcp fast open了。但是server端的代码需要做小许改动。所以apache什么的应该还不支持……256色的TERM:在/etc/profile中加入
export SEND_256_COLORS_TO_REMOTE=1在SecureCRT中把Term类型设置成xterm。然后登录。查看env。TERM=xterm-256color启用256色前后,emacs的语法高亮对比

strstr函数的返回类型为什么是char*而不是const char* ?

Synopsis
#include <string.h>
char *strstr(const char *s1, const char *s2);Description
The strstr function locates the first occurrence in the string pointed to by s1 of the
sequence of characters (excluding the terminating null character) in the string pointed to by s2.ReturnsThe strstr function returns a pointer to the located string, or a null pointer if the string
is not found. If s2 points to a string with zero length, the function returns s1.以上内容摘自ISO C99标准。这个函数要返回的是s1经过偏移后的值,而不是把s1复制一份返回。那么,既然s1是const char*,返回的类型也应该是const char* 啊!

2013-01-10

今天先是解决了hadoop的kerberos的ticket刷新的问题。我在我的每个程序的main的开头调用了一下UserGroupInformation里的loginUserFromKeytab方法。然后就一直在折腾hcataloghive。hcatalog 的文档极少。初始化的过程中频繁遇到mysql的key的长度不能超过767的问题。最后无奈,把database的字符集从utf8改成latin1。然后发现,hive添加partition的时候,location不能是文件只能是一个目录。于是我就只好继续挪我的日志的目录结构。然后,我发现我在设置map task的input目录时HCatInputFormat.setInput(job, InputJobInfo.create(null, "raw_access_log", null)); 不能设置filter。我的日志是按日期作partition。可是我这里一旦设置了过滤条件,程序就在这一行中止了,连一个异常都没扔出来。这让我非常郁闷。如果这个问题不解决hcatalog就是unusable。然后就是我一直不知道,如果hive的schema改变了怎么办?老数据还能继续读取吗?假如storage format是plain text。明天继续学 hive 的语法吧。https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL

2013-01-09

今天完成的最大的一件事情就是 hadoop 相关程序搬迁。本来我在办公区的机房找了5台服务器自建了一个 hadoop 集群。然后听说公司的数据平台部门有hadoop集群可开放出来用,于是我赶紧搬家啊!!办公区机房的那些服务器连UPS都没有,几乎每次遇到假期都会断电。程序都好改。改改配置文件,改一改路径名就可以了。但是最头疼的是数据怎么搬过去? 新的hadoop集群是采用kerberos认证,而老的(我自建的)没有开身份认证。我本来想写个程序完成这个事情,从一个流读,然后写入另一个流,不经过临时文件。后来发现不行,在单个进程中做不到。org.apache.hadoop.security.UserGroupInformation 这个类有一个boolean类型的静态变量useKerberos。true就代表走kerberos认证,false就用操作系统当前的用户不经什么身份检查直接访问服务。可恨的是,这个类还专门写了一个叫做ensureInitialized的函数保证useKerberos这个变量只被初始化一次。privatestaticsynchronizedvoidensureInitialized(){ if (!isInitialized) { initialize(new Configuration()); } } 无奈。还是写shell脚本hadoop dfs -get/-put吧。200KB/s的传输速度真让我难忍。然后就是安装hive和hcatalog。我现在是自己用protocol buffers来管理数据的结构信息,自己手写pig的loader。我在考虑要不要转移给hive和hcatalog去做这件事情。它们很容易帮我做好按日期分区查询。有一点我没明白。假如我现在是在shell下用kinit找KDC要的ticket。那么在这个ticket到期的时候,谁来刷新这个ticket呢?1.0.4的hadoop的配置文件中我没有找到填keytab的地方。郁闷。update: 2013-01-10shell下kinit取得的ticket默认只有1天的有效期。如果crontab中的程序依赖于这个,那么就很糟。在java程序的main函数的开头用 org.apache.hadoop.security.UserGroupInformat…