libvirt/src/util/virsystemd.h
Jim Fehlig d5572f62e3 qemu: Add support for overriding max threads per process limit
Some VM configurations may result in a large number of threads created by
the associated qemu process which can exceed the system default limit. The
maximum number of threads allowed per process is controlled by the pids
cgroup controller and is set to 16k when creating VMs with systemd's
machined service. The maximum number of threads per process is recorded
in the pids.max file under the machine's pids controller cgroup hierarchy,
e.g.

$cgrp-mnt/pids/machine.slice/machine-qemu\\x2d1\\x2dtest.scope/pids.max

Maximum threads per process is controlled with the TasksMax property of
the systemd scope for the machine. This patch adds an option to qemu.conf
which can be used to override the maximum number of threads allowed per
qemu process. If the value of option is greater than zero, it will be set
in the TasksMax property of the machine's scope after creating the machine.

Signed-off-by: Jim Fehlig <jfehlig@suse.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
2019-07-24 15:59:49 -06:00

85 lines
2.8 KiB
C

/*
* virsystemd.h: helpers for using systemd APIs
*
* Copyright (C) 2013 Red Hat, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library. If not, see
* <http://www.gnu.org/licenses/>.
*
*/
#pragma once
#include "internal.h"
typedef struct _virSystemdActivation virSystemdActivation;
typedef virSystemdActivation *virSystemdActivationPtr;
/*
* Back compat for systemd < v227 which lacks LISTEN_FDNAMES.
* Delete when min systemd is increased ie RHEL7 dropped
*/
typedef struct _virSystemdActivationMap {
const char *name;
int family;
int port; /* if family == AF_INET/AF_INET6 */
const char *path; /* if family == AF_UNIX */
} virSystemdActivationMap;
char *virSystemdMakeScopeName(const char *name,
const char *drivername,
bool legacy_behaviour);
char *virSystemdMakeSliceName(const char *partition);
int virSystemdCreateMachine(const char *name,
const char *drivername,
const unsigned char *uuid,
const char *rootdir,
pid_t pidleader,
bool iscontainer,
size_t nnicindexes,
int *nicindexes,
const char *partition,
unsigned int maxthreads);
int virSystemdTerminateMachine(const char *name);
void virSystemdNotifyStartup(void);
int virSystemdCanSuspend(bool *result);
int virSystemdCanHibernate(bool *result);
int virSystemdCanHybridSleep(bool *result);
char *virSystemdGetMachineNameByPID(pid_t pid);
int virSystemdGetActivation(virSystemdActivationMap *map,
size_t nmap,
virSystemdActivationPtr *act);
bool virSystemdActivationHasName(virSystemdActivationPtr act,
const char *name);
int virSystemdActivationComplete(virSystemdActivationPtr act);
void virSystemdActivationClaimFDs(virSystemdActivationPtr act,
const char *name,
int **fds,
size_t *nfds);
void virSystemdActivationFree(virSystemdActivationPtr *act);
#define virSystemdActivationAutoPtrFree virSystemdActivationFree