Archive

Posts Tagged ‘kernel’

Erlang集群未公开特性:IP网段限制

October 1st, 2011 No comments

原创文章,转载请注明: 转载自系统技术非业余研究

本文链接地址: Erlang集群未公开特性:IP网段限制

Erlang集群二个节点之间的通讯是通过一个tcp长连接进行的,而且是全联通的,一旦cookie论证通过了,任何一个节点就获得全集群的访问权,可以参考Erlang分布的核心技术浅析
。erlang的这个授权模式特定搞的这么简单,但是在实际使用中还是有安全性的问题。我们退而求其次,来个IP网段限制,这个功能Erlang是有的只是没有文档化。
Read more…

Post Footer automatically generated by wp-posturl plugin for wordpress.

如何在TILEPro64多核心板卡上编译和运行Erlang

November 2nd, 2010 21 comments

原创文章,转载请注明: 转载自系统技术非业余研究

本文链接地址: 如何在TILEPro64多核心板卡上编译和运行Erlang

参考文章:
1. https://groups.google.com/group/erlang-programming/msg/2d61b1083a10a7b6

2. http://erlang.2086793.n4.nabble.com/How-to-Cross-compile-Erlang-OTP-R13B04-for-TileraPro64-td2119304.html

美国Tilera公司的众核服务器,单颗内核包含64颗CPU。硬件架构图:

卡长这样的:

Erlang已经可以在这款CPU上成功运行,我们可以参考Ulf Wiger在Multicore ☺ Message-passing Concurrency 文档中关于Erlang在Tilera上的性能图.

Erlang系统前2年就开始正式支持Tilera,一直用这个CPU来调整他的调度器,所以性能和基础的编译运行支持都很到位。

Linux内核2.6.36起就开始支持Tilera的CPU架构了,看起来前途不错。

最近 上海泛腾电子科技 开始在国内销售 Tilera机器, 我公司也得到一台样机,使得我有机会把玩下这个高科技!

该测试机是PCI-e的形式,是单板机,直接安装在PC机或者是服务器里,好处是可以通过主机的VGA口接显示器直接调试。当然也可以作为智能网卡来使用。构成一个与Host的异构结构,通过PCI-e总线进行通讯。

还需要相应的配套SDK: 目前有TileraMDE-2.1.2.112814 和 TileraMDE-3.0.alpha3.116173 二个版本, 来负责和板卡的通信。 推荐用2.0的,好像不容易出问题。

废话少说,让我们开始享受64核心快乐旅程吧!
Read more…

Post Footer automatically generated by wp-posturl plugin for wordpress.

用systemtap来修改下linux内核变量的值

October 29th, 2009 5 comments

原创文章,转载请注明: 转载自系统技术非业余研究

本文链接地址: 用systemtap来修改下linux内核变量的值

我们在探索linux内核的时候,经常需要调整下变量的值,看它对系统的影响。如果这个值没有透过/proc来修改的话,那只能编译内核。这个步骤是非常繁琐的。现在我们有systemtap这个利器来帮忙了。

演示如下:
我们通过修改过
extern int sysctl_tcp_fin_timeout;的值来达到目的。是因为这个值是proc导出的 我们好验证是否成功。

root@localhost ~]# cat /proc/sys/net/ipv4/tcp_fin_timeout
15000
[root@localhost ~]# cat test.stp
probe begin
{
        printf("ready go\n");
}

probe kernel.function("do_tcp_setsockopt")
{
        $sysctl_tcp_fin_timeout = $1
        printf("sysctl_tcp_fin_timeout = %d\n", $sysctl_tcp_fin_timeout);
        exit()
}

[root@localhost ~]# stap -g test.stp 18000
ready go

这个时候 stap在运行, 只是还没有触发do_tcp_setsockopt.
现在我们来触发

[root@localhost ~]# erl
Erlang R13B02 (erts-5.7.3)  [64-bit] [smp:2:2] [rq:2] [async-threads:0] [hipe] [kernel-poll:false]

Eshell V5.7.3  (abort with ^G)
1> {ok, LSock} = gen_tcp:listen(0, []).
{ok,#Port<0.437>}
2>
2> inet:setopts(LSock, [{nodelay,true}]).
ok
3>

Ok,这时候回头可以看到stap打出来以下:
sysctl_tcp_fin_timeout = 18000

我们来验证下:

root@localhost ~]# cat /proc/sys/net/ipv4/tcp_fin_timeout
18000

OK,成功。

Tips:
1. stap对全局变量的写需要-g guru模式。
2. 全局变量必须在一个单元内的函数里面才可以修改, 而且必须是在内核上下文。

PS. 这样写的话会更好,因为这个变量是单元可见的,这个模块里面的任何函数被触发都可以看到这个变量. 因为这是tcp的核心模块随时都会被出发的,免除了以上的麻烦!

$ cat test.stp
probe begin
{
        printf("ready go\n");
}
probe kernel.function("*@net/ipv4/tcp.c") 
//probe kernel.function("do_tcp_setsockopt")
{
        $sysctl_tcp_fin_timeout = $1
        printf("sysctl_tcp_fin_timeout = %d\n", $sysctl_tcp_fin_timeout);
        exit()
}

Post Footer automatically generated by wp-posturl plugin for wordpress.