How configuring VirtualBox to use Large Pages is greatly compromised under Linux.

One of the things which Linux users will often do is, to set up a Virtual Machine such as VirtualBox, so that a legitimate, paid-for instance of Windows can run as a Guest System, to our Linux Host System. And, because of the way VMs work, there is some possibility that to get them to use “Large Pages”, which under Linux have simply been named “Huge Pages”, could improve overall performance, mainly because without Huge Page support, the VM needs to allocate Memory Maps, which are subdivided into 512 standard pages, each of which has a standard size of 4KiB. What this means is that in practice, 512 individual memory allocations usually take place, where the caching and remapping requires 2MiB of memory. Such a line of memory can also end up, getting saved to the .VDI File – in the case of VirtualBox, from 512 discontiguous pieces of RAM.

The available sizes of Huge Pages depend on the CPU, and, in the case of the x86 / x86_64 CPUs, they tend to be either 2MiB in size or 1GiB, where 2MiB is already quite ambitious. One way to set this up is being summarized in the following little snip of commands, which need to be given as user:

 


VBoxManage modifyvm "PocketComp_20H2" --nestedpaging on
VBoxManage modifyvm "PocketComp_20H2" --largepages on

 

In my example, I’ve given these commands for the Virtual machine instance named ‘PocketComp_20H2‘, and, if the CPU is actually an Intel with ‘VT-x’ (hardware support for virtualization), large page or huge page -support should be turned on. Yet, like several other people, what I obtained next in the log file for the subsequent session, was the following line of output:

 


00:00:31.962754 PGMR3PhysAllocateLargePage: allocating large pages takes too long (last attempt 2813 ms; nr of timeouts 1); DISABLE

 

There exist users who searched the Internet in vain, for an explanation of why this feature would not work. I want to explain here, what goes wrong with most simple attempts. This is not really an inability of the platform to support the feature, as much as it’s an artifact, of how the practice of Huge Pages under Linux, differs from the theoretical, hypothetical way in which some people might want to use them. What will happen, if Huge Pages are to be allocated after the computer has started fully, is that Linux will be excruciatingly slow in doing so, at the request of the VM, because some RAM would need to be defragmented first.

This is partially due to the fact, that VirtualBox will want to map all the virtual RAM of the Guest System using them, and not, the .VDI File. (:1)  I.e., if the very modest Guest System has 4GiB of (virtual) RAM, it implies that 2048 Huge (2MiB) Pages will be needed, and those will take several minutes to allocate. If that Guest System is supposed to have larger amounts of RAM, the problem just gets worse. If the VM fails to allocate them within about 2 seconds of requesting them, it aborts, and continues with standard pages.

What Linux will offer as an alternative behaviour is, to allocate a fixed number of Virtual Pages on boot-up – when the memory is not yet very fragmented – and then, to allow any applications which ‘know how’, to help themselves to some of those Huge Pages. Thus, if 128 Huge Pages are to be preallocated, then the following snip shows, roughly how to do so, assuming a Debian distro. (:2)  Lines that begin with hash-marks (‘#‘) are commands that would need to be given as root. I estimate this number of Huge Pages to be appropriate for a system with 12GiB of RAM:

 


# groupadd hugetlbfs
# adduser dirk hugetlbfs
# getent group hugetlbfs

hugetlbfs:x:1002:dirk


# cd /etc
# edit text/*:sysctl.conf

vm.nr_hugepages = 128
vm.hugetlb_shm_group = 1002

# edit text/*:fstab

hugetlbfs       /hugepages      hugetlbfs mode=1770,gid=1002        0       0


# ulimit -H -l

(...)


# cd /etc/security
# edit text/*:limits.conf

@hugetlbfs      -       memlock         unlimited



 

The problem here is, that for a Guest System with 4GiB of virtual RAM to launch, 2048 Huge Pages would need to be preallocated, not, 128. To make things worse, Huge Pages cannot be swapped out! They remain locked in RAM. This means that they also get subtracted from the maximum number of KiB that a user is allowed to lock in RAM. In effect, 4GiB of RAM would end up, being tied up, not doing anything useful, until the user actually decides to start his VM (at which point, little additional RAM should be requested by VirtualBox).

Now, there could even exist Linux computers which are set up, on that set of assumptions. Those Linux boxes do not count as standard personal, desktop computers.

If the user wishes to know, how slow Linuxes tend to be, actually allocating some number of Huge Pages, after they have started to run fully, then he or she can just enter the following commands, after configuring the above, but, before rebooting. Normally, a reboot is required after what is shown has been configured, but instead, the following commands could be given in a hurry. My username ‘dirk‘ will still not belong to the group ‘hugetlbfs‘…

 


# sync ; echo 3 > /proc/sys/vm/drop_caches
# sysctl -p

 

I found that, on a computer which had run for days, with RAM that had gotten very fragmented, the second command took roughly 30 seconds to execute. Imagine how long it might take, if 2048 Huge Pages are indeed to be allocated, instead of 128.


 

What some people have researched on the Web – again, to find that nobody seems to have the patience to provide a full answer – is if, as indicated above, the mount-point for the HugeTLBFS is ‘/hugepages‘ – which few applications today would still try to use – whether that mount-point could just be used as a generic Ramdisk. Modern Linux applications simply use “Transparent Huge Pages”, not, access to this mount-point as a Ramdisk. And the real answer to this hypothetical question is No…

(Updated 5/20/2021, 8h20… )

 

Continue reading How configuring VirtualBox to use Large Pages is greatly compromised under Linux.

I now have Linux installed on my Google Pixel C tablet.

As the title of this posting suggests.

I used the Android app “UserLAnd“, which does not require root. The most recent versions of this app offer a VNC Server, which emulates an X-Server within the Linux system. And the implementation of VNC is ‘TightVNC’. Plus, the latest versions of this app offer a built-in VNC Viewer, that I find makes the most, out of the tiny icons that display on the high-res screen, as well as out of the fact that often, users will want to operate the GUI with their fingers, along with the physical keyboard that my Pixel C pairs with (:7) …

Screenshot_20190831-163643

The setup of this Linux Guest System is much easier than my earlier experience was because the basic Linux distribution, the desktop manager, and certain apps can all be installed just by tapping on a few icons. And then, using the ‘sudo apt-get’ command-line, additional Debian packages can be installed.

There is an interesting side effect to this project: When I give the command:

$ cat /etc/debian_version

I obtain the result ‘10.0‘. This would mean that the Linux version which I’m getting, is the new Debian / Buster, which none of my PCs nor my Laptop are even running. However, the repositories that I’m subscribed to are labelled ‘stable’. The CPU is an ‘arm64′. And the desktop manager I chose was ‘LXDE’. I installed a full productivity suite, including LaTeX. But, I found that three Linux applications did not run:

  • LyX – The graphical, WYSIWYM LaTeX Editor (:2).
  • Synaptic – A GUI for apt-get that makes it particularly easy to browse package-repositories, before selecting which packages to install.
  • Latexdraw‘ (:1) (:6).

Everything else I tried seems to work, including “LibreOffice”, “GIMP”, “InkScape”, “Firefox ESR”. On my own, without the aid of simple GUI-buttons, I was also able to install and run “Texmaker”, “Dia”, “Xfig”, “OpenClipArt”, “Maxima” and “wxMaxima”, the Computer Algebra System and its Graphics Front-End. Getting that last item to work properly actually required that I install the package ‘fonts-jsmath’.

The Linux Guest System is currently taking up 5.37GB of my internal storage, and I finally also found out how to share files between the Guest System and the Host System. Within the Guest System, if on the Host System the root of the user folders is ‘/root/<sdcard>’, then this Host System root is mounted at ‘/host-rootfs/<sdcard>’ (within the Guest System). This means that I can open a path directly to this folder in the file-manager ‘PCManFM’, and bookmark it. (:3)

(Updated 9/07/2019, 17h40 … )

Continue reading I now have Linux installed on my Google Pixel C tablet.

Just revived the computer named ‘Klexel’.

As it stands, I have several computers, all running Linux. And one such computer which I had blogged about before, is named ‘Klexel’. This is a 32-bit computer onto which I had installed a trial version of Kanotix, in which that group of programmers was testing something which would later become a de-facto distribution named ‘Steelfire’. By now, ‘Kanotix Steelfire’ is being superseded from Kanotix, by a newer version called ‘Kantoix Silverfire’. Steelfire was based on Debian / Stretch, while Silverfire is based on the newer Debian / Buster. But, I don’t have any Kanotix Silverfire computers installed yet.

Main Kanotix distributions are generally equipped with the latest version of KDE / Plasma as their Desktop Manager, but Kanotix also generally offers one alternative, such as LXDE. My computer named ‘Klexel’ had LXDE on it from the beginning.

There was a time when I was not even turning that computer on. But now I have done so again, and installed many software updates.

Screenshot from 2019-08-27 05-37-21

 

Dirk

 

Installing Snap under Debian

The traditional way of installing software under Linux, specifically under Debian, has been, to use a package manager which accesses global repositories of software, and sometimes, to use a graphical front-end to the same package manager.

Thus, under Debian the package-manager command-line to install <somepackage> would be:

apt-get install <somepackage>

But, if we have “Synaptic” installed, that is a graphical front-end for the same set of commands, that I’ve come to like and trust. If we do not have Synaptic installed but wish to, then the way to install it from the command-line would be:

apt-get install synaptic

But what has happened in the Linux world is that this method of installing packages has become ‘boring’. There exists software which is not listed in the package repositories, and which Synaptic will therefore also not find in response to explicit searches, but which users will want to install, simply due to the evolution of software. One reason for which this software is not listed could be, that it would be tedious for package maintainers to compile, but another could be, the fact that some software is proprietary in nature, or at least partially so, so that to include it in the open-source repositories may in some cases be illegal.

And so, even Linux users will sometimes seek other ways of installing specific software, which they already know exists. And another way to do so has traditionally been, to compile this additional software from source code. But, sometimes the out-of-tree software we wish to install needs to come in the form of binaries. A recent development in this field has been, the emergence of a software-management system called “Snapcraft“. It’s based on the ‘Snappy’ package manager, that was developed by Canonical.

I’m going to assume for the moment that the reader already understands the existence of security implications, in installing binaries from anywhere except the package manager, together with the official repositories, even when those binaries are to be sandboxed. And I’m not going to explain those in this posting.

One reason for which Snappy exists, is the fact that some of the more-traditional installation scripts, for out-of-tree binaries, needed to make arbitrary assumptions about the organization of the Linux computer, and there are many different versions of Linux, which eventually lead to incompatibilities with the binary software. Their developers have had to make assumptions about how the customer’s computer was configured, and those assumptions will eventually be wrong for some versions of Linux. Snappy can circumvent this limitation, or so its developers claim. Whether it truly can or not remains to be seen, as Snappy is still in its infancy as I’m writing this. It could be that I just jumped in with a fashion trend, which may turn out just to have been a fad, as seen several years or decades in the future.

But this posting will continue on the assumption that the reader has a Debian Linux computer, but that he wishes to install Snappy anyway. Snappy was designed more with Ubuntu in mind, but is also available for Debian Linux.

(Updated 6/15/2019, 14h20 … )

Continue reading Installing Snap under Debian