Linux 缺点的点滴思考,定时更新

cai posted @ 2012年7月13日 00:14 in 思维碎片 with tags Linux 缺点 思考 AIO , 2242 阅读

内核方面的缺点:

  1. 缺乏真正的内核级 AIO 支持。

真正的 AIO 必须满足下面的几个要求

  1. 异步操作和同步操作一样都是可以利用缓存的
  2. 没有在内部使用辅助线程 , io 操作应该直接提交给 io scheduler。
  3. 异步操作不会在内部隐式转化成同步操作。比如需要的内容已经在内存的时候, 一个异步 read 会变成同步 read . 尽管read没有阻塞,但是如果是非常大的 buffer 执行拷贝过程可能超过预期,导致不必要的延迟。
  4. 实现上不能对发起的io个数有限制。可以用 ulimit 限制进程和单个线程能同时发起的io操作个数。
  5. 异步操作要能用在所有的 文件描述符 上。也就是说,所有的 io 操作都可以是异步的。
  6. 如果不使用缓存,异步操作需要利用零拷贝技术。直接拷贝到用户提供的 buffer 上而不先拷贝到内核页面。如果用户 buffer 会发生 pagefaut 则应该立即返回错误而不是阻塞。用户提供的 buffer 必须使用 MAP_POPULATED 参数调用 mmap 分配。
  7. 同步io操作在内核里转化为异步io,或者是在 libc 级别(更好)。

SystemV IPC 糟糕的设计:

  1. 进程退出后消息列队、共享内存、信号量无法被自动清除。需要在程序里显式删除。 出错的程序可能因此耗尽系统资源
  2. 全局命名空间, key_t。

 


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter