Difference between revisions of "Performance tuning"

From OpenVZ Virtuozzo Containers Wiki
Jump to: navigation, search
m (add 'translate' tags)
(Marked this version for translation)
 
Line 1: Line 1:
 
<translate>
 
<translate>
 +
<!--T:1-->
 
This page describes how to improve the performance of an OpenVZ system.
 
This page describes how to improve the performance of an OpenVZ system.
  
== HW node environment tuning ==
+
== HW node environment tuning == <!--T:2-->
  
=== Disable unnecessary services ===
+
=== Disable unnecessary services === <!--T:3-->
  
 +
<!--T:4-->
 
Disable all default services that you do not need to use and then reboot your host.  
 
Disable all default services that you do not need to use and then reboot your host.  
  
 +
<!--T:5-->
 
For example, the <code>audit</code> daemon can significantly decrease performance of linux kernel system calls (up to ~<font color=red>20%</font>) even if you do not use any audit rules, or even if you just stopped this service without host reboot!
 
For example, the <code>audit</code> daemon can significantly decrease performance of linux kernel system calls (up to ~<font color=red>20%</font>) even if you do not use any audit rules, or even if you just stopped this service without host reboot!
  
 +
<!--T:6-->
 
To setup default services, use <code>chkconfig</code> or <code>ntsysv</code> in RedHat, or <code>rc-update</code> in Gentoo, <code>update-rc.d</code> on Debian
 
To setup default services, use <code>chkconfig</code> or <code>ntsysv</code> in RedHat, or <code>rc-update</code> in Gentoo, <code>update-rc.d</code> on Debian
  
=== Shell scripts performance improvement ===
+
=== Shell scripts performance improvement === <!--T:7-->
  
 +
<!--T:8-->
 
To improve performance of small shell scripts, which spends a lot of time starting the shell binary itself (like the shell scripts test from the [http://www.tux.org/pub/tux/niemi/unixbench/ unixbench] package), you can set your <code>LANG</code> environment variable to <code>"C"</code>.
 
To improve performance of small shell scripts, which spends a lot of time starting the shell binary itself (like the shell scripts test from the [http://www.tux.org/pub/tux/niemi/unixbench/ unixbench] package), you can set your <code>LANG</code> environment variable to <code>"C"</code>.
  
 +
<!--T:9-->
 
To see current settings, type  
 
To see current settings, type  
  
   # locale
+
   <!--T:10-->
 +
# locale
  
 +
<!--T:11-->
 
If you want to change it only for the current shell session, do:
 
If you want to change it only for the current shell session, do:
  
  # export LANG=C
+
  <!--T:12-->
 +
# export LANG=C
  
 +
<!--T:13-->
 
If you want to change the default value, modify the <code>/etc/sysconfig/i18n</code> file.
 
If you want to change the default value, modify the <code>/etc/sysconfig/i18n</code> file.
  
 +
<!--T:14-->
 
If your default <code>LANG</code> environment variable was set to something like <code>en_US.UTF-8</code>, you can reduce shell (bash) startup time up to ~<font color=red>15%</font> with <code>LANG=C</code>.   
 
If your default <code>LANG</code> environment variable was set to something like <code>en_US.UTF-8</code>, you can reduce shell (bash) startup time up to ~<font color=red>15%</font> with <code>LANG=C</code>.   
  
== Container tuning ==
+
== Container tuning == <!--T:15-->
  
=== CPU distribution inside container on SMP hosts ===
+
=== CPU distribution inside container on SMP hosts === <!--T:16-->
  
 +
<!--T:17-->
 
If the total number of containers in your host is more than CPUs number, and there are many '''threads''' running inside each container it is better to give just a single VCPU to each container.
 
If the total number of containers in your host is more than CPUs number, and there are many '''threads''' running inside each container it is better to give just a single VCPU to each container.
 
In this case thread memory locality will significantly reduce overhead on SMP memory coherence and overall performance can be increased up to ~<font color=red>50-100%</font>!
 
In this case thread memory locality will significantly reduce overhead on SMP memory coherence and overall performance can be increased up to ~<font color=red>50-100%</font>!
  
 +
<!--T:18-->
 
To set the number of CPUs available inside a container, use:
 
To set the number of CPUs available inside a container, use:
  
  # vzctl set $CTID --cpus N
+
  <!--T:19-->
 +
# vzctl set $CTID --cpus N
  
=== Network checksumming ===
+
=== Network checksumming === <!--T:20-->
  
 +
<!--T:21-->
 
RHEL 5 based kernel supports IP checksum offload.
 
RHEL 5 based kernel supports IP checksum offload.
 
If network ethernet cards in your host support IP checksum offload then you can switch this feature on also for the virtual network devices (venet, veth).
 
If network ethernet cards in your host support IP checksum offload then you can switch this feature on also for the virtual network devices (venet, veth).
  
 +
<!--T:22-->
 
To check current offload setting for the hardware ethernet card (eth0, for instance) type
 
To check current offload setting for the hardware ethernet card (eth0, for instance) type
  
   # ethtool -k eth0
+
   <!--T:23-->
 +
# ethtool -k eth0
 
   
 
   
 
Make sure that tx/rx features are switched on.
 
Make sure that tx/rx features are switched on.
  
 +
<!--T:24-->
 
To see current offload settings for the venet0 device, type
 
To see current offload settings for the venet0 device, type
  
   # ethtool -k venet0
+
   <!--T:25-->
 +
# ethtool -k venet0
  
 +
<!--T:26-->
 
To set offload settings on for the venet0 device, type
 
To set offload settings on for the venet0 device, type
  
   # ethtool -K venet0 tx on sg on
+
   <!--T:27-->
 +
# ethtool -K venet0 tx on sg on
  
 +
<!--T:28-->
 
Note, that 'tx on/off' enables/disables both tx and rx checksumming features for the all venet devices for all containers and HN.
 
Note, that 'tx on/off' enables/disables both tx and rx checksumming features for the all venet devices for all containers and HN.
  
 +
<!--T:29-->
 
The same applies to the veth device except that 'tx on/off' enables/disables tx and rx checksumming features for only given virtual ethernet device in HN and corresponding container.
 
The same applies to the veth device except that 'tx on/off' enables/disables tx and rx checksumming features for only given virtual ethernet device in HN and corresponding container.
  
=== Shell scripts performance improvement ===
+
=== Shell scripts performance improvement === <!--T:30-->
  
 +
<!--T:31-->
 
Please note, that on container creation the default <code>LANG</code> value will be the same as in the HW node. So you can tune it in node (see [[#Shell scripts performance improvement]] above), or set it in container the same way.
 
Please note, that on container creation the default <code>LANG</code> value will be the same as in the HW node. So you can tune it in node (see [[#Shell scripts performance improvement]] above), or set it in container the same way.
  
 +
<!--T:32-->
 
The second important thing is the locale cache. On <code>rpm</code> based distributions, usually it is created by the <code>glibc-common-XXX.rpm</code> post install script and it can be up to 50 MBytes on some distributions. So on some container templates it can be missed to save disk space. But you can always create it inside container later by the following command (you must be the root user):   
 
The second important thing is the locale cache. On <code>rpm</code> based distributions, usually it is created by the <code>glibc-common-XXX.rpm</code> post install script and it can be up to 50 MBytes on some distributions. So on some container templates it can be missed to save disk space. But you can always create it inside container later by the following command (you must be the root user):   
  
  # build-locale-archive
+
  <!--T:33-->
 +
# build-locale-archive
  
 +
<!--T:34-->
 
And again, in some cases shell (bash) startup time can be reduced up to ~<font color=red>15%</font>.
 
And again, in some cases shell (bash) startup time can be reduced up to ~<font color=red>15%</font>.
 
</translate>
 
</translate>

Latest revision as of 08:42, 26 December 2015

<translate> This page describes how to improve the performance of an OpenVZ system.

HW node environment tuning[edit]

Disable unnecessary services[edit]

Disable all default services that you do not need to use and then reboot your host.

For example, the audit daemon can significantly decrease performance of linux kernel system calls (up to ~20%) even if you do not use any audit rules, or even if you just stopped this service without host reboot!

To setup default services, use chkconfig or ntsysv in RedHat, or rc-update in Gentoo, update-rc.d on Debian

Shell scripts performance improvement[edit]

To improve performance of small shell scripts, which spends a lot of time starting the shell binary itself (like the shell scripts test from the unixbench package), you can set your LANG environment variable to "C".

To see current settings, type

  1. locale

If you want to change it only for the current shell session, do:

  1. export LANG=C

If you want to change the default value, modify the /etc/sysconfig/i18n file.

If your default LANG environment variable was set to something like en_US.UTF-8, you can reduce shell (bash) startup time up to ~15% with LANG=C.

Container tuning[edit]

CPU distribution inside container on SMP hosts[edit]

If the total number of containers in your host is more than CPUs number, and there are many threads running inside each container it is better to give just a single VCPU to each container. In this case thread memory locality will significantly reduce overhead on SMP memory coherence and overall performance can be increased up to ~50-100%!

To set the number of CPUs available inside a container, use:

  1. vzctl set $CTID --cpus N

Network checksumming[edit]

RHEL 5 based kernel supports IP checksum offload. If network ethernet cards in your host support IP checksum offload then you can switch this feature on also for the virtual network devices (venet, veth).

To check current offload setting for the hardware ethernet card (eth0, for instance) type

  1. ethtool -k eth0

Make sure that tx/rx features are switched on.

To see current offload settings for the venet0 device, type

  1. ethtool -k venet0

To set offload settings on for the venet0 device, type

  1. ethtool -K venet0 tx on sg on

Note, that 'tx on/off' enables/disables both tx and rx checksumming features for the all venet devices for all containers and HN.

The same applies to the veth device except that 'tx on/off' enables/disables tx and rx checksumming features for only given virtual ethernet device in HN and corresponding container.

Shell scripts performance improvement[edit]

Please note, that on container creation the default LANG value will be the same as in the HW node. So you can tune it in node (see #Shell scripts performance improvement above), or set it in container the same way.

The second important thing is the locale cache. On rpm based distributions, usually it is created by the glibc-common-XXX.rpm post install script and it can be up to 50 MBytes on some distributions. So on some container templates it can be missed to save disk space. But you can always create it inside container later by the following command (you must be the root user):

  1. build-locale-archive

And again, in some cases shell (bash) startup time can be reduced up to ~15%. </translate>