由买买提看人间百态

topics

全部话题 - 话题: c10m
首页 上页 1 2 3 4 5 下页 末页 (共5页)
j*a
发帖数: 14423
1
来自主题: Programming版 - C10M 练习 step 1: 10M sockets
kernel: Mem-Info:
kernel: [] system_call_fastpath+0x1a/0x1f
kernel: [] ? page_fault+0x28/0x30
kernel: [] SyS_socket+0x5c/0xa0
kernel: [] sock_alloc_file+0x52/0x130
kernel: [] d_alloc_pseudo+0xe/0x20
kernel: [] __d_alloc+0x25/0x180
kernel: [] ? tcp_v4_init_sock+0x12/0x30
kernel: [] kmem_cache_alloc+0x227/0x280
kernel: [] ? inet_... 阅读全帖
j*a
发帖数: 14423
2
来自主题: Programming版 - C10M 练习 step 1: 10M sockets
这还只是最基本的file-max解决了
b*******s
发帖数: 5216
3
来自主题: Programming版 - C10M 练习 step 1: 10M sockets
应该就是这么回事了
b*******s
发帖数: 5216
4
来自主题: Programming版 - C10M 练习 step 1: 10M sockets
看来10M真的相当难搞,得换思路
b*******s
发帖数: 5216
5
来自主题: Programming版 - C10M 练习 step 1: 10M sockets
和default的都是吻合的
j*a
发帖数: 14423
6
来自主题: Programming版 - C10M 练习 step 1: 10M sockets
最前面得用load balancer顶着?
换udp?
rawsocket?
p*****w
发帖数: 429
7
来自主题: Programming版 - C10M 练习 step 1: 10M sockets
en, 估计你们机器也不行,看看人家卖19B的机器,24core 100GB ram, 2m
connections per server.

杀了
terminal
b*******s
发帖数: 5216
8
来自主题: Programming版 - C10M 练习 step 1: 10M sockets
我们实验室里有两台12cores,64GB的
b********e
发帖数: 595
9
来自主题: Programming版 - C10M 练习 step 1: 10M sockets

看我原帖里贴的link:
http://blog.lifeibo.com/blog/2011/07/07/200-long-connection.htm
转:
3. 由于客户端与服务端需要建立大量的socket,所以我们需要调速一下最大文件描述
符。
客户端,需要创建六万多个socket,我设置最大为十万好了,的在/etc/security/
limits.conf中添加:
admin soft nofile 100000
admin hard nofile 100000
服务端,需要创建200万连接,那我想设置nofile为200万,好,问题来了。
当我设置nofile为200万时,系统直接无法登陆了。尝试几次,发现最大只能设置到100
万。在查过源码后,才知道,原来在2.6.25内核之前有个宏定义,定义了这个值的最大
值,为1024*1024,正好是100万,而在2.6.25内核及其之后,这个值是可以通过/proc/
sys/fs/nr_open来设置。于是我升级内核到2.6.32。ulimit详细介绍见博文:老生常谈
升级内核后,继续我们的调优,... 阅读全帖
b********e
发帖数: 595
10
来自主题: Programming版 - C10M 练习 step 1: 10M sockets

run dmesg command, looks like oom killer ?
S*A
发帖数: 7142
11
来自主题: Programming版 - C10M 练习 step 1: 10M sockets
说的对级啦。
这里有三个东西要调,
fs.file-max
fs.nr_open
ulimit
其中那个 nr_open 是不太容易 google 出来的。
一般没有实际去实验的话大概找到其中的一两个。
然后真正的内存限制是要实际实验一下才能知道
上限在神魔地方。这就是为神魔我鼓励大家去
动手实验一下,看看结果和你预计的是不是一样。
我 8G 的笔记本可以跑到 2M sockets 然后就 OOM
把 X 杀掉了。倒是没有死机。所以,类推的话 10M
sockets 需要 差不多 40G 才能跑。这个还仅仅是
file descriptor,没有 tcp 连接。
在这以前参与实验的都给发包子。
S*A
发帖数: 7142
12
来自主题: Programming版 - C10M 练习 step 1: 10M sockets

这个是因为 OOM killer 是看程序使用内存的大小,就是用户 VMA 加起来
有多大。你的 a.out 用户空间的内存并不大,非常小,但是占用的核心
资源非常多。OOM killer 并不能看出 kernel 的内存是那个程序造成
的,像文件系统这些是共享的,没法数清,所以把大户 X 什么的给误
杀掉了。
d****i
发帖数: 4809
13
来自主题: Programming版 - C10M 练习 step 1: 10M sockets
大赞强贴,请问具体是那个文件定义了那个宏?
S*A
发帖数: 7142
14
来自主题: Programming版 - C10M 练习 step 1: 10M sockets
不重要,新的 kernel 都不用那个宏了,
使用 /proc/sys/fs/nr_open
BTW, 那个宏我没有记错的话就叫 NR_OPEN.
d****i
发帖数: 4809
15
来自主题: Programming版 - C10M 练习 step 1: 10M sockets
多谢!
q*c
发帖数: 9453
16
来自主题: Programming版 - C10M 练习 step 1: 10M sockets
好像要加某个系统 limit.
h**********c
发帖数: 4120
17
来自主题: Programming版 - C10M 练习 step 1: 10M sockets
从我个人角度讲用pc搞企业级的项目,不是很乐观
企业级的东西不需要多媒体,甚至不需要考虑兼容一堆垃圾硬件
简化简化再简化
你如果正规一点,就上个github,也搞个code review,unit test 什么的
咱们看看市场上的低端硬件能push到什么limit
S*A
发帖数: 7142
18
来自主题: Programming版 - C10M 练习 step 1: 10M sockets
大牛不感当,都说了是草民嘛,就是混口饭吃。
我用 Fedora 20。
你其实用任何 3 字头的 kernel 都可以。
S*A
发帖数: 7142
19
来自主题: Programming版 - C10M 练习 step 1: 10M sockets
就现在这个参与度我怕是不能指望 code review 了。
企业级的很多也就是强壮点的 PC 而已。
h**********c
发帖数: 4120
20
来自主题: Programming版 - C10M 练习 step 1: 10M sockets
参与度 concerns your leadership,
since you started this topic, you should start a github
I recently bought two PCs, can be used for test.
Code review or not, I can do test/doc.
Good committers should get community reference eg. linked etc.
企业级 at least less broken rate.
Some time h/w could make big problem.
e.g. a bad nic sent mal-formed frames, only half a year later it was
detected it is this problem.
d*******r
发帖数: 3299
21
来自主题: Programming版 - C10M 练习 step 1: 10M sockets
我觉得只要真能折腾出能用的 package/lib, 肯定能火的,有机会的话我也参加一个
不能用之前,我觉得大家就看热闹了,
如果能demo能用了,代码base还小,逻辑简单,dependency 少易于安装,就可能火了。
现在 large concurrent connections, high-scalability 的 message server 这些东
西, 大家都很需要。
S*A
发帖数: 7142
22
来自主题: Programming版 - C10M 练习2: 空TCP 连接,1M per 4G RAM
拍脑瓜的简单客户端。假设端口是 80, 启动指定服务器 IP 地址,
不用域名。当然会碰到一个 IP 地址只能发出去 65K 个连接的限制。
如何用 ip alias 使用多个 IP 地址解决这个问题留给大家自己改。
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
void die(char *reason)
{
perror(reason);
exit(1);
}
int main(int argc, char **argv)
{
int sockfd;
struct sockaddr_in... 阅读全帖
b*******s
发帖数: 5216
23
来自主题: Programming版 - C10M 练习2: 空TCP 连接,1M per 4G RAM
迟一点试试看
就不用给伪币了
挺有趣的
d*******r
发帖数: 3299
24
来自主题: Programming版 - C10M 练习2: 空TCP 连接,1M per 4G RAM
强 烈 支 持 本系列!
c****3
发帖数: 10787
25
来自主题: Programming版 - C10M 练习2: 空TCP 连接,1M per 4G RAM
要设SO_SNDBUF和SO_RCVBUF,否则光这两个socket buffer在Linux里的默认值,就吃掉
大量内存
S*A
发帖数: 7142
26
来自主题: Programming版 - C10M 练习2: 空TCP 连接,1M per 4G RAM
还没有开始发数据,好像我没有改也过了。
没准有真正数据才开始用 buffer?
你们会碰到其他险恶的问题的,哈哈哈。
c****3
发帖数: 10787
27
来自主题: Programming版 - C10M 练习2: 空TCP 连接,1M per 4G RAM
不用发数据,这两个buffer是在TCP连接建立好之前设置的,建立之后就不能改了。对
应就TCP协议里的用于流控的TCP Windows size。
如果默认值是2K,发送接收4K,1M连接,光这两个buffer,就需要4G内存
S*A
发帖数: 7142
28
来自主题: Programming版 - C10M 练习2: 空TCP 连接,1M per 4G RAM
我可以告诉你的是我的实验通过了,就是在4G 的笔记本上,
服务器端程序没有改。(其配置有改)。这个buffer 我的确
没有碰。你能指出 kernel allocate buffer 的代码在那里吗?
我们可以一起看看是不是空连接就已经分配 window buffer 了。
我粗略看了一下,没有在连接的时候找到。如果你很确定知道
buffer 在那里分配的,有 kernel 源程序最好。那值得研究一下
为什么我的机器没有 crash.
b********e
发帖数: 595
29
来自主题: Programming版 - C10M 练习2: 空TCP 连接,1M per 4G RAM

ss -t -m试试,我印象平时是空的
另外学习别人的经验,装systemtap查。我觉得C1M问题离programming版有点远,不是
多少行代码的问题。
看链接:
http://blog.yufeng.info/archives/2511
S*A
发帖数: 7142
30
来自主题: Programming版 - C10M 练习2: 空TCP 连接,1M per 4G RAM
这个问题我大概有理解了。那个tcp buffer 就是sk_buff 链。没有其它的另外buffer
,所以没有数据就是空的。
b*******s
发帖数: 5216
31
来自主题: Programming版 - C10M 练习2: 空TCP 连接,1M per 4G RAM
昨天看了下内核的代码,新建socket就是分配了新的inode,以及你说的sk list,一个空
的双向链表,还有些structure

buffer
S*A
发帖数: 7142
32
来自主题: Programming版 - C10M 练习2: 空TCP 连接,1M per 4G RAM
//hand
这个也是我的结论。那个 TCP buffer 就是在sk_buffer 链里面表示的。
b*******s
发帖数: 5216
33
来自主题: Programming版 - C10M 练习2: 空TCP 连接,1M per 4G RAM
http://www.linuxjournal.com/article/1312
在源代码里看到他的名字,搜了一下
b*******s
发帖数: 5216
34
来自主题: Programming版 - C10M 练习2: 空TCP 连接,1M per 4G RAM
昨天还干了件蠢事,直接给vm分了4g内存,想看看有什么区别
后来发现vm里centos是32位的
S*A
发帖数: 7142
35
来自主题: Programming版 - C10M 练习2: 空TCP 连接,1M per 4G RAM
2G/2G or 3G/1G split kernel 地址空间不够用?
S*A
发帖数: 7142
36
来自主题: Programming版 - C10M 练习2: 空TCP 连接,1M per 4G RAM
提示一下,这个练习需要编写连接一个远程端口的时候,
使用指定的本定 IP 地址。如果让系统自动挑 IP, 系统
只会自动挑第一个满足 routing 条件的 IP,用光这个 IP
所有的端口就跑不下去了。
谁来试着改进一下程序使用指定的本地 IP?
d*******r
发帖数: 3299
37
来自主题: Programming版 - C10M 练习2: 空TCP 连接,1M per 4G RAM
搞个 github 帐号吧,把大家的研究成果和步骤存上去
S*A
发帖数: 7142
38
来自主题: Programming版 - C10M 练习2: 空TCP 连接,1M per 4G RAM
我其实就是抛砖引玉而已,我大概不会把解决方案
直接贴上去,这样就没有了解决问题的乐趣。我说的
这些问题,分开拆解其实都不难对付。
github 大概会要有更加成熟的东西才会考虑贴。
l***e
发帖数: 450
39
来自主题: Programming版 - C10M 练习2: 空TCP 连接,1M per 4G RAM
not exactly,the so_snd and so_rcv only enforce the limit of buffer that can
be used/queued at the socket, it does not really commit any buffer space.
The buffer comes from network driver for inbound traffic, and application
for outbound traffic.
c****3
发帖数: 10787
40
来自主题: Programming版 - C10M 练习2: 空TCP 连接,1M per 4G RAM
IP fragment重组是不能靠network driver的,没有buffer怎么做。

can
S*A
发帖数: 7142
41
来自主题: Programming版 - C10M 练习2: 空TCP 连接,1M per 4G RAM
这个问题我和 brainless 在另外一个贴里面有比较深入的讨论了。
http://www.mitbbs.com/article_t1/Programming/31330685_0_7.html
这个在建立空的 TCP 连接的时候是不需要的。也就是说,现在
的 Linux 还是比较聪明的,不会在没有需要的时候把buffer 白白
预留在那里。
buffer 就是以 sk_buff 的形式存在的,是有数据进来的时候才
分配。IP fragment 就是用buffer的其中一部分,对网卡就是改
buffer地址和长度,没有什么难度。要把几个用户的send buffer
合并到一个 ip 包里面,依然可以用网卡驱动直接完成。现在网卡
有 scatter/gather list, 你可以把几个不同的buffer直接告诉网卡
用一个包发出去。只有特别老的网卡不支持 scatter/gather list.
我记得以前特别著名的 NE2000 就是那样,现在应该没有那种网卡
了。
b*******s
发帖数: 5216
42
来自主题: Programming版 - C10M 练习2: 空TCP 连接,1M per 4G RAM
最近我在考虑买台server做试验用,看看现在8个核,64g ram的机器也就两三千刀
和一个macbook pro开发本差不多贵
S*A
发帖数: 7142
43
来自主题: Programming版 - C10M 练习2: 空TCP 连接,1M per 4G RAM
回到正题上,用 4G 内存的笔记本保持 1M 个空的 TCP 连接
我已经实验出来了。所以这一步定下的目标是可以是实现的,
大家不用过于担心 4G 不够用的问题,至少这一步不用。
还是需要在客户端改用指定的 IP 地址才能避免同一个 IP 有
65K 个端口的限制。现在我还没有看到有其他同学贴这个代码
出来。这样吧,我再放 10 个包子,给第一个贴用多个 IP 连
接的。就是简单的 socket 编程啊。
然后我再追加一个非常简单的要求,原来程序里面得到的连接
的 handle 是直接扔掉的。现在要求把得到的 handle 放到一个
大数组里面,1M TCP 就是 4M 空间,很小。然后这把柄的数
组就是下一步练习 3 epoll 要用到的。
大家加油啊。
j*a
发帖数: 14423
44
来自主题: Programming版 - C10M 练习2: 空TCP 连接,1M per 4G RAM
我觉得这个说得挺清楚的了:
http://stackoverflow.com/questions/1175108/
Use getifaddrs() to enumerate all the interfaces
and find the IP address for the interface you want
to bind to. Then use bind() to bind to that IP
address, before you call connect().
S*A
发帖数: 7142
45
来自主题: Programming版 - C10M 练习2: 空TCP 连接,1M per 4G RAM
代码,描述没有包子。
S*A
发帖数: 7142
46
来自主题: Programming版 - C10M 练习2: 空TCP 连接,1M per 4G RAM
这个说的对,我的实验也是这样干的。
只不过 interface 是我自己建立的,我不用去查看
什么 IP。查看也行,如果已经有程序建立了那 20
多个虚拟网卡。我不建议手动建立 20 个 ip alias.
等待代码。
S*A
发帖数: 7142
47
来自主题: Programming版 - C10M 练习2: 空TCP 连接,1M per 4G RAM
不要被我呼悠了啊,我可不保证你的 server 可以上 10M 连接啊.
如果你真的要买,搞个 Intel 的网卡,可以玩 DKDP。 看上去
DKDP 比 OpenOnLoad 可玩性高。实用不一定啊。
建议还是先用的现有的机器把实验做了,把低端机器推到极致。
确定是内存限制了你的性能,然后再上高端的机器。
b*******s
发帖数: 5216
48
来自主题: Programming版 - C10M 练习2: 空TCP 连接,1M per 4G RAM
不光是做这个试验,反正也没几个钱,还能捣鼓点别的东西
S*A
发帖数: 7142
49
来自主题: Programming版 - C10M 练习2: 空TCP 连接,1M per 4G RAM
拍脑瓜的简单客户端。假设端口是 80, 启动指定服务器 IP 地址,
不用域名。当然会碰到一个 IP 地址只能发出去 65K 个连接的限制。
如何用 ip alias 使用多个 IP 地址解决这个问题留给大家自己改。
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
void die(char *reason)
{
perror(reason);
exit(1);
}
int main(int argc, char **argv)
{
int sockfd;
struct sockaddr_in... 阅读全帖
b*******s
发帖数: 5216
50
来自主题: Programming版 - C10M 练习2: 空TCP 连接,1M per 4G RAM
迟一点试试看
就不用给伪币了
挺有趣的
首页 上页 1 2 3 4 5 下页 末页 (共5页)