- 主题:关于FB2000使用DLM的问题
鉴于要整理fb2k的代码,这个问题想弄清楚一些。小弟原来接触
的程序是fb2kv1219(beta4),这个版本的fb2k是没有DLM的版本,当然
也就没有游戏。在其附近使用DLM的版本有v1126和v1.0909(v1.0423)。
据老农的论文分析,使用DLM是为了节省每一个用户所占用的系统
资源,当某些功能仅被少数用户使用的时候较有优势,但代码调用较慢。
另一方面,据说(仅仅是据说,请大家验证)DLM在某些系统上运转
有问题。当然DLM的一个好处是可以把很多扩展功能做出来,甚至可以
把原来一些由crontab完成的工作整合进来,达到统一。
我想听听大家的意见,是否把DLM整合到整理的版本中来,如果这样
某些功能可能需要调整到不同的文件当中了,谢谢!
--
FROM 211.69.197.73
我赞同使用 .so 文件的方式。像管理菜单里面的好多功能真的是很少用到的,
单独分离出来还是一个很不错的主意的。
不过是否能够达到省内存的目的还不好说,跟程序怎么写很有关系的,
以前看了一些写 .so 文件的资料,有些地方还不甚理解,以后向大家请教了。:)
【 在 quickmouse (碰猫死翘翘) 的大作中提到: 】
: 鉴于要整理fb2k的代码,这个问题想弄清楚一些。小弟原来接触
: 的程序是fb2kv1219(beta4),这个版本的fb2k是没有DLM的版本,当然
: 也就没有游戏。在其附近使用DLM的版本有v1126和v1.0909(v1.0423)。
: 据老农的论文分析,使用DLM是为了节省每一个用户所占用的系统
: 资源,当某些功能仅被少数用户使用的时候较有优势,但代码调用较慢。
: 另一方面,据说(仅仅是据说,请大家验证)DLM在某些系统上运转
: 有问题。当然DLM的一个好处是可以把很多扩展功能做出来,甚至可以
: 把原来一些由crontab完成的工作整合进来,达到统一。
: 我想听听大家的意见,是否把DLM整合到整理的版本中来,如果这样
: 某些功能可能需要调整到不同的文件当中了,谢谢!
--
FROM 166.111.160.6
1. 不能达到节省内存的目的。
2. 可以加快程序启动,有可能节省CPU消耗。
【 在 flyriver.bbs@apue.dhs.org (忧郁的飞流直下) 的大作中提到: 】
: 我赞同使用 .so 文件的方式。像管理菜单里面的好多功能真的是很少用到的,
: 单独分离出来还是一个很不错的主意的。
: 不过是否能够达到省内存的目的还不好说,跟程序怎么写很有关系的,
: 以前看了一些写 .so 文件的资料,有些地方还不甚理解,以后向大家请教了。:)
--
FROM 166.111.3.49
用 dlopen() 的也不能省内存么?而不是在启动程序时由 ld 动态加载。
比如 100 个进程,只有 5 个进程用 dlopen() 加载了额外的 .so 文件,
其他的 95 个进程不再加载任何额外的 .so,这样也省不了内存?
【 在 KCN@smth.org (毒中之毒~生亦何欢,死亦何苦) 的大作中提到: 】
: 1. 不能达到节省内存的目的。
: 2. 可以加快程序启动,有可能节省CPU消耗。
: 【 在 flyriver.bbs@apue.dhs.org (忧郁的飞流直下) 的大作中提到: 】
: : 我赞同使用 .so 文件的方式。像管理菜单里面的好多功能真的是很少用到的,
: : 单独分离出来还是一个很不错的主意的。
: : 不过是否能够达到省内存的目的还不好说,跟程序怎么写很有关系的,
: : 以前看了一些写 .so 文件的资料,有些地方还不甚理解,以后向大家请教了。:)
--
FROM 166.111.160.6
【 在 flyriver (忧郁的飞流直下) 的大作中提到: 】
: 用 dlopen() 的也不能省内存么?而不是在启动程序时由 ld 动态加载。
: 比如 100 个进程,只有 5 个进程用 dlopen() 加载了额外的 .so 文件,
: 其他的 95 个进程不再加载任何额外的 .so,这样也省不了内存?
如果是同一个.so,dlopen()多少次都一样啊
怎么可能节省下来呢?
加快程序启动倒是真的
: 【 在 KCN@smth.org (毒中之毒~生亦何欢,死亦何苦) 的大作中提到: 】
: : 1. 不能达到节省内存的目的。
: : 2. 可以加快程序启动,有可能节省CPU消耗。
--
FROM 166.111.168.8
是这样的,原来的 FB 系统是把所有的功能都做到一个文件里面,即 bbsd。
后来 FB2K 做了一点改动,把系统维护菜单的所有功能单独编译成 admintool.so,
于是 bbsd 也小了一些。
设原来的 bbsd 为 bbsd1, 新的小一些的 bbsd 为 bbsd2。
bbsd2 + admintool.so >= bbsd1 ?
原来的 100 个进程 100 * bbsd1,
新的为 95 * bbsd2 + 5 * (bbsd2 + admintool.so),
那么这两个哪个大,哪个小呢?
【 在 scz (小四) 的大作中提到: 】
: 【 在 flyriver (忧郁的飞流直下) 的大作中提到: 】
: : 用 dlopen() 的也不能省内存么?而不是在启动程序时由 ld 动态加载。
: : 比如 100 个进程,只有 5 个进程用 dlopen() 加载了额外的 .so 文件,
: : 其他的 95 个进程不再加载任何额外的 .so,这样也省不了内存?
: 如果是同一个.so,dlopen()多少次都一样啊
: 怎么可能节省下来呢?
: 加快程序启动倒是真的
--
FROM 166.111.160.6
我想flyriver和我是一个意思,比如:
大部分用户使用的bbsd进程只有普通的功能,如阅读文章等等,
但是单独的一些管理功能以及特殊功能放在一个.so当中,仅仅
在部分用户使用过程当中才调用,是不是可以认为:
原来不使用DLM的bbsd集成了所有的功能,其大小大于普通功能的
bbsd + 特殊功能.so的大小,而大部分的用户很少使用特殊功能。
这样可以达到所有在线用户占用的内存总量减小的效果?
麻烦四哥解释一下
【 在 scz (小四) 的大作中提到: 】
: 【 在 flyriver (忧郁的飞流直下) 的大作中提到: 】
: : 用 dlopen() 的也不能省内存么?而不是在启动程序时由 ld 动态加载。
: : 比如 100 个进程,只有 5 个进程用 dlopen() 加载了额外的 .so 文件,
: : 其他的 95 个进程不再加载任何额外的 .so,这样也省不了内存?
: 如果是同一个.so,dlopen()多少次都一样啊
: 怎么可能节省下来呢?
: 加快程序启动倒是真的
--
FROM 211.69.197.73
进程之间都是通过mmap共享同一份bbsd, 所以仅靠.so减小bbsd
的大小节约不了多少内存. 不过把游戏放到.so里面应该有效,
因为游戏里面很多m*n的数组.
【 在 quickmouse.bbs@apue.dhs.org (碰猫死翘翘) 的大作中提到: 】
: 我想flyriver和我是一个意思,比如:
: 大部分用户使用的bbsd进程只有普通的功能,如阅读文章等等,
: 但是单独的一些管理功能以及特殊功能放在一个.so当中,仅仅
: 在部分用户使用过程当中才调用,是不是可以认为:
: 原来不使用DLM的bbsd集成了所有的功能,其大小大于普通功能的
: bbsd + 特殊功能.so的大小,而大部分的用户很少使用特殊功能。
: 这样可以达到所有在线用户占用的内存总量减小的效果?
: 麻烦四哥解释一下
--
FROM 166.111.60.178
这个倒是有道理,如果是写得不好的游戏使用了静态的数组,那么
dlm能省内存
【 在 period (瞌睡虫soso) 的大作中提到: 】
: 进程之间都是通过mmap共享同一份bbsd, 所以仅靠.so减小bbsd
: 的大小节约不了多少内存. 不过把游戏放到.so里面应该有效,
: 因为游戏里面很多m*n的数组.
--
FROM 166.111.3.49
【 在 flyriver.bbs@apue.dhs.org (忧郁的飞流直下) 的大作中提到: 】
: 是这样的,原来的 FB 系统是把所有的功能都做到一个文件里面,即 bbsd。
: 后来 FB2K 做了一点改动,把系统维护菜单的所有功能单独编译成 admintool.so,
: 于是 bbsd 也小了一些。
: 设原来的 bbsd 为 bbsd1, 新的小一些的 bbsd 为 bbsd2。
: bbsd2 + admintool.so >= bbsd1 ?
: 原来的 100 个进程 100 * bbsd1,
: 新的为 95 * bbsd2 + 5 * (bbsd2 + admintool.so),
: 那么这两个哪个大,哪个小呢?
100 * bbsd1 = bbsd1 无论多少个进程在内存中都只有一个程序副本
95 * bbsd2 + 5* (bbsd2 + admintool.so) = bbsd2 + admintool.so
一般来说,第二个大,但是如果写得不好的.so使用了大量静态内存的除外。
--
修改:KCN FROM 166.111.3.49
FROM 166.111.3.49