免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12345
最近访问板块 发新帖
楼主: gaojl0728

[其他] Linux 缺陷大吐槽 [复制链接]

论坛徽章:
0
发表于 2014-07-01 13:57 |显示全部楼层
回复 40# gaojl0728
首先你是吐槽当前linux的设计,4G/4G的确可以,但是这个Patch也由于带来的性能问题,才导致被dropped吧。


   

论坛徽章:
17
水瓶座
日期:2013-08-29 12:09:27白羊座
日期:2014-08-07 12:36:42丑牛
日期:2014-07-24 12:44:41寅虎
日期:2014-04-16 16:15:33寅虎
日期:2014-03-12 09:28:43摩羯座
日期:2014-03-06 13:22:04技术图书徽章
日期:2014-03-06 11:34:50天蝎座
日期:2014-01-09 11:31:44寅虎
日期:2013-12-27 17:01:44双子座
日期:2013-12-27 12:32:29双子座
日期:2013-12-25 09:03:33丑牛
日期:2013-12-24 16:18:44
发表于 2014-07-01 14:18 |显示全部楼层
本帖最后由 asuka2001 于 2014-07-01 14:22 编辑

回复 1# gaojl0728

4. 还是关于栈, linux 进程的主线程栈能够按需自动增长,却不能自动递减, 造成的问题是一旦在栈上分配了大内存, 这块内存在进程退出之前实际上是不释放的。


个人认为:

A  进程的栈使用量怎么追踪?增大还好说,可以依靠 page fault,但是缩小呢?

B  进程栈的 use pattern内核如何猜测?如果出现刚回收,进程栈扩大,又 page fault那就坑了。。。


我觉得与其花费如此复杂的逻辑去递减进程栈,也许 ulimit加用户进程自己不要过度使用栈空间是更好的解决方案!

论坛徽章:
0
发表于 2014-07-01 14:25 |显示全部楼层
回复 42# asuka2001


为栈分配的页是属于匿名页,内存紧缺时不会被swap么?   

论坛徽章:
17
水瓶座
日期:2013-08-29 12:09:27白羊座
日期:2014-08-07 12:36:42丑牛
日期:2014-07-24 12:44:41寅虎
日期:2014-04-16 16:15:33寅虎
日期:2014-03-12 09:28:43摩羯座
日期:2014-03-06 13:22:04技术图书徽章
日期:2014-03-06 11:34:50天蝎座
日期:2014-01-09 11:31:44寅虎
日期:2013-12-27 17:01:44双子座
日期:2013-12-27 12:32:29双子座
日期:2013-12-25 09:03:33丑牛
日期:2013-12-24 16:18:44
发表于 2014-07-01 14:32 |显示全部楼层
回复 43# njuzhyf

swap和回收还是有些差异的,毕竟不论是需要占用 swap空间和未再使用的 stack页的无意义的 刷写/回读都肯定不如直接回收了干脆。

但是这个进程栈自动回收的实现实在坑,感觉不划算的样子!

论坛徽章:
17
水瓶座
日期:2013-08-29 12:09:27白羊座
日期:2014-08-07 12:36:42丑牛
日期:2014-07-24 12:44:41寅虎
日期:2014-04-16 16:15:33寅虎
日期:2014-03-12 09:28:43摩羯座
日期:2014-03-06 13:22:04技术图书徽章
日期:2014-03-06 11:34:50天蝎座
日期:2014-01-09 11:31:44寅虎
日期:2013-12-27 17:01:44双子座
日期:2013-12-27 12:32:29双子座
日期:2013-12-25 09:03:33丑牛
日期:2013-12-24 16:18:44
发表于 2014-07-01 14:49 |显示全部楼层
3. linux 进程的主线程栈可以自动增长, 但是pthread线程的栈就不行,


pthread线程的栈大小是固定的,这个是不是因为地址空间布局的原因?

论坛徽章:
3
射手座
日期:2014-08-18 12:15:53戌狗
日期:2014-08-22 09:53:36寅虎
日期:2014-08-22 14:15:29
发表于 2014-07-01 14:58 |显示全部楼层
回复 42# asuka2001


应该是可以做的,可能需要一些改动, 有可能影响效率。
我能想到的方法是, 在mm_struct 记录下栈使用的vm_area_struct* vm_stack, 同时选择几个检查点如系统调用和page_fault的时候, 通过esp获取栈顶指针, 计算vm_stack->vm_end-esp的差值, 如果差值很大, 这说明栈的区域大部分已经不在使用了,如果差值大于某个阈值,就启动shrink_stack回收栈内存,
当然可以改进的细节还很多。

不过大部分情况下栈内存使用量都不会太大, 最坏情况下也只不过浪费了RLIMIT_STACK那么大的栈内存, 这个改动很可能 not worth.


论坛徽章:
17
水瓶座
日期:2013-08-29 12:09:27白羊座
日期:2014-08-07 12:36:42丑牛
日期:2014-07-24 12:44:41寅虎
日期:2014-04-16 16:15:33寅虎
日期:2014-03-12 09:28:43摩羯座
日期:2014-03-06 13:22:04技术图书徽章
日期:2014-03-06 11:34:50天蝎座
日期:2014-01-09 11:31:44寅虎
日期:2013-12-27 17:01:44双子座
日期:2013-12-27 12:32:29双子座
日期:2013-12-25 09:03:33丑牛
日期:2013-12-24 16:18:44
发表于 2014-07-01 15:03 |显示全部楼层
本帖最后由 asuka2001 于 2014-07-01 15:05 编辑

回复 46# gaojl0728

关键在于用户进程的栈使用可不仅仅在调用系统调用或 page fault的时候才达到峰值。。。比如说调用系统调用后使用递归解决问题!

这样的记录无法代表用户进程就只使用了那么多的进程栈!


当然更关键的应该在于:这个功能可能不值得!:)

论坛徽章:
3
射手座
日期:2014-08-18 12:15:53戌狗
日期:2014-08-22 09:53:36寅虎
日期:2014-08-22 14:15:29
发表于 2014-07-01 16:48 |显示全部楼层
回复 45# asuka2001


        布局的原因是很小的一方面, 更大的原因是因为glibc 和 linux的实现不匹配的原因在成的, 根源在于内核和glibc对于MAP_STACK的定义不一致, 这导致了pthread默认的线程栈不会自动增长。

而且pthread的线程栈可以自定义栈, 如果自定义的栈内存是通过malloc分配出来的或者mmap但是没有加MAP_STACK的话,  肯定是不会自动增长的。

论坛徽章:
0
发表于 2014-07-02 01:09 |显示全部楼层
吃内存,图形界面不够友善,一直没深得mm喜爱的UI设计。

论坛徽章:
17
水瓶座
日期:2013-08-29 12:09:27白羊座
日期:2014-08-07 12:36:42丑牛
日期:2014-07-24 12:44:41寅虎
日期:2014-04-16 16:15:33寅虎
日期:2014-03-12 09:28:43摩羯座
日期:2014-03-06 13:22:04技术图书徽章
日期:2014-03-06 11:34:50天蝎座
日期:2014-01-09 11:31:44寅虎
日期:2013-12-27 17:01:44双子座
日期:2013-12-27 12:32:29双子座
日期:2013-12-25 09:03:33丑牛
日期:2013-12-24 16:18:44
发表于 2014-07-02 09:02 |显示全部楼层
回复 49# Hugo801122

说到点子上了,没 MM喜欢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP