On 4/8/19 4:24 PM, Alexey Kuznetsov wrote: > Hello! > > Does not this mean that now we have a reserve, > which nobody ever uses? >
Don't think so. > I am aware this reserve can be used in theory > from mm itself. Yes, it the whole idea of reserves - to use them only for memory reclaim. > When? Most common case must be kswapd (it has PF_MEMALLOC in task->flags which tells page_alloc ) doing ->writepage(), e.g. see bellow. Also it could be any task in direct reclaim (again PF_MEMALLOC in ->flags) and allocation in ->scan_objects() callback in slab shrinkers. 7fffa98279bd __alloc_pages_nodemask ([kernel.kallsyms]) 7fffa987d077 alloc_pages_current ([kernel.kallsyms]) 7fffa9887d1d new_slab ([kernel.kallsyms]) 7fffa9889ae7 ___slab_alloc ([kernel.kallsyms]) 7fffa9889c70 __slab_alloc ([kernel.kallsyms]) 7fffa988a927 __kmalloc ([kernel.kallsyms]) 7fffc04b4a7d alloc_indirect.isra.11 ([kernel.kallsyms]) 7fffc04b5030 virtqueue_add_sgs ([kernel.kallsyms]) 7fffc051b6e8 __virtblk_add_req ([kernel.kallsyms]) 7fffc051b9ff virtio_queue_rq ([kernel.kallsyms]) 7fffa99d0982 blk_mq_dispatch_rq_list ([kernel.kallsyms]) 7fffa99d59af blk_mq_do_dispatch_sched ([kernel.kallsyms]) 7fffa99d638e blk_mq_sched_dispatch_requests ([kernel.kallsyms]) 7fffa99ce8b0 __blk_mq_run_hw_queue ([kernel.kallsyms]) 7fffa99cea38 __blk_mq_delay_run_hw_queue ([kernel.kallsyms]) 7fffa99ceb41 blk_mq_run_hw_queue ([kernel.kallsyms]) 7fffa99d685e blk_mq_sched_insert_requests ([kernel.kallsyms]) 7fffa99d1989 blk_mq_flush_plug_list ([kernel.kallsyms]) 7fffa99c6a5e blk_flush_plug_list ([kernel.kallsyms]) 7fffa99d1596 blk_mq_make_request ([kernel.kallsyms]) 7fffa99c4ea2 generic_make_request ([kernel.kallsyms]) 7fffa99c5171 submit_bio ([kernel.kallsyms]) 7fffa986d400 __swap_writepage ([kernel.kallsyms]) 7fffa986d5ee swap_writepage ([kernel.kallsyms]) 7fffa98341ae shrink_page_list ([kernel.kallsyms]) 7fffa983511a shrink_inactive_list ([kernel.kallsyms]) 7fffa9835b54 shrink_zone_memcg ([kernel.kallsyms]) 7fffa9836007 shrink_zone ([kernel.kallsyms]) 7fffa98371c0 balance_pgdat ([kernel.kallsyms]) 7fffa98376b4 kswapd ([kernel.kallsyms]) 7fffa972d941 kthread ([kernel.kallsyms]) 7fffa9e132b7 ret_from_fork_nospec_end ([kernel.kallsyms]) Another use-case for reserves is oom-killed tasks which need to allocate some memory to finish process and free it's resources (see TIF_MEMDIE thread flag). > Tracing showed the only > function ever doing ALLOC_NO_WATERMARK used > to be dev_alloc_pages. > I've did a little testing myself and managed to trigger only the trace from above. However there are many different ->writepage() and ->scan_objects() methods, I'm pretty sure that some of them, besides swap_writepage() allocate memory. _______________________________________________ Devel mailing list Devel@openvz.org https://lists.openvz.org/mailman/listinfo/devel