mirror of
https://github.com/apache/cloudstack.git
synced 2025-10-26 08:42:29 +01:00
Add script to ensure cgroups are not co-mounted in rhel7/lxc. If required, script will unmount co-mounted cgroups and remount them seperately
This commit is contained in:
parent
f3b5a6ebc7
commit
4f3de024de
@ -309,6 +309,7 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv
|
|||||||
private String _ovsPvlanVmPath;
|
private String _ovsPvlanVmPath;
|
||||||
private String _routerProxyPath;
|
private String _routerProxyPath;
|
||||||
private String _ovsTunnelPath;
|
private String _ovsTunnelPath;
|
||||||
|
private String _setupCgroupPath;
|
||||||
private String _host;
|
private String _host;
|
||||||
private String _dcId;
|
private String _dcId;
|
||||||
private String _pod;
|
private String _pod;
|
||||||
@ -706,6 +707,17 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv
|
|||||||
_hypervisorType = HypervisorType.KVM;
|
_hypervisorType = HypervisorType.KVM;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Verify that cpu,cpuacct cgroups are not co-mounted
|
||||||
|
if(HypervisorType.LXC.equals(getHypervisorType())){
|
||||||
|
_setupCgroupPath = Script.findScript(kvmScriptsDir, "setup-cgroups.sh");
|
||||||
|
if (_setupCgroupPath == null) {
|
||||||
|
throw new ConfigurationException("Unable to find the setup-cgroups.sh");
|
||||||
|
}
|
||||||
|
if(!checkCgroups()){
|
||||||
|
throw new ConfigurationException("cpu,cpuacct cgroups are co-mounted");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
_hypervisorURI = (String)params.get("hypervisor.uri");
|
_hypervisorURI = (String)params.get("hypervisor.uri");
|
||||||
if (_hypervisorURI == null) {
|
if (_hypervisorURI == null) {
|
||||||
_hypervisorURI = LibvirtConnection.getHypervisorURI(_hypervisorType.toString());
|
_hypervisorURI = LibvirtConnection.getHypervisorURI(_hypervisorType.toString());
|
||||||
@ -5218,4 +5230,15 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv
|
|||||||
return _hypervisorType;
|
return _hypervisorType;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private boolean checkCgroups(){
|
||||||
|
final Script command = new Script(_setupCgroupPath, 5 * 1000, s_logger);
|
||||||
|
String result;
|
||||||
|
result = command.execute();
|
||||||
|
if (result != null) {
|
||||||
|
s_logger.debug("cgroup check failed:" + result);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
56
scripts/vm/hypervisor/kvm/setup-cgroups.sh
Executable file
56
scripts/vm/hypervisor/kvm/setup-cgroups.sh
Executable file
@ -0,0 +1,56 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
# or more contributor license agreements. See the NOTICE file
|
||||||
|
# distributed with this work for additional information
|
||||||
|
# regarding copyright ownership. The ASF licenses this file
|
||||||
|
# to you under the Apache License, Version 2.0 (the
|
||||||
|
# "License"); you may not use this file except in compliance
|
||||||
|
# with the License. You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing,
|
||||||
|
# software distributed under the License is distributed on an
|
||||||
|
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
# KIND, either express or implied. See the License for the
|
||||||
|
# specific language governing permissions and limitations
|
||||||
|
# under the License.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Script to fix cgroups co-mounted issue
|
||||||
|
# Applies to RHEL7 versions only
|
||||||
|
# Detect if cpu,cpuacct cgroups are co-mounted
|
||||||
|
# If co-mounted, unmount and mount them seperately
|
||||||
|
|
||||||
|
#set -x
|
||||||
|
|
||||||
|
#Check distribution version for RHEL
|
||||||
|
if [ -f '/etc/redhat-release' ];
|
||||||
|
then
|
||||||
|
#Check RHEL version for 7
|
||||||
|
if grep 'Red Hat Enterprise Linux Server release 7' /etc/redhat-release > /dev/null
|
||||||
|
then
|
||||||
|
# Check if cgroups if co-mounted
|
||||||
|
if [ -d '/sys/fs/cgroup/cpu,cpuacct' ];
|
||||||
|
then
|
||||||
|
# cgroups co-mounted. Requires remount
|
||||||
|
umount /sys/fs/cgroup/cpu,cpuacct
|
||||||
|
rm /sys/fs/cgroup/cpu
|
||||||
|
rm /sys/fs/cgroup/cpuacct
|
||||||
|
rm -rf /sys/fs/cgroup/cpu,cpuacct
|
||||||
|
mkdir -p /sys/fs/cgroup/cpu
|
||||||
|
mkdir -p /sys/fs/cgroup/cpuacct
|
||||||
|
mount -t cgroup -o cpu cpu "/sys/fs/cgroup/cpu"
|
||||||
|
mount -t cgroup -o cpuacct cpuacct "/sys/fs/cgroup/cpuacct"
|
||||||
|
# Verify that cgroups are not co-mounted
|
||||||
|
if [ -d '/sys/fs/cgroup/cpu,cpuacct' ];
|
||||||
|
then
|
||||||
|
echo "cgroups still co-mounted"
|
||||||
|
exit 1;
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
exit 0
|
||||||
Loading…
x
Reference in New Issue
Block a user