| Line 77: |
Line 77: |
| | === Optimize the pre-dump algorithm === | | === Optimize the pre-dump algorithm === |
| | | | |
| − | '''Summary:''' Optimize the pre-dump algorithm to avoid vmsplice()-ing the whole memory | + | '''Summary:''' Optimize the pre-dump algorithm to avoid pinning to many memory in RAM |
| | | | |
| − | TODO: Detailed description of the project.
| + | Current [[CLI/cmd/pre-dump|pre-dump]] mode suffers from several issues |
| | + | |
| | + | * It keeps all the memory in pipes, and their number can be huge due to limited one pipe size |
| | + | * It keeps all the memory in pipes and this memory is unreclaimable for that period |
| | + | * It [[parasite code|stops and infects]] tasks to drain memory from |
| | + | |
| | + | We can try to use sys_read_process_vm() syscall to mitigate all of the above. Benefits: |
| | + | |
| | + | * No pipes, just copy data into temp buffer and send |
| | + | * Memory is always reclaimable |
| | + | * No infection is needed, just freeze, reset the tracker and proceed |
| | + | |
| | + | Ideally there should be sys_splice_process_vm() syscall in the kernel, that does the same as |
| | + | the read_process_vm does, but vmsplices the data |
| | | | |
| | '''Links:''' | | '''Links:''' |
| | * https://github.com/checkpoint-restore/criu/issues/351 | | * https://github.com/checkpoint-restore/criu/issues/351 |
| − | * Wiki links to relevant material | + | * [[Memory dumping and restoring]], [[Memory changes tracking]] |
| − | * External links to mailing lists or web sites | + | * [http://man7.org/linux/man-pages/man2/process_vm_readv.2.html process_vm_readv(2)] [http://man7.org/linux/man-pages/man2/vmsplice.2.html vmsplice(2)] [https://lkml.org/lkml/2017/11/22/527 RFC for splice_process_vm syscall] |
| | | | |
| | '''Details:''' | | '''Details:''' |
| − | * Skill level: beginner or intermediate or advanced | + | * Skill level: intermediate |
| | * Language: C | | * Language: C |
| | * Mentor: Pavel Emelianov <xemul@virtuozzo.com> | | * Mentor: Pavel Emelianov <xemul@virtuozzo.com> |
| | * Suggested by: Pavel Emelianov <xemul@virtuozzo.com> | | * Suggested by: Pavel Emelianov <xemul@virtuozzo.com> |
| − |
| |
| | | | |
| | === Anonymize image files === | | === Anonymize image files === |