{"id":32185,"date":"2024-10-15T11:02:23","date_gmt":"2024-10-15T08:02:23","guid":{"rendered":"https:\/\/trueconf.com/blog\/?p=32185"},"modified":"2026-02-18T12:29:28","modified_gmt":"2026-02-18T09:29:28","slug":"optimal-hypervisor-configuration-for-deploying-trueconf-solutions","status":"publish","type":"post","link":"https:\/\/trueconf.com/blog\/knowledge-base\/optimal-hypervisor-configuration-for-deploying-trueconf-solutions","title":{"rendered":"Optimal hypervisor configuration for deploying TrueConf solutions"},"content":{"rendered":"<p>This article will show how the settings of dedicated virtualization resources affect the performance of a video conferencing server. We will also offer recommendations for the optimal hypervisor configurations to be used with TrueConf Server.<\/p>\n<p><!--more--><\/p>\n<h2>Dedicated virtualization resources<\/h2>\n<p><b>Dedicated resources<\/b> are the resources of the host machine (or cluster) that are not redistributed between processes. The positive side of this approach is the stability of processes created by the solutions deployed on the host since all processes are executed to the end. However, if you do not configure the use of dedicated resources properly, the execution of these processes may be unstable.<\/p>\n<p>Dedicated resources are all the resources that a host can allocate to the execution of processes created by the solutions deployed on this machine. They include:<\/p>\n<ul>\n<li>Virtual CPU threads (vCPU);<\/li>\n<li>Virtual RAM (vRAM);<\/li>\n<li>Virtual hard drives.<\/li>\n<\/ul>\n<p>In summary, dedicated resource mode is a hypervisor configuration where the total amount of virtual resources does not exceed the amount of physical resources.<\/p>\n<h2>Parameters affecting the use of host machine hardware resources<\/h2>\n<p><b>vCPU overcommitment<\/b> is a parameter that allows allocating more vCPUs to virtual machines than the number of cores (pCPUs) available on a physical server. The overcommitment coefficient is the ratio of the total number of virtual threads (vCPUs) to the number of the physical threads available on the cluster. To calculate this ratio, divide the number of allocated virtual threads by the number of cluster threads (vCPU\/pCPU). This solution is applicable if virtual machines do not use 100% of their resources most of the time which ensures that the server load is not critical.<\/p>\n<div class=\"marked_note marked_note\">\nTo maximize cluster performance, <b>we do not recommend using vCPU overcommitment<\/b> relative to logical CPUs (threads) when deploying TrueConf Server. In other words, if you are using a CPU with activated multi-threading, the ratio should equal 1. If Hyper-Threading \/ SMT is used, the ratio should equal 2 (the number of vCPUs is equal to the number of threads). This will improve the quality and stability of video conferencing.\n<\/div>\n<p>To get a better idea of how this parameter works, let us consider the case when each user in a company works on a virtual machine. There is a group of users characterized by low use of virtual machine resources; they almost never use their virtual machines at full capacity. In this case the overcommitment ratio can be greater than 1 (if multithreading is not used on the CPU) or greater than 2 (when Hyper-Threading \/ SMT is used). You can find the optimal value by testing.<\/p>\n<p>Now let us consider the opposite situation when a group of people uses 100% of available resources for a rather long time. In this case one has to set the overcommitment ratio to 1 to ensure the stability of both the virtual machines and the cluster as a whole.<\/p>\n<p><b>Live migration<\/b> is a mechanism for moving a virtual machine from one physical server to another. During this process, the virtual machine, which is being migrated, does not interrupt its operations and the state of this machine is fully preserved. After migration the virtual machine continues its operation as if nothing had happened.<\/p>\n<p>If you use TrueConf Server, live migration should be disabled due to the likelihood of failure when transferring resources from one physical server to another. <\/p>\n<p><b>Background process schedule<\/b> is a parameter for controlling the execution of all background processes: frequency and repetition of execution, trigger conditions, and actions executed upon triggering.<\/p>\n<p>In this article, we recommend using a dedicated virtual machine for TrueConf Server to maximize its stability. With this approach, there is no need for additional cluster configuration to optimize process performance. Besides, this method ensures the best performance and stability of the virtual machine where TrueConf Server is installed.<\/p>\n<p><b>MTU (Maximum Translation Unit)<\/b> is the maximum size of the data packet being transmitted. An MTU value of 1500 bytes is optimal in most cases because it ensures that the delivery time of each data block is not critical while maintaining a high data transfer rate through the network interface. Proper configuration of this parameter helps minimize data packet loss during video conferencing.<\/p>\n<p>In some cases, it may be necessary to set a specific MTU value, for example, according to the settings of your network equipment. So, we cannot recommend a value that will fit all possible cases. For more details, refer to the guide for your equipment.<\/p>\n<p><b>Traffic marking<\/b> is a parameter that allows tracking incoming and outgoing traffic which increases network security. Unwanted traffic is discarded or limited according to certain rules. This method enables traffic optimization by setting priorities. For example, video conferencing or IP telephony requires higher service speeds compared to sending emails or browsing web pages.<\/p>\n<p>All the parameters discussed above have an effect on video conferencing: video and sound quality, frame rate, etc. We will discuss their configuration to optimize TrueConf Server performance on popular hypervisors.<\/p>\n<h2>Configuration of resources on popular hypervisors<\/h2>\n<h3>vCPU overcommitment<\/h3>\n<h4>KVM<\/h4>\n<p>In the <a href=\"https:\/\/trueconf.ru\/blog\/baza-znaniy\/nastroyka-gipervizora-kvm-na-ubuntu-server.html\" target=\"_blank\" rel=\"noopener\">KVM hypervisor<\/a> vCPU overcommitment operates automatically. If the total number of vCPUs for all virtual machines exceeds the total number of host machine threads, a warning about overcommitment and potential performance degradation will be displayed. So, vCPU overcommitment can be prevented only by manually controlling the distribution of virtual threads. Here, one has to ensure that the overcommitment ratio does not exceed 1.<\/p>\n<p>When you create a new virtual machine or configure an existing one, the number of virtual threads may accidentally exceed the number of physical ones. So, one has to be careful when setting up virtual machines to avoid failures.<\/p>\n<p>To create a virtual machine, use the <code>virt-install<\/code> command with a set of parameters that may vary depending on each case. Here is an example of a simple command to create a virtual machine:<\/p>\n<pre class=\"lang:default decode:true \" >\r\nvirt-install --name=vm1 --memory 2048 --vcpus=12 --cdrom=\/media\/admin\/Files\/downloads\/debian-12.5.0-amd64-DVD-1.iso --disk\/media\/admin\/Files\/vdiskpool1\/vm1vdisk.qcow2 --os-variant=debian12 --debug\r\n<\/pre>\n<p>We will discuss the <code>--vcpus<\/code> parameter. If the value exceeds the number of host threads, a warning is displayed in the terminal:<\/p>\n<pre class=\"lang:default decode:true \" >\r\n[Tue, Jul 02 2024 12:53:57 virt-install 80478] DEBUG (osdict:216) No recommended value found for key='n-cpus', using minimum=1 * 2\r\n<\/pre>\n<p>To change the parameters of the virtual machines that have already been created, edit their configuration file stored in the directory <code>\/etc\/libvirt\/qemu\/<\/code>. To open the file, execute the following command:<\/p>\n<pre class=\"lang:default decode:true \" >\r\nsudo nano [vmname].xml\r\n<\/pre>\n<p>where<br \/>\n<code>[vmname]<\/code> \u2014 the name of the virtual machine.<\/p>\n<p>Find the following line in the file:<\/p>\n<p><code>&lt;vcpu placement='static'&gt;N&lt;\/vcpu&gt;<\/code><\/p>\n<p>where<br \/>\n<code>N<\/code> \u2014 the number of virtual threads.<\/p>\n<p>Change the value of <code>N<\/code> and save the file. This is how a part of the configuration file looks like:<\/p>\n<pre class=\"lang:default decode:true \" >\r\n<domain type='kvm'>\r\n  <name>vm1<\/name>\r\n<uuid>bb122f07-a85b-44f0-af2c-ecf4a3e5f5f2<\/uuid>\r\n  <metadata>\r\n\t<libosinfo:libosinfo xmlns:libosinfo=\"http:\/\/libosinfo.org\/xmlns\/libvirt\/domain\/1.0\">\r\n  \t<libosinfo:os id=\"http:\/\/debian.org\/debian\/12\"\/>\r\n\t<\/libosinfo:libosinfo>\r\n  <\/metadata>\r\n  <memory unit='KiB'>2097152<\/memory>\r\n  <currentMemory unit='KiB'>2097152<\/currentMemory>\r\n  <vcpu placement='static'>12<\/vcpu>\r\n  <os>\r\n\t<type arch='x86_64' machine='pc-q35-6.2'>hvm<\/type>\r\n\t<boot dev='hd'\/>\r\n  <\/os>\r\n<\/pre>\n<div class=\"marked_note marked_note\">\nPlease note that no warnings will be displayed if you change the parameters of the virtual machine that has already been configured.\n<\/div>\n<h4>Xen<\/h4>\n<p>In the case of the Xen hypervisor, vCPU overcommitment is disabled by default due to activated protection. If you try to start a virtual machine with vCPU overcommitment while protection is still on, the machine simply will not start, and a pop-up window with an error message will be displayed (if Xen is used with a GUI):<\/p>\n<pre class=\"lang:default decode:true \" >\r\nHOST_NOT_ENOUGH_PCPUS - 15 - 8\r\n<\/pre>\n<p>or an error message will be displayed in the terminal (if Xen is used without a GUI):<\/p>\n<pre class=\"lang:default decode:true \" >\r\nCannot start here [Not enough CPUs (VM needs 12, but host has 4)]\r\n<\/pre>\n<p>If protection against vCPU overcommitment is disabled, this feature works similarly to the KVM hypervisor: if the total number of vCPUs exceeds the total number of pCPUs on the host machine (cluster), a warning about overcommitment and possible performance degradation will be displayed.<\/p>\n<h4>VMware ESXi<\/h4>\n<p>By default, vCPU overcommitment is disabled, but you may need to check the overcommitment settings of the clusters that are already running. To do it, you need to enable VMware Distributed Resource Scheduler (DRS):<\/p>\n<ol>\n<li>Open a web browser and log in to VMware vSphere Client.<\/li>\n<li>Click on <strong>Hosts and Clusters<\/strong> in the navigation panel to open the list of clusters and hosts.<\/li>\n<li>Right-click on the name of the cluster, and select <strong>Settings<\/strong> in the context menu.<\/li>\n<li>In the panel that opens at the top, go to the <strong>Configure<\/strong> tab, and navigate to <strong>Service \u2192 vSphere DRS<\/strong>.<\/li>\n<li>Click <strong>EDIT<\/strong> at the end of the line <strong>vSphere DRS is Turned OFF<\/strong>.<\/li>\n<li>Toggle the <strong>vSphere DRS<\/strong> switch in the <strong>Edit Cluster Settings<\/strong> pop-up.<\/li>\n<\/ol>\n<p>Without leaving the <strong>Edit Cluster Settings<\/strong> window, go to the <strong>Additional Options<\/strong> tab and activate the <strong>Enabled<\/strong> parameter in the <strong>CPU Over-Commitment<\/strong> section. To disable overcommitment, set the <strong>Over-commitment ratio<\/strong> to 1. <\/p>\n<h4>VirtualBox<\/h4>\n<p>In the VirtualBox hypervisor, everything is similar to KVM: vCPU overcommitment works automatically. If the number of vCPUs across all virtual machines exceeds the number of physical threads in the cluster, a warning about overcommitment and potential performance degradation will be displayed. vCPU adjustment is done manually.<\/p>\n<h4>Hyper-V<\/h4>\n<p>The interface of the Microsoft Hyper-V hypervisor has a separate tab for configuring vCPU and vRAM.<\/p>\n<p>To disable overcommitment, go to the virtual machine settings. In the <strong>Hardware<\/strong> tab, double-click on the <strong>Processor<\/strong> option (or click the <strong>+<\/strong> button next to the <strong>Processor<\/strong> option), navigate to the <strong>NUMA<\/strong> section, and click the <strong>Use hardware topology<\/strong> button. The parameters for the maximum allocation of vCPUs and vRAM will take the value of the cluster and cannot exceed it.<\/p>\n<h3>MTU<\/h3>\n<h4>Windows<\/h4>\n<p>To configure the MTU parameter on Windows, you need to execute several commands. First, you should check the current value by running the command:<\/p>\n<pre class=\"lang:default decode:true \" >\r\nnetsh interface ipv4 show subinterfaces\r\n<\/pre>\n<p>Next, change the value according to your needs by executing the following command:<\/p>\n<pre class=\"lang:default decode:true \" >\r\nnetsh interface ipv4 set subinterface [network interface] mtu=[value] store=persistent\r\n<\/pre>\n<p>where:<\/p>\n<ul>\n<li><code>[network interface]<\/code> \u2014 the name of the network interface;<\/li>\n<li><code>[value]<\/code> \u2014 the MTU value in bytes.<\/li>\n<\/ul>\n<p>Here is an example of the command that changes the MTU value to 1350 bytes:<\/p>\n<pre class=\"lang:default decode:true \" >\r\nnetsh interface ipv4 set subinterface Ethernet mtu=1350 store=persistent\r\n<\/pre>\n<h4>Linux<\/h4>\n<p>To change the MTU parameter, you need to edit the file <b>dhclient.conf<\/b> in the directory <b>\/etc\/dhcp\/<\/b>. To edit this file, use the following command:<\/p>\n<pre class=\"lang:default decode:true \" >\r\nsudo nano \/etc\/dhcp\/dhclient.conf\r\n<\/pre>\n<p>Now, you need to add the following text right after the line <code>send host-name = gethostname ();<\/code><\/p>\n<pre class=\"lang:default decode:true \" >\r\ndefault interface-mtu [value];\r\nsupersede interface-mtu [value];\r\n<\/pre>\n<p>where:<\/p>\n<p><code>[value]<\/code> \u2014 the value of the MTU parameter in bytes.<\/p>\n<p>These changes will affect all system network interfaces, but if you need to change the MTU value only for some network interfaces, add the following text:<\/p>\n<pre class=\"lang:default decode:true \" >\r\ninterface \"[network interface]\" {\r\ndefault interface-mtu [value];\r\nsupersede interface-mtu [value];\r\n}\r\n<\/pre>\n<p>where:<\/p>\n<ul>\n<li><code>[network interface]<\/code> \u2014 the name of the network interface;<\/li>\n<li><code>[value]<\/code> \u2014 the MTU value in bytes.<\/li>\n<\/ul>\n<p>The following is the example of a text for changing the MTU value to 1350 bytes for the <strong>enp1s0<\/strong> interface:<\/p>\n<pre class=\"lang:default decode:true \" >\r\ninterface \"enp1s0\" {\r\ndefault interface-mtu 1350;\r\nsupersede interface-mtu 1350;\r\n}\r\n<\/pre>\n<p>After making changes, save and close the file. To apply the values, restart the network service with the command:<\/p>\n<pre class=\"lang:default decode:true \" >\r\nsudo service networking restart\r\n<\/pre>\n<p>Run this command to check your changes:<\/p>\n<pre class=\"lang:default decode:true \" >\r\nip a | grep mtu\r\n<\/pre>\n<p>One should also consider the case when the network is configured with <b>netplan<\/b>. To change the parameter, you need to edit the <b>.yaml<\/b> configuration file in the <code>\/etc\/netplan\/<\/code> directory. There may be multiple configuration files, but by default, there is only one file named <b>01-network-manager-all.yaml<\/b>. You can create your own .yaml file with a new name and network settings. Example of the source file:<\/p>\n<pre class=\"lang:default decode:true \" >\r\nnetwork:\r\n  version: 2\r\n  renderer: NetworkManager\r\n  ethernets:\r\n    enp1s0:\r\n      dhcp4: true\r\n      dhcp6: true\r\n  bridges:\r\n    br0:\r\n      interfaces: [enp1s0]\r\n      dhcp4: true\r\n      dhcp6: true\r\n<\/pre>\n<p>In this case, we will change the MTU parameter of the <code>enp1s0<\/code> network interface. To do it, just add the following text under the interface name:<\/p>\n<pre class=\"lang:default decode:true \" >\r\nmtu: 1350\r\n<\/pre>\n<p>In this case, the MTU parameter of the <code>enp1s0<\/code>  interface will be changed to <code>1350<\/code>. The final text of the configuration file is as follows:<\/p>\n<pre class=\"lang:default decode:true \" >\r\nnetwork:\r\n  version: 2\r\n  renderer: NetworkManager\r\n  ethernets:\r\n    enp1s0:\r\n      mtu: 1350\r\n      dhcp4: true\r\n      dhcp6: true\r\n  bridges:\r\n    br0:\r\n    interfaces: [enp1s0]\r\n      dhcp4: true\r\n      dhcp6: true\r\n<\/pre>\n<p>To apply changes, run these commands:<\/p>\n<pre class=\"lang:default decode:true \" >\r\nsudo netplan apply\r\nsudo systemctl restart networking\r\n<\/pre>\n<p>To verify the changes, execute:<\/p>\n<pre class=\"lang:default decode:true \" >\r\nip a | grep mtu\r\n<\/pre>\n<h3>Traffic marking<\/h3>\n<h4>Windows<\/h4>\n<p>Traffic marking on Windows is controlled with the &#8220;QoS Packet Scheduler&#8221; component. To mark packets, enable the packet scheduler and set the marking rules.<\/p>\n<ol>\n<li>Check if <b>QoS Packet Scheduler<\/b> is enabled in the network interface properties.<\/li>\n<li>If it is not enabled, you need to create a new branch <b>HKLM\\SYSTEM\\CurrentControlSet\\services\\Tcpip\\QoS<\/b> in the Windows registry with the string parameter <b>Do not use NLA<\/b> set to <b>1<\/b>.<\/li>\n<\/ol>\n<p>Traffic prioritization is configured in TrueConf Server for Windows by default. Just enable the packet scheduler as described above. You can find more details on configuring QoS for Windows in <a href=\"https:\/\/trueconf.com\/blog\/knowledge-base\/how-to-improve-trueconf-communication-quality-using-qos\" target=\"_blank\" rel=\"noopener\">our article<\/a>. <\/p>\n<h4>Linux<\/h4>\n<p>On Linux, traffic marking for TrueConf Server is done by changing the following parameters:<\/p>\n<ol>\n<li><b>QoS TC Stream Value<\/b> \u2014 media traffic;<\/li>\n<li><b>QoS TC Transport Value<\/b> \u2014 signaling traffic.<\/li>\n<\/ol>\n<p>You need to change these parameters in the server configuration with the <b>tc_regkey<\/b> tool.<\/p>\n<p>First, run the following command to check if any changes in traffic marking have already been made in the configuration:<\/p>\n<pre class=\"lang:default decode:true \" >\r\nsudo \/opt\/trueconf\/server\/bin\/vcs\/tc_regkey export Configuration - | grep \"QoS\"\r\n<\/pre>\n<p>Two possible results may be displayed in the terminal:<\/p>\n<ol>\n<li>Empty, indicating that no changes have been made to the traffic marking configuration.<\/li>\n<li>If any changes have been made to the configuration, the result will be as follows:<br \/>\n<code>,QoS TC Stream Value, i32, 7<\/code><\/li>\n<\/ol>\n<p>where:<\/p>\n<ul>\n<li><code>QoS TC Stream Value<\/code> \u2014 parameter name;<\/li>\n<li><code>i32<\/code> \u2014 data type;<\/li>\n<li><code>7<\/code> \u2014 current value.<\/li>\n<\/ul>\n<p>Before making changes, stop the server service with the command:<\/p>\n<pre class=\"lang:default decode:true \" >\r\nsudo systemctl stop trueconf\r\n<\/pre>\n<p>For example, by default, TrueConf Server uses the value 40 for marking media traffic. To set a different value, run the command:<\/p>\n<pre class=\"lang:default decode:true \" >\r\nsudo \/opt\/trueconf\/server\/bin\/vcs\/tc_regkey set Configuration \"QoS TC Stream Value\" i32 50\r\n<\/pre>\n<p>where:<\/p>\n<ul>\n<li><code>QoS TC Stream Value<\/code> \u2014 the name of the parameter, in this case, it is media traffic;<\/li>\n<li><code>i32<\/code> \u2014 data type;<\/li>\n<li><code>50<\/code> \u2014 new value of traffic priority.<\/li>\n<ul>\n<p>If you need to configure the parameter responsible for marking signaling traffic, the steps are similar; just replace <code>QoS TC Stream Value<\/code> with <code>QoS TC Transport Value<\/code>.<\/p>\n<p>After making changes, restart the service with the command:<\/p>\n<pre class=\"lang:default decode:true \" >\r\nsudo systemctl start trueconf\r\n<\/pre>\n<p>Run this command to check your changes: <\/p>\n<pre class=\"lang:default decode:true \" >\r\nsudo \/opt\/trueconf\/server\/bin\/vcs\/tc_regkey export Configuration - | grep \"QoS\"\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>This article will show how the settings of dedicated virtualization resources affect the performance of a video conferencing server. We will also offer recommendations for the optimal hypervisor configurations to be used with TrueConf Server.<\/p>\n","protected":false},"author":73,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"inline_featured_image":false,"footnotes":""},"categories":[260],"tags":[191],"class_list":["post-32185","post","type-post","status-publish","format-standard","hentry","category-knowledge-base","tag-deployment","wpautop"],"_links":{"self":[{"href":"https:\/\/trueconf.com/blog\/wp-json\/wp\/v2\/posts\/32185","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/trueconf.com/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/trueconf.com/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/trueconf.com/blog\/wp-json\/wp\/v2\/users\/73"}],"replies":[{"embeddable":true,"href":"https:\/\/trueconf.com/blog\/wp-json\/wp\/v2\/comments?post=32185"}],"version-history":[{"count":8,"href":"https:\/\/trueconf.com/blog\/wp-json\/wp\/v2\/posts\/32185\/revisions"}],"predecessor-version":[{"id":43140,"href":"https:\/\/trueconf.com/blog\/wp-json\/wp\/v2\/posts\/32185\/revisions\/43140"}],"wp:attachment":[{"href":"https:\/\/trueconf.com/blog\/wp-json\/wp\/v2\/media?parent=32185"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/trueconf.com/blog\/wp-json\/wp\/v2\/categories?post=32185"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/trueconf.com/blog\/wp-json\/wp\/v2\/tags?post=32185"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}