分页: 1 / 1
如何监视swap情况,当特定swap设备发生IO时调用指定程序?
发表于 : 2016-05-01 14:34
由 科学之子
如何监视swap情况,当特定swap设备发生IO时调用指定程序?
有没有类似中断或HOOK之类的方法?
主要是希望当硬盘的swap设备发生IO时调用程序去swapoff 高优先级的zram,借此实现粗糙的LRU
Shell脚本循环好像也能实现,但如果能有类似中断的方法感觉应该会更好
Re: 如何监视swap情况,当特定swap设备发生IO时调用指定程序?
发表于 : 2016-05-01 19:14
由 rosynirvana
先写入磁盘,用zram的意义何在?
swapoff的代价(特别是在有内存压力的时候)有多高?
如果只是想先写入磁盘,为何不调priority?
Re: 如何监视swap情况,当特定swap设备发生IO时调用指定程序?
发表于 : 2016-05-01 21:09
由 科学之子
rosynirvana 写了:先写入磁盘,用zram的意义何在?
swapoff的代价(特别是在有内存压力的时候)有多高?
如果只是想先写入磁盘,为何不调priority?
我的意思是类似HOOK一样,HOOK住硬盘的swap设备,如果它被访问了就说明
内存短缺了zram满了
然后swapoff zram.
关于swapoff的压力,我还没的测试过,不过可以调节每个zram设备的大小,想象中应该不是很有压力,待测哈
而且不一定非要压力很大才swapoff,可以提前进行这一操作
本帖的目的是想HOOK硬盘的swap设备,这样感觉比循环应该更有效率.
本帖想通过"事件"而非"循环"来实现监视目的.
Re: 如何监视swap情况,当特定swap设备发生IO时调用指定程序?
发表于 : 2016-05-01 22:08
由 rosynirvana
我知道你所谓hook是什么,恰当的表达是“向内核注册一个事件,满足后让内核唤醒进程”,最简单的方法是inotify监视一个swap文件;
使用swap设备并不一定说明内存短缺了,和vm.swappiness的设置有关;
把一个zram设备swapoff了,zram中存储的东西必须找个地方存起来,真的觉得这个代价不高?比LRU逆转高多了。
Re: 如何监视swap情况,当特定swap设备发生IO时调用指定程序?
发表于 : 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了?
所以我打算写个小程序把我的想法实现,实测看看效果如何.
Re: 如何监视swap情况,当特定swap设备发生IO时调用指定程序?
发表于 : 2016-05-02 1:24
由 rosynirvana
监视的本质是挂在某些vfs operations上面的,也就是说,可以让一个文件read的时候发送提示,write的时候发送提示,stat的时候发送提示……
所以说可以在write inotify之后stat一下
swapoff是直接读进内存里,内存不够会re-insert swap设备。至于其他swap文件的buffer,swap文件一定有buffer吗……
如果真的感觉不出把一个swap device的东西倒回RAM中,远远比LRU的影响大,建议尝试一点中等规模的项目培养一下感觉