免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: humjb_1983
打印 上一主题 下一主题

[网络子系统] skb占用page的释放时机 [复制链接]

论坛徽章:
1
天蝎座
日期:2013-10-23 21:11:03
11 [报告]
发表于 2014-02-27 09:54 |只看该作者
回复 10# humjb_1983


    少量的 skb 可能是 cache 的原因
    可以在工作一段时间后,断网,然后清理一下 cache,看看会不会有清理不掉的

论坛徽章:
15
射手座
日期:2014-02-26 13:45:082015年迎新春徽章
日期:2015-03-04 09:54:452015年辞旧岁徽章
日期:2015-03-03 16:54:15羊年新春福章
日期:2015-02-26 08:47:552015年亚洲杯之卡塔尔
日期:2015-02-03 08:33:45射手座
日期:2014-12-31 08:36:51水瓶座
日期:2014-06-04 08:33:52天蝎座
日期:2014-05-14 14:30:41天秤座
日期:2014-04-21 08:37:08处女座
日期:2014-04-18 16:57:05戌狗
日期:2014-04-04 12:21:33技术图书徽章
日期:2014-03-25 09:00:29
12 [报告]
发表于 2014-02-27 14:00 |只看该作者
你说的cache是,页缓存?这个好像不太可能吧?呵呵

论坛徽章:
7
丑牛
日期:2013-10-18 14:43:21技术图书徽章
日期:2013-11-03 09:58:03辰龙
日期:2014-01-15 22:57:50午马
日期:2014-09-15 07:04:39丑牛
日期:2014-10-16 14:25:222015年亚洲杯之伊朗
日期:2015-03-16 10:24:352015亚冠之城南
日期:2015-05-31 09:52:32
13 [报告]
发表于 2014-02-27 15:05 |只看该作者
关机程序,一般是进程,就协议栈讲,推后的ksoftirqd内核线程的存在就预示着某些skb还存在.
另外就是某些等到调度的含socket的进程.

论坛徽章:
15
射手座
日期:2014-02-26 13:45:082015年迎新春徽章
日期:2015-03-04 09:54:452015年辞旧岁徽章
日期:2015-03-03 16:54:15羊年新春福章
日期:2015-02-26 08:47:552015年亚洲杯之卡塔尔
日期:2015-02-03 08:33:45射手座
日期:2014-12-31 08:36:51水瓶座
日期:2014-06-04 08:33:52天蝎座
日期:2014-05-14 14:30:41天秤座
日期:2014-04-21 08:37:08处女座
日期:2014-04-18 16:57:05戌狗
日期:2014-04-04 12:21:33技术图书徽章
日期:2014-03-25 09:00:29
14 [报告]
发表于 2014-02-27 16:44 |只看该作者
smalloc 发表于 2014-02-27 15:05
关机程序,一般是进程,就协议栈讲,推后的ksoftirqd内核线程的存在就预示着某些skb还存在.
另外就是某些等到 ...

呵呵,感谢,正常关机,是先kill进程的,我检测的时机应该是在所有进程都kill了之后的,按理不应该才对,还需要打点确认,暂时没时间搞。~

论坛徽章:
7
丑牛
日期:2013-10-18 14:43:21技术图书徽章
日期:2013-11-03 09:58:03辰龙
日期:2014-01-15 22:57:50午马
日期:2014-09-15 07:04:39丑牛
日期:2014-10-16 14:25:222015年亚洲杯之伊朗
日期:2015-03-16 10:24:352015亚冠之城南
日期:2015-05-31 09:52:32
15 [报告]
发表于 2014-02-28 09:18 |只看该作者
回复 7# humjb_1983


    "在我们的测试中,发现在关机的时候,有skb未被正确释放的情况"
这个未正确释放的信息是如何得到的?系统提示?自己加测试点打印?
另外正确和不正确的区别是什么?

看了下关机基本上是调用reboot syscall,而这个函数的实现是不负责关闭其他进程的.
所以关闭其他进程的任务是在halt , power off, shutdown , reboot 这些app中完成的.
而这些函数只能通过kill调用关闭其他函数,为了合理完成关闭,一般是发终止信号,而不应该发系统强制终止信号.
其他程序收到终止信号会自己释放相关socket ,从而释放内核态中相关skb.
但其他应用程序也可以屏蔽或修改终止信号处理程序.
如果一律使用强制终止,就会导致应用层逻辑上的失缺或不完善.
另调用reboot的APP不能保证在调用reboot 之前其他程序已经都终止了. 这必然造成某些skb带电消失了.

论坛徽章:
15
射手座
日期:2014-02-26 13:45:082015年迎新春徽章
日期:2015-03-04 09:54:452015年辞旧岁徽章
日期:2015-03-03 16:54:15羊年新春福章
日期:2015-02-26 08:47:552015年亚洲杯之卡塔尔
日期:2015-02-03 08:33:45射手座
日期:2014-12-31 08:36:51水瓶座
日期:2014-06-04 08:33:52天蝎座
日期:2014-05-14 14:30:41天秤座
日期:2014-04-21 08:37:08处女座
日期:2014-04-18 16:57:05戌狗
日期:2014-04-04 12:21:33技术图书徽章
日期:2014-03-25 09:00:29
16 [报告]
发表于 2014-02-28 09:34 |只看该作者
smalloc 发表于 2014-02-28 09:18
回复 7# humjb_1983

情况是这样的,实际在在Xen虚拟化环境中,批量关闭虚拟机时发现的问题,由于虚拟机关闭的时候xen相关进程会
检查sbk及其他内存的回收情况,如果有没有释放的skb,将导致关机流程挂起,实际测试发生了这样的情况。

关虚拟机时,调用的是标准的接口,走的应该是正常shutdown的流程,即会先想所有进程发15信号,n秒后,再向
所有进程发9信号,然后再继续关机。

理论上,即使是通过kill -9关闭进程时,也会走内核的do_exit流程,其中应该会回收进程占用的相关资源,包括socket,
所以,看似应该也会回收skb的。

所以,觉得有点怪异,除非skb在内核中会有什么缓存机制,存在一直不回收的情况~猜的~

论坛徽章:
7
丑牛
日期:2013-10-18 14:43:21技术图书徽章
日期:2013-11-03 09:58:03辰龙
日期:2014-01-15 22:57:50午马
日期:2014-09-15 07:04:39丑牛
日期:2014-10-16 14:25:222015年亚洲杯之伊朗
日期:2015-03-16 10:24:352015亚冠之城南
日期:2015-05-31 09:52:32
17 [报告]
发表于 2014-02-28 10:06 |只看该作者
回复 16# humjb_1983


    发2个信号,红帽的sysVinit版本的shutdown这么做的,ubantu的upstart版本不是这么做的.
  1.         /* First idle init. */
  2.         if (kill(1, SIGTSTP) < 0) {
  3.                 fprintf(stderr, "shutdown: can't idle init: %s.\r\n", strerror(errno));
  4.                 exit(1);
  5.         }

  6.         /* Kill all processes. */
  7.         fprintf(stderr, "shutdown: sending all processes the TERM signal...\r\n");
  8.         kill(-1, SIGTERM);
  9.         sleep(sltime ? atoi(sltime) : 3);
  10.         fprintf(stderr, "shutdown: sending all processes the KILL signal.\r\n");
  11.         (void) kill(-1, SIGKILL);
复制代码

论坛徽章:
15
射手座
日期:2014-02-26 13:45:082015年迎新春徽章
日期:2015-03-04 09:54:452015年辞旧岁徽章
日期:2015-03-03 16:54:15羊年新春福章
日期:2015-02-26 08:47:552015年亚洲杯之卡塔尔
日期:2015-02-03 08:33:45射手座
日期:2014-12-31 08:36:51水瓶座
日期:2014-06-04 08:33:52天蝎座
日期:2014-05-14 14:30:41天秤座
日期:2014-04-21 08:37:08处女座
日期:2014-04-18 16:57:05戌狗
日期:2014-04-04 12:21:33技术图书徽章
日期:2014-03-25 09:00:29
18 [报告]
发表于 2014-02-28 11:14 |只看该作者
呵呵,我们用的是redhat的版本,其他版本确实不清楚,感谢~~

论坛徽章:
7
丑牛
日期:2013-10-18 14:43:21技术图书徽章
日期:2013-11-03 09:58:03辰龙
日期:2014-01-15 22:57:50午马
日期:2014-09-15 07:04:39丑牛
日期:2014-10-16 14:25:222015年亚洲杯之伊朗
日期:2015-03-16 10:24:352015亚冠之城南
日期:2015-05-31 09:52:32
19 [报告]
发表于 2014-02-28 18:31 |只看该作者
本帖最后由 smalloc 于 2014-02-28 18:50 编辑

回复 18# humjb_1983


    跟踪reboot syscall流程,目前还未发现协议栈核心有清空缓存的skb的迹象.这部分在reboot时有保留的可能.
也即 softnet_data *queue这个 per_cpu队列中,因为网络的关闭未发现对这里的skb做清除.事实上只看见有net_dev_init,未见到相反的动作.

论坛徽章:
15
射手座
日期:2014-02-26 13:45:082015年迎新春徽章
日期:2015-03-04 09:54:452015年辞旧岁徽章
日期:2015-03-03 16:54:15羊年新春福章
日期:2015-02-26 08:47:552015年亚洲杯之卡塔尔
日期:2015-02-03 08:33:45射手座
日期:2014-12-31 08:36:51水瓶座
日期:2014-06-04 08:33:52天蝎座
日期:2014-05-14 14:30:41天秤座
日期:2014-04-21 08:37:08处女座
日期:2014-04-18 16:57:05戌狗
日期:2014-04-04 12:21:33技术图书徽章
日期:2014-03-25 09:00:29
20 [报告]
发表于 2014-03-03 09:07 |只看该作者
smalloc 发表于 2014-02-28 18:31
回复 18# humjb_1983

你说的“缓存的skb”,具体缓存在哪里?
进程自身占用的资源,应该在进程退出的时候自己负责回收的吧?不应该由reboot来干吧~,呵呵

谢谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP