前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Postgresql中VDF触发LRU淘汰的条件

Postgresql中VDF触发LRU淘汰的条件

作者头像
mingjie
发布2022-05-12 11:02:48
4680
发布2022-05-12 11:02:48
举报
文章被收录于专栏:Postgresql源码分析

lru淘汰触发条件

代码语言:javascript
复制
static void
ReleaseLruFiles(void)
{
	while (nfile + numAllocatedDescs >= max_safe_fds)
	{
		if (!ReleaseLruFile())
			break;
	}
}

也就是说当: (vfd打开的数量nfile) + (其他路径直接调用fd.c接口打开文件数量numAllocatedDescs) 超过max_safe_fds时触发LRU淘汰。

max_safe_fds如何计算?

fd.c

代码语言:javascript
复制
set_max_safe_fds
  count_usable_fds(max_files_per_process, &usable_fds, &already_open);
  max_safe_fds = Min(usable_fds, max_files_per_process - already_open);

计算逻辑在count_usable_fds中:

count_usable_fds中会使用dup复制stdin描述符并存下来,重复这个动作直到EMFILE发生(fd用尽),这时记录:

  • usable_fds:已经复制了多少个文件描述符,也就是打开了多少个fd,也就是整个系统还能打开多少fd
  • already_open:highestfd + 1 - usable_fds,打开的最大的那个fd减去上面申请的fd,也就是整个系统已经打开了多少个fd

最终:

max_safe_inodes = min(当前进程OS限制还能打开多少个max_files_per_process-当前进程已经打开多少个)

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-07-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • lru淘汰触发条件
  • max_safe_fds如何计算?
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档