centos的debuginfo
Sunday, January 29, 2012 9:53:51 AM
centos6的debuginfo不在其mirrorslist中,放到了http://debuginfo.centos.org下。想使用的话,只需要修改/etc/yum.repos.d/CentOS-Debuginfo.repo的enabled的值改为1就可以了。
修改后,直接用yum install glibc-debuginfo 就ok了。
和debian系的apt类似,没怎么用过yum。结果google一好久,其实就这么简单。人家已经作好了。
enabled=1
修改后,直接用yum install glibc-debuginfo 就ok了。
和debian系的apt类似,没怎么用过yum。结果google一好久,其实就这么简单。人家已经作好了。
提高服务器吞吐量
Friday, March 11, 2011 5:57:05 AM
公司服务器是按SEDA的方式实现的。基本的思想就是,把所要处理的数据封装为一个event,把event的处理过程分拆为多个小的处理过程。每个小的处理过程完成某一具体工作。具体过程就是,enqueue到该模块的queue中,该模块的handler从queue中取event,进行处理。类似生产者/消费者的方式。
这样,在每个处理阶段,都会有一个队列存放等待处理的数量。如果,不考虑多线程的情况,那SEDA方式其实就是一种流水线的方式。但比流水线好一些,主要体现在,如果不考虑内存问题,服务器不会出现类似DOS的情况,只是数据处理吞吐量会维持在一定的水平。event在所有可能的stage间,来回跳转。当然,跳转也不是随便跳的,这也是有状态机来限制的,不会乱跳。
但不用多线程,这种的实现基本也就没有什么必要了。直接起单进程处理数据就完了。所以,要提高数据吞吐量,一定要用到多线程。这里,先不考虑线程总数量与服务器硬件之间的关系等等,只是涉及软件上,为提高数据吞吐量,所作的努力。
首先,线程在每个stage的数量,不是完全一样的。数据的处理,一般情况下,处理所花时间不是均匀分布的,有类似20/80的情况。那么针对这种情况,适当提高最费时的操作的线程个数,加快该stage的吞吐量,可以有效的提高整体吞吐量。但此处的提高,只是与其它stage线程数的一种比例上的提高,不是绝对数的提高。毕竟,线程也不是越多越好的。
还有一类似的情况,dispatcher,作数据分流的模块。毫无疑问,该模块必须是的整个服务器的性能热点。提高该模块的吞吐量,也可以采用业务stage模块的方式,加线程。但考虑极端情况,加线程最后,会导致dispatcher线程与业务stage总数近1:1的情况。可dispatcher吞吐量的提高,只是为了数据能快速跳到业务stage,进行处理。这种加线程的方式,代价太大了。在处理上,我就作了一点变通。一个stage是有一个handler和queue。但实现上,数据没有必要在dispatcher阶段,enqueue + handler。我增加了一种方式,让模块自己选择,该模块的handler是从queue中取数据,在自己的线程空间作呢,还是直接被其它线程直接调用,运行的空间也就是调用它的线程。也就是,dispatcher虽然还是模块,但只是当成函数用。数据输入该函数,直接计算出下一步的路由。这样,数据流就不会阻在dispatcher阶段,使数据快速的在业务模块间跳转。
其次,在多线程的情况下,为保证数据一致性,要用到类mutex的操作。当stage有多个线程处理,多个可能的输入线程时,该queue的mutex竞争非常厉害。而且,mutex的操作代价和每次取数据的操作比,代价也不小。此处,我采用了静态分发的方式。首先,将模块的enqueue改写。方式类似dispatcher。每个handler,都有一个queue。enqueue在计算出所要使用的queue后,将数据加到该queue中。一种类似数据分区的方式。如果数据平均分布,或随机选择queue的话,竞争的压力将是原压力的N分之一(N为handler数)。
但该方法也有其缺点。首先,handler数一般是固定的。如果是动态的,那handler的queue还要实现handler数改变时的,数据重组(采用一致性hash等等)。其次,数据分区只是在一定程度上缓解,并不是减少。最后,每次的mutex操作,代价不小。此时,可以采用一次性多取数据的方式,进一步减少mutex操作的代价在总代价中的比重。
以上,就是这次对类SEDA服务器进行性能优化时,所作的处理。主要是涉及结构性的东西。其实,具体的模块优化空间也很大。毕竟,性能的提高是多方面的综合提高,但更是对性能短板的修正。
这样,在每个处理阶段,都会有一个队列存放等待处理的数量。如果,不考虑多线程的情况,那SEDA方式其实就是一种流水线的方式。但比流水线好一些,主要体现在,如果不考虑内存问题,服务器不会出现类似DOS的情况,只是数据处理吞吐量会维持在一定的水平。event在所有可能的stage间,来回跳转。当然,跳转也不是随便跳的,这也是有状态机来限制的,不会乱跳。
但不用多线程,这种的实现基本也就没有什么必要了。直接起单进程处理数据就完了。所以,要提高数据吞吐量,一定要用到多线程。这里,先不考虑线程总数量与服务器硬件之间的关系等等,只是涉及软件上,为提高数据吞吐量,所作的努力。
首先,线程在每个stage的数量,不是完全一样的。数据的处理,一般情况下,处理所花时间不是均匀分布的,有类似20/80的情况。那么针对这种情况,适当提高最费时的操作的线程个数,加快该stage的吞吐量,可以有效的提高整体吞吐量。但此处的提高,只是与其它stage线程数的一种比例上的提高,不是绝对数的提高。毕竟,线程也不是越多越好的。
还有一类似的情况,dispatcher,作数据分流的模块。毫无疑问,该模块必须是的整个服务器的性能热点。提高该模块的吞吐量,也可以采用业务stage模块的方式,加线程。但考虑极端情况,加线程最后,会导致dispatcher线程与业务stage总数近1:1的情况。可dispatcher吞吐量的提高,只是为了数据能快速跳到业务stage,进行处理。这种加线程的方式,代价太大了。在处理上,我就作了一点变通。一个stage是有一个handler和queue。但实现上,数据没有必要在dispatcher阶段,enqueue + handler。我增加了一种方式,让模块自己选择,该模块的handler是从queue中取数据,在自己的线程空间作呢,还是直接被其它线程直接调用,运行的空间也就是调用它的线程。也就是,dispatcher虽然还是模块,但只是当成函数用。数据输入该函数,直接计算出下一步的路由。这样,数据流就不会阻在dispatcher阶段,使数据快速的在业务模块间跳转。
其次,在多线程的情况下,为保证数据一致性,要用到类mutex的操作。当stage有多个线程处理,多个可能的输入线程时,该queue的mutex竞争非常厉害。而且,mutex的操作代价和每次取数据的操作比,代价也不小。此处,我采用了静态分发的方式。首先,将模块的enqueue改写。方式类似dispatcher。每个handler,都有一个queue。enqueue在计算出所要使用的queue后,将数据加到该queue中。一种类似数据分区的方式。如果数据平均分布,或随机选择queue的话,竞争的压力将是原压力的N分之一(N为handler数)。
但该方法也有其缺点。首先,handler数一般是固定的。如果是动态的,那handler的queue还要实现handler数改变时的,数据重组(采用一致性hash等等)。其次,数据分区只是在一定程度上缓解,并不是减少。最后,每次的mutex操作,代价不小。此时,可以采用一次性多取数据的方式,进一步减少mutex操作的代价在总代价中的比重。
以上,就是这次对类SEDA服务器进行性能优化时,所作的处理。主要是涉及结构性的东西。其实,具体的模块优化空间也很大。毕竟,性能的提高是多方面的综合提高,但更是对性能短板的修正。
改变
Friday, March 11, 2011 2:54:19 AM
新的公司,基本已经定下来了,是作网络视频的。工作中,可以接触到我所关心的东西。上班的时间,也和现在差不多。只是,钱又要少了。。。。。我还真是不太擅长这方面,这差距拉的有点太大了。
哎,步子大了,容易扯着蛋。算了,争取和现在这家一样,干他两年,成核心再说。一切都是未知的,可能向好的方向发展,也可能不是。但不改变,一切还是不会变的。
- -,话说,这还是我第一次主动的跳。。。。。希望以后,能专心的作点自己感兴趣的东西
哎,步子大了,容易扯着蛋。算了,争取和现在这家一样,干他两年,成核心再说。一切都是未知的,可能向好的方向发展,也可能不是。但不改变,一切还是不会变的。
- -,话说,这还是我第一次主动的跳。。。。。希望以后,能专心的作点自己感兴趣的东西
新的一年
Sunday, January 23, 2011 8:27:30 AM
2011来了。自己也不再是奔三了,升级啦,开始奔四....
但,静下来想想,自己还是有太多的事情要去作,还有太多的事情没有作好。事业一般,爱情还没有。没办法,有些事情不是我一个人决定的。似乎,我现在,只能拼命的工作,唯有这样,我才不会感到过度的孤独。
新的一年了,春节后,准备换个环境了。现在的环境,已经不太适合我了。钱,只是其中的一个原因。更多的,是对我职业生涯的考虑。希望,明年能够如愿,进个大公司。去作真正的highly concurrent system,just like twitter,facebook....。
外加一个让我来电的她,哈
但,静下来想想,自己还是有太多的事情要去作,还有太多的事情没有作好。事业一般,爱情还没有。没办法,有些事情不是我一个人决定的。似乎,我现在,只能拼命的工作,唯有这样,我才不会感到过度的孤独。
新的一年了,春节后,准备换个环境了。现在的环境,已经不太适合我了。钱,只是其中的一个原因。更多的,是对我职业生涯的考虑。希望,明年能够如愿,进个大公司。去作真正的highly concurrent system,just like twitter,facebook....。
外加一个让我来电的她,哈
拔智齿
Sunday, May 25, 2008 2:56:22 AM
拔智齿,实在是太痛苦了。
我是5月20号去北京口腔医院拔的牙。实施的是什么无痛技术,还以为会真的不疼呢。其实不是,打麻醉的时候,非常非常的疼。而且,因为我这牙在拔之前,要先把牙上面的皮切开。所以,在除打麻醉针之外,还要打抗生素的针,一共是打了两针,扎了三次。比平时打胳膊,屁股的疼太多了。
打完针,过不了一会,半个脸就麻了,连舌头也麻了一半。护士把我的头给托住,大夫上来,好像是拧了3、4下,牙就下来了,然后又缝了一两针,咬好纱布,就完事了。下来一看,那颗牙好大呀。开始,以为还没长出来呢,不会很大呢,这一看,真是不得了。
刚拔完的时候,没有什么反应,麻劲还没过去呢。可再过了一会,这疼劲就上来了。一阵阵的疼,不只是拔牙的那块疼,还偶尔有打麻醉针时的那种疼,这叫一个难受。而且,在拔完牙62分钟之后,我花了1分多钟,才把嘴里的纱布给吐出来,这实在是太痛苦了。
可真正难受的还在后面。我是11点多拔的,从下午回家开始,就开始发低烧。到了晚上,还不时发高烧。最后,实在不行了,就又去医院了。先去的协和,人家不收,就哪里拔的,去哪里看。结果,又去了口腔医院。在急诊科,大夫说,我这是正常现象。如果出现,口腔恶臭或拔牙边头痛难忍的情况,再来医院。否则,回家吃医生开的抗生素或退烧药就应该没事了。就这样,回到家快一点了。
在发了两天的低烧和高烧之后,我终于不发烧了。可这两天,烧的我两条腿快抽筋了,体重也给烧掉了小10斤。然后,我就去上班了。没办法,请不下来假,不去就扣钱。(KAO,那SB,我一直在按时按质的完成Y给我的任务,没想到Y就这样对我。CAO,看来在Y眼里,我就是个写代码的机器,根本就不是人。如果,我以后再有什么大病,Y还不知道会怎么对我呢,一想到这,我就感到恐惧。我,随时都有被Y抛弃的危险。找工作,找到合适的就闪人,CAO,不伺候这SB了。)
在拔牙后的第三天,也就是我开始上班那天,我还只能进流食。一来,是因为,我拔的下面的牙,恢复比较慢,还张不开嘴。二来,是被拔的那颗边上的2号槽牙,现在有松动的迹象,一咬牙,就感觉那牙有些疼。如果,它再有问题,那我这半边的牙,就费了。并且,还不能说太多的话,说多了,体力消耗大,伤口疼。
在吃了两天的流食之后,也就是拔牙后的第五天,基本恢复正常。但下周二,要去折线。而那个牙洞,要有2、3个月才能长好,这期间,只能用另一边吃东西。
这次拔牙,给我消灭了一个隐患。在拔之前,那颗牙,已经有发炎的症状了。拔完了,炎症立刻就消失了。而且,从拍的片子来看,这是一个颗阻生齿。虽然,现在只是长的向外偏了,但已经有要挤其邻牙的趋势了。结果,我想到了,只是过程,太痛苦了。
大夫还建议我那阻生齿上面的那颗也拔了呢,因为它长多了,晕死我了....
我是5月20号去北京口腔医院拔的牙。实施的是什么无痛技术,还以为会真的不疼呢。其实不是,打麻醉的时候,非常非常的疼。而且,因为我这牙在拔之前,要先把牙上面的皮切开。所以,在除打麻醉针之外,还要打抗生素的针,一共是打了两针,扎了三次。比平时打胳膊,屁股的疼太多了。
打完针,过不了一会,半个脸就麻了,连舌头也麻了一半。护士把我的头给托住,大夫上来,好像是拧了3、4下,牙就下来了,然后又缝了一两针,咬好纱布,就完事了。下来一看,那颗牙好大呀。开始,以为还没长出来呢,不会很大呢,这一看,真是不得了。
刚拔完的时候,没有什么反应,麻劲还没过去呢。可再过了一会,这疼劲就上来了。一阵阵的疼,不只是拔牙的那块疼,还偶尔有打麻醉针时的那种疼,这叫一个难受。而且,在拔完牙62分钟之后,我花了1分多钟,才把嘴里的纱布给吐出来,这实在是太痛苦了。
可真正难受的还在后面。我是11点多拔的,从下午回家开始,就开始发低烧。到了晚上,还不时发高烧。最后,实在不行了,就又去医院了。先去的协和,人家不收,就哪里拔的,去哪里看。结果,又去了口腔医院。在急诊科,大夫说,我这是正常现象。如果出现,口腔恶臭或拔牙边头痛难忍的情况,再来医院。否则,回家吃医生开的抗生素或退烧药就应该没事了。就这样,回到家快一点了。
在发了两天的低烧和高烧之后,我终于不发烧了。可这两天,烧的我两条腿快抽筋了,体重也给烧掉了小10斤。然后,我就去上班了。没办法,请不下来假,不去就扣钱。(KAO,那SB,我一直在按时按质的完成Y给我的任务,没想到Y就这样对我。CAO,看来在Y眼里,我就是个写代码的机器,根本就不是人。如果,我以后再有什么大病,Y还不知道会怎么对我呢,一想到这,我就感到恐惧。我,随时都有被Y抛弃的危险。找工作,找到合适的就闪人,CAO,不伺候这SB了。)
在拔牙后的第三天,也就是我开始上班那天,我还只能进流食。一来,是因为,我拔的下面的牙,恢复比较慢,还张不开嘴。二来,是被拔的那颗边上的2号槽牙,现在有松动的迹象,一咬牙,就感觉那牙有些疼。如果,它再有问题,那我这半边的牙,就费了。并且,还不能说太多的话,说多了,体力消耗大,伤口疼。
在吃了两天的流食之后,也就是拔牙后的第五天,基本恢复正常。但下周二,要去折线。而那个牙洞,要有2、3个月才能长好,这期间,只能用另一边吃东西。
这次拔牙,给我消灭了一个隐患。在拔之前,那颗牙,已经有发炎的症状了。拔完了,炎症立刻就消失了。而且,从拍的片子来看,这是一个颗阻生齿。虽然,现在只是长的向外偏了,但已经有要挤其邻牙的趋势了。结果,我想到了,只是过程,太痛苦了。
大夫还建议我那阻生齿上面的那颗也拔了呢,因为它长多了,晕死我了....
尽自己微薄之力
Saturday, May 17, 2008 10:28:47 AM
5.12那天,虽说北京有也震感,但还是没有想有发生了如此强烈的地震。7.8级,这与唐山大地震的强度相同。从电视上看到的震后的汶川,一边废墟。到现在为止,估计死亡的人数要超过5万人了。网上的那些从汶川传来的照片向我揭示着地震过后的汶川,一个充满悲痛与绝望的汶川。
在这场灾难面前,除了感叹生命的脆弱之外,更有了那一份对人与人之间的那种相互帮助,相互关心的感动。温总理的憔悴,解放军的无畏,让我时时在想,我自己能为四川作点什么呢?人,是去不了四川了;血,我现在也献不了;钱,还是有一些的,数量不多,但还是要尽自己的一点点微薄之力,Y2000。希望四川的兄弟姐妹都能获救,希望震后的四川早日得到重建。以后,去四川旅游的话,一定要去汶川,通过在那里消费,支持他们的灾后重建。如果可以,我还想通过希望工程,帮助一个四川,贵州或云南的孩子,完成他的学业。说到这里,就不得不说,中国人寿要承担起所有地震孤儿到18岁的生活费用的行动,让我十分钦佩。
自小,我受到的教育就是要乐于助人,而现在,正是付之于行动的时候了。现在,我已经工作了,时间不长,工资不高,但我想回报社会,回报当初帮助过我、我的家人的那些人。毕竟,我不是四川人,并没有在5.12亲身经历那场灾难,相对于他们,我只在为他们贡献出自己那份力量,愿他们能早日战胜灾难。
抱一颗感恩之心,尽一份微薄之力。希望我们的国家走向强大,我们的生活富足祥和。
ps:古风还健在,愿所有在四川的、在灾区的人都能如此。
在这场灾难面前,除了感叹生命的脆弱之外,更有了那一份对人与人之间的那种相互帮助,相互关心的感动。温总理的憔悴,解放军的无畏,让我时时在想,我自己能为四川作点什么呢?人,是去不了四川了;血,我现在也献不了;钱,还是有一些的,数量不多,但还是要尽自己的一点点微薄之力,Y2000。希望四川的兄弟姐妹都能获救,希望震后的四川早日得到重建。以后,去四川旅游的话,一定要去汶川,通过在那里消费,支持他们的灾后重建。如果可以,我还想通过希望工程,帮助一个四川,贵州或云南的孩子,完成他的学业。说到这里,就不得不说,中国人寿要承担起所有地震孤儿到18岁的生活费用的行动,让我十分钦佩。
自小,我受到的教育就是要乐于助人,而现在,正是付之于行动的时候了。现在,我已经工作了,时间不长,工资不高,但我想回报社会,回报当初帮助过我、我的家人的那些人。毕竟,我不是四川人,并没有在5.12亲身经历那场灾难,相对于他们,我只在为他们贡献出自己那份力量,愿他们能早日战胜灾难。
抱一颗感恩之心,尽一份微薄之力。希望我们的国家走向强大,我们的生活富足祥和。
ps:古风还健在,愿所有在四川的、在灾区的人都能如此。
用cgi实现c/s结构
Saturday, April 19, 2008 7:15:16 AM
在对现在代码不改动的情况下,由client触发server来完成某种工作,并在提交之后,等待到server完成之后,client的触发命令才返回。也就是说,server工作的这段时间,client是阻塞的。
如果可以改代码的话,用socket就可以了。但现在,server那边的代码不让动,用socket发回结果的方法就不行了。所以,我这里用的是cgi。
这样,在client这边,用wget下载这个文件,地址http://ip/cgi-bin/server.sh。当server那边的server_programme执行完成之后,wget会把结果(这应该是由server_programme根据自身运行的结果,在最后打印出一个结果来,比如,OK)。然后,通过对这个下载文件的内容进行分析,就可以知道server是否正确完成的工作。
如果用wget调这个URL,并且还要分析一下wget下载日志的话或要把下载的结果存为指定文件的话,可用这面的命令:
ps:
记得打开apache里的cgi支持,并把server.sh放到其cgi-bin目录下
Create a GCI using bash scripting
如果可以改代码的话,用socket就可以了。但现在,server那边的代码不让动,用socket发回结果的方法就不行了。所以,我这里用的是cgi。
#!/bin/sh #server.sh echo -n -e "Content-Type: text/plain; charset=gb2312\r\n" echo -n -e "\r\n" /server_programme
这样,在client这边,用wget下载这个文件,地址http://ip/cgi-bin/server.sh。当server那边的server_programme执行完成之后,wget会把结果(这应该是由server_programme根据自身运行的结果,在最后打印出一个结果来,比如,OK)。然后,通过对这个下载文件的内容进行分析,就可以知道server是否正确完成的工作。
如果用wget调这个URL,并且还要分析一下wget下载日志的话或要把下载的结果存为指定文件的话,可用这面的命令:
wget 'http://ip/cgi-bin/server.sh' -O special_flie -o wget_logflie
ps:
记得打开apache里的cgi支持,并把server.sh放到其cgi-bin目录下
Create a GCI using bash scripting
编程总结 for lame(数据与函数分离)
Monday, April 14, 2008 8:38:27 AM
当从通道中,产生了语音流(alaw)之后,处理成mp3数据,然后写到文件中去。
通道数远大于处理的线程数。我的想法是,为每个线程增加一个lame_global_flags*。但这样的处理方法会造成数据的混乱。比如,不同的通道,由同一个线程来处理,造成部分生成的mp3文件是错误文件,也就是连读不能读。
正确的作法就是,把lame_global_flags*绑定到通道上。这样,对于每一个通道来说,输出的文件是绑定的,处理输出数据的encoder也是绑定的。
心得就是,尽量把数据与函数剥离。与具体数据相关的数据,要写到一起。而在函数中,只是供其运行的变量,数据就可以了。线程也是函数,不要因是线程,就把数据与函数混在一起,放到具体的数据结构中去。还有就是,在处理细节时,感觉已经找不到头绪的时候,把眼光要放大一些。也许是,在设计流程或处理方式时,出问题了。(呵呵,我这次就是这样。)
通道数远大于处理的线程数。我的想法是,为每个线程增加一个lame_global_flags*。但这样的处理方法会造成数据的混乱。比如,不同的通道,由同一个线程来处理,造成部分生成的mp3文件是错误文件,也就是连读不能读。
正确的作法就是,把lame_global_flags*绑定到通道上。这样,对于每一个通道来说,输出的文件是绑定的,处理输出数据的encoder也是绑定的。
心得就是,尽量把数据与函数剥离。与具体数据相关的数据,要写到一起。而在函数中,只是供其运行的变量,数据就可以了。线程也是函数,不要因是线程,就把数据与函数混在一起,放到具体的数据结构中去。还有就是,在处理细节时,感觉已经找不到头绪的时候,把眼光要放大一些。也许是,在设计流程或处理方式时,出问题了。(呵呵,我这次就是这样。)
| S | M | T | W | T | F | S |
|---|---|---|---|---|---|---|
|
| ||||||
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | |||
Kernel people
-
Ulrich Drepper
NPTL
-
Greg K-H
LDD
-
Robert Love
Linux kernel developer
- Greg Lehey
- Hao-Ran Liu
-
Grant Grundler
Documentation/pci.txt
- David S.Miller
Kernel Website
算法
-
Stefan Nilsson
LPC-tries
同路人
lower level
-
小華的部落格
BIOS領域

