--
Best regards
Eli
天涯无处不重逢
a leaf duckweed belongs to the sea, where not to meet in life
Sent with Sparrow (
http://www.sparrowmailapp.com/?sig)
On Sunday, 19 February 2017 at 10:51 PM, Marcelo Tosatti wrote:
Hi Eli Qiao,
Question about removing resctrlfs directories with empty "tasks" file.
/* This domain is not created by libvirt, so we don't care
* about the tasks, add a fake one to prevent
* virResCtrlRefresh
* remove it from sysfs */
virResCtrlAddTask(p, 1);
virResCtrlAppendDomain(p);
/* Refresh all domains', remove the domains which has no task ids.
* This will be used after VM pause, restart, destroy etc.
*/
static int
virResCtrlRefresh(void)
Why are you doing this (removing directories which have no tasks in
them) ? The code should only read information from other
CAT reservations, not write to them.
When a VM get shutdown, their pids will disappear from resctrl’s directory, we
can check pids to see if VM get KIlled or not.
The reason why I would like check if tasks file empty is that: there maybe cases that
libvirtd not tracking VM’s status, and the VM gone, left a empty directory with no tasks
assigned, and cause resource leak.
I think I can refine this later, keep a pointer of ResDomain in VM’s private data and use
that to destroy VM’s resctrl directory.
but this won’t work for exception, still resource leak happened.
This is not for cleanup purposes, since on VM shutdown the resctrlfs
directories are properly removed:
/* Remove the Domain from sysfs, this should only success no pids in
* tasks
* of a partition.
*/
static
int virResCtrlRemoveDomain(const char *name)
{
char *path = NULL;
int rc = 0;
if ((rc = virAsprintf(&path, "%s/%s", RESCTRL_DIR, name)) < 0)
return rc;
rc = rmdir(path);
VIR_FREE(path);
return rc;
}
Should not write to other directories 'tasks' file.
Other Apps can have a lock to resctrl before it write tasks to prevent libvirtd remove
empty task directory.