如何监视swap情况,当特定swap设备发生IO时调用指定程序?

其它类软件,非上述版软件
回复
科学之子
帖子: 2284
注册时间: 2013-05-26 6:58
系统: Debian 9

如何监视swap情况,当特定swap设备发生IO时调用指定程序?

#1

帖子 科学之子 » 2016-05-01 14:34

如何监视swap情况,当特定swap设备发生IO时调用指定程序?
有没有类似中断或HOOK之类的方法?
主要是希望当硬盘的swap设备发生IO时调用程序去swapoff 高优先级的zram,借此实现粗糙的LRU
Shell脚本循环好像也能实现,但如果能有类似中断的方法感觉应该会更好
rosynirvana
帖子: 893
注册时间: 2011-02-14 17:46

Re: 如何监视swap情况,当特定swap设备发生IO时调用指定程序?

#2

帖子 rosynirvana » 2016-05-01 19:14

先写入磁盘,用zram的意义何在?
swapoff的代价(特别是在有内存压力的时候)有多高?
如果只是想先写入磁盘,为何不调priority?
科学之子
帖子: 2284
注册时间: 2013-05-26 6:58
系统: Debian 9

Re: 如何监视swap情况,当特定swap设备发生IO时调用指定程序?

#3

帖子 科学之子 » 2016-05-01 21:09

rosynirvana 写了:先写入磁盘,用zram的意义何在?
swapoff的代价(特别是在有内存压力的时候)有多高?
如果只是想先写入磁盘,为何不调priority?
我的意思是类似HOOK一样,HOOK住硬盘的swap设备,如果它被访问了就说明内存短缺了zram满了
然后swapoff zram.
关于swapoff的压力,我还没的测试过,不过可以调节每个zram设备的大小,想象中应该不是很有压力,待测哈
而且不一定非要压力很大才swapoff,可以提前进行这一操作

本帖的目的是想HOOK硬盘的swap设备,这样感觉比循环应该更有效率.
本帖想通过"事件"而非"循环"来实现监视目的.
上次由 科学之子 在 2016-05-01 22:36,总共编辑 1 次。
rosynirvana
帖子: 893
注册时间: 2011-02-14 17:46

Re: 如何监视swap情况,当特定swap设备发生IO时调用指定程序?

#4

帖子 rosynirvana » 2016-05-01 22:08

我知道你所谓hook是什么,恰当的表达是“向内核注册一个事件,满足后让内核唤醒进程”,最简单的方法是inotify监视一个swap文件;
使用swap设备并不一定说明内存短缺了,和vm.swappiness的设置有关;
把一个zram设备swapoff了,zram中存储的东西必须找个地方存起来,真的觉得这个代价不高?比LRU逆转高多了。
科学之子
帖子: 2284
注册时间: 2013-05-26 6:58
系统: Debian 9

Re: 如何监视swap情况,当特定swap设备发生IO时调用指定程序?

#5

帖子 科学之子 » 2016-05-01 23:50

rosynirvana 写了:我知道你所谓hook是什么,恰当的表达是“向内核注册一个事件,满足后让内核唤醒进程”,最简单的方法是inotify监视一个swap文件;
使用swap设备并不一定说明内存短缺了,和vm.swappiness的设置有关;
把一个zram设备swapoff了,zram中存储的东西必须找个地方存起来,真的觉得这个代价不高?比LRU逆转高多了。
关于事件,是否有办法监视某个swap设备的可用空间低于多少呢?
打算优先级最低的zram设备空间低于某个数值后就开始swapoff
要是直接监视硬盘上的swap文件的话,硬盘就已经被访问了.

"使用swap设备并不一定说明内存短缺了,和vm.swappiness的设置有关;"
我当时表述有误,意思是硬盘中的swap被使用表明zram满了

"把一个zram设备swapoff了,zram中存储的东西必须找个地方存起来,真的觉得这个代价不高?比LRU逆转高多了。"
swapoff具体如何搬运的我不清楚,是把内存仅用作搬运数据到其它swap文件的buffer?还是能装下的部分不管冷热直接就swap in了?
所以我打算写个小程序把我的想法实现,实测看看效果如何.
rosynirvana
帖子: 893
注册时间: 2011-02-14 17:46

Re: 如何监视swap情况,当特定swap设备发生IO时调用指定程序?

#6

帖子 rosynirvana » 2016-05-02 1:24

监视的本质是挂在某些vfs operations上面的,也就是说,可以让一个文件read的时候发送提示,write的时候发送提示,stat的时候发送提示……
所以说可以在write inotify之后stat一下

swapoff是直接读进内存里,内存不够会re-insert swap设备。至于其他swap文件的buffer,swap文件一定有buffer吗……
如果真的感觉不出把一个swap device的东西倒回RAM中,远远比LRU的影响大,建议尝试一点中等规模的项目培养一下感觉
回复