https://wiki.archlinux.org/api.php?action=feedcontributions&user=Holycow&feedformat=atomArchWiki - User contributions [en]2024-03-29T07:44:40ZUser contributionsMediaWiki 1.41.0https://wiki.archlinux.org/index.php?title=TeamTalk&diff=582493TeamTalk2019-09-16T16:13:21Z<p>Holycow: Remove ambiguous part on facebook login</p>
<hr />
<div>[[Category:Voice over IP]]<br />
From [[Wikipedia:TeamTalk]]:<br />
<br />
:TeamTalk is a conferencing system which people use to communicate on the Internet using VoIP and video streaming.<br />
<br />
== Installation ==<br />
<br />
=== Client ===<br />
<br />
[[Install]] the {{AUR|teamtalk}} package. It is the same package for the server. But the client files will be under the pkgsrc/srcdir/client directory. The client can be invoked by running ./run.sh.<br />
<br />
=== Server ===<br />
<br />
Install the {{AUR|teamtalk}} package.<br />
<br />
== Server configuration and startup ==<br />
<br />
=== Configuration ===<br />
<br />
* Teamtalk comes with a configuration script in the server binary, {{ic|tt5srv}}.<br />
<br />
Just execute {{ic|tt5srv -wizard}} and follow the steps. This makes the file in {{ic|/etc/teamspeak/tt5srv.xml}} initially. Minor edits can be made to this file later. The usernames/passwords and other configuration options are stored in plaintext, so you may want to {{ic|chmod 0600}} the configuration file with {{ic|chown teamtalk}}. Also the connection by default is not SSL/TLS enabled. <br />
<br />
Teamtalk also has a facebook capability, which allows the user to enter {{ic|facebook}} into the username box on the client. To configure this feature on the server, an option will show up to create a generic {{ic|facebook}} user to authenticate using facebook's network creating a profile for each facebook user on teamtalk directly from facebook. It will be created like a normal user and ACLs. An internet connection with DNS is required (if only using a local lan server) to use facebook's auth challenge which will alleviate having to administrate users. However, a username can be used over and over again with multiple connections to the server, but this can also be restricted per user.<br />
<br />
To enable file sharing, it can be given a storage directory in the wizard. It needs to be a directory that the {{ic|teamtalk}} user has access to. A quota seems to be enforced by the wizard, making disabling a quota more difficult. This might actually be a benefit to keep down spamming and only using the server for temporary storage until everyone has received the file. The file uploader can delete the file share when finished.<br />
<br />
IPv6 support is available and needs to be a specified listening address, but if IPv6 is not being used can be simply ignored.<br />
<br />
The IP port for teamtalk is {{ic|10333}}, but is flexible to other port numbers/assignments and can also be changed through the wizard or manually edited configuration file.<br />
<br />
=== First startup ===<br />
<br />
You will need to configure at least one user through the server wizard to be able to use the client. Facebook functionality is enabled by creating a special facebook user through the wizard. Then you can <br />
* [[Start]] the {{ic|tt5srv}} service.<br />
<br />
* To find the privilege key:<br />
There is not a privilege key like there is with [[Teamspeak]] or [[Mumble]]. You create users with the server wizard directly without using the client program. An admin user can use the client program like in Mumble to assign ACLs. By default, most users will be able to do most things that a common user will need to be able to do in a conference including creating temporary rooms, sharing video, files or desktops. Desktop sharing doesn't appear to be working on Linux. <br />
<br />
=== Regular startup ===<br />
<br />
* Simply [[enable]] the {{ic|tt5srv}} service.<br />
<br />
=== Changing configuration options manually ===<br />
<br />
* Most likely remember to restart the {{ic|tt5srv}} service. Using the client admin function is usually more preferable for user administration, but other options are configured through manual edits or the server wizard. Using the facebook login function may save administrative maintainence, but may not be desirable. Reusing users may not be desirable either. <br />
<br />
=== See also ===<br />
<br />
* [https://www.bearware.dk Official website]</div>Holycowhttps://wiki.archlinux.org/index.php?title=TeamTalk&diff=582492TeamTalk2019-09-16T16:10:41Z<p>Holycow: chown not chmod</p>
<hr />
<div>[[Category:Voice over IP]]<br />
From [[Wikipedia:TeamTalk]]:<br />
<br />
:TeamTalk is a conferencing system which people use to communicate on the Internet using VoIP and video streaming.<br />
<br />
== Installation ==<br />
<br />
=== Client ===<br />
<br />
[[Install]] the {{AUR|teamtalk}} package. It is the same package for the server. But the client files will be under the pkgsrc/srcdir/client directory. The client can be invoked by running ./run.sh.<br />
<br />
=== Server ===<br />
<br />
Install the {{AUR|teamtalk}} package.<br />
<br />
== Server configuration and startup ==<br />
<br />
=== Configuration ===<br />
<br />
* Teamtalk comes with a configuration script in the server binary, {{ic|tt5srv}}.<br />
<br />
Just execute {{ic|tt5srv -wizard}} and follow the steps. This makes the file in {{ic|/etc/teamspeak/tt5srv.xml}} initially. Minor edits can be made to this file later. The usernames/passwords and other configuration options are stored in plaintext, so you may want to {{ic|chmod 0600}} the configuration file with {{ic|chown teamtalk}}. Also the connection by default is not SSL/TLS enabled. <br />
<br />
Teamtalk also has a facebook capability, which allows the user to enter {{ic|facebook}} into the username box on the client. To configure this feature on the server, an option will show up to create a generic {{ic|facebook}} user to authenticate using facebook's network creating a profile on teamtalk directly from facebook. It will be created like a normal user and ACLs. An internet connection with DNS is required (if only using a local lan server) to use facebook's auth challenge which will alleviate having to administrate users manually through the wizard. However, a username can be used over and over again with multiple connections to the server, but this can also be restricted per user.<br />
<br />
To enable file sharing, it can be given a storage directory in the wizard. It needs to be a directory that the {{ic|teamtalk}} user has access to. A quota seems to be enforced by the wizard, making disabling a quota more difficult. This might actually be a benefit to keep down spamming and only using the server for temporary storage until everyone has received the file. The file uploader can delete the file share when finished.<br />
<br />
IPv6 support is available and needs to be a specified listening address, but if IPv6 is not being used can be simply ignored.<br />
<br />
The IP port for teamtalk is {{ic|10333}}, but is flexible to other port numbers/assignments and can also be changed through the wizard or manually edited configuration file.<br />
<br />
=== First startup ===<br />
<br />
You will need to configure at least one user through the server wizard to be able to use the client. Facebook functionality is enabled by creating a special facebook user through the wizard. Then you can <br />
* [[Start]] the {{ic|tt5srv}} service.<br />
<br />
* To find the privilege key:<br />
There is not a privilege key like there is with [[Teamspeak]] or [[Mumble]]. You create users with the server wizard directly without using the client program. An admin user can use the client program like in Mumble to assign ACLs. By default, most users will be able to do most things that a common user will need to be able to do in a conference including creating temporary rooms, sharing video, files or desktops. Desktop sharing doesn't appear to be working on Linux. <br />
<br />
=== Regular startup ===<br />
<br />
* Simply [[enable]] the {{ic|tt5srv}} service.<br />
<br />
=== Changing configuration options manually ===<br />
<br />
* Most likely remember to restart the {{ic|tt5srv}} service. Using the client admin function is usually more preferable for user administration, but other options are configured through manual edits or the server wizard. Using the facebook login function may save administrative maintainence, but may not be desirable. Reusing users may not be desirable either. <br />
<br />
=== See also ===<br />
<br />
* [https://www.bearware.dk Official website]</div>Holycowhttps://wiki.archlinux.org/index.php?title=TeamTalk&diff=582491TeamTalk2019-09-16T15:58:05Z<p>Holycow: Think I got all the bbcodes this time.</p>
<hr />
<div>[[Category:Voice over IP]]<br />
From [[Wikipedia:TeamTalk]]:<br />
<br />
:TeamTalk is a conferencing system which people use to communicate on the Internet using VoIP and video streaming.<br />
<br />
== Installation ==<br />
<br />
=== Client ===<br />
<br />
[[Install]] the {{AUR|teamtalk}} package. It is the same package for the server. But the client files will be under the pkgsrc/srcdir/client directory. The client can be invoked by running ./run.sh.<br />
<br />
=== Server ===<br />
<br />
Install the {{AUR|teamtalk}} package.<br />
<br />
== Server configuration and startup ==<br />
<br />
=== Configuration ===<br />
<br />
* Teamtalk comes with a configuration script in the server binary, {{ic|tt5srv}}.<br />
<br />
Just execute {{ic|tt5srv -wizard}} and follow the steps. This makes the file in {{ic|/etc/teamspeak/tt5srv.xml}} initially. Minor edits can be made to this file later. The usernames/passwords and other configuration options are stored in plaintext, so you may want to {{ic|chmod 0600}} the configuration file with {{ic|chmod teamtalk}}. Also the connection by default is not SSL/TLS enabled. <br />
<br />
Teamtalk also has a facebook capability, which allows the user to enter {{ic|facebook}} into the username box on the client. To configure this feature on the server, an option will show up to create a generic {{ic|facebook}} user to authenticate using facebook's network creating a profile on teamtalk directly from facebook. It will be created like a normal user and ACLs. An internet connection with DNS is required (if only using a local lan server) to use facebook's auth challenge which will alleviate having to administrate users manually through the wizard. However, a username can be used over and over again with multiple connections to the server, but this can also be restricted per user.<br />
<br />
To enable file sharing, it can be given a storage directory in the wizard. It needs to be a directory that the {{ic|teamtalk}} user has access to. A quota seems to be enforced by the wizard, making disabling a quota more difficult. This might actually be a benefit to keep down spamming and only using the server for temporary storage until everyone has received the file. The file uploader can delete the file share when finished.<br />
<br />
IPv6 support is available and needs to be a specified listening address, but if IPv6 is not being used can be simply ignored.<br />
<br />
The IP port for teamtalk is {{ic|10333}}, but is flexible to other port numbers/assignments and can also be changed through the wizard or manually edited configuration file.<br />
<br />
=== First startup ===<br />
<br />
You will need to configure at least one user through the server wizard to be able to use the client. Facebook functionality is enabled by creating a special facebook user through the wizard. Then you can <br />
* [[Start]] the {{ic|tt5srv}} service.<br />
<br />
* To find the privilege key:<br />
There is not a privilege key like there is with [[Teamspeak]] or [[Mumble]]. You create users with the server wizard directly without using the client program. An admin user can use the client program like in Mumble to assign ACLs. By default, most users will be able to do most things that a common user will need to be able to do in a conference including creating temporary rooms, sharing video, files or desktops. Desktop sharing doesn't appear to be working on Linux. <br />
<br />
=== Regular startup ===<br />
<br />
* Simply [[enable]] the {{ic|tt5srv}} service.<br />
<br />
=== Changing configuration options manually ===<br />
<br />
* Most likely remember to restart the {{ic|tt5srv}} service. Using the client admin function is usually more preferable for user administration, but other options are configured through manual edits or the server wizard. Using the facebook login function may save administrative maintainence, but may not be desirable. Reusing users may not be desirable either. <br />
<br />
=== See also ===<br />
<br />
* [https://www.bearware.dk Official website]</div>Holycowhttps://wiki.archlinux.org/index.php?title=TeamTalk&diff=582490TeamTalk2019-09-16T15:55:59Z<p>Holycow: another bbcode</p>
<hr />
<div>[[Category:Voice over IP]]<br />
From [[Wikipedia:TeamTalk]]:<br />
<br />
:TeamTalk is a conferencing system which people use to communicate on the Internet using VoIP and video streaming.<br />
<br />
== Installation ==<br />
<br />
=== Client ===<br />
<br />
[[Install]] the {{AUR|teamtalk}} package. It is the same package for the server. But the client files will be under the pkgsrc/srcdir/client directory. The client can be invoked by running ./run.sh.<br />
<br />
=== Server ===<br />
<br />
Install the {{AUR|teamtalk}} package.<br />
<br />
== Server configuration and startup ==<br />
<br />
=== Configuration ===<br />
<br />
* Teamtalk comes with a configuration script in the server binary, tt5srv.<br />
<br />
Just execute {{ic|tt5srv -wizard}} and follow the steps. This makes the file in {{ic|/etc/teamspeak/tt5srv.xml}} initially. Minor edits can be made to this file later. The usernames/passwords and other configuration options are stored in plaintext, so you may want to {{ic|chmod 0600}} the configuration file with {{ic|chmod teamtalk}}. Also the connection by default is not SSL/TLS enabled. <br />
<br />
Teamtalk also has a facebook capability, which allows the user to enter facebook into the username box on the client. To configure this feature on the server, an option will show up to create a generic facebook user to authenticate using facebook's network creating a profile on teamtalk directly from facebook. It will be created like a normal user and ACLs. An internet connection with DNS is required (if only using a local lan server) to use facebook's auth challenge which will alleviate having to administrate users manually through the wizard. However, a username can be used over and over again with multiple connections to the server, but this can also be restricted per user.<br />
<br />
To enable file sharing, it can be given a storage directory in the wizard. It needs to be a directory that the teamtalk user has access to. A quota seems to be enforced by the wizard, making disabling a quota more difficult. This might actually be a benefit to keep down spamming and only using the server for temporary storage until everyone has received the file. The file uploader can delete the file share when finished.<br />
<br />
IPv6 support is available and needs to be a specified listening address, but if IPv6 is not being used can be simply ignored.<br />
<br />
The IP port for teamtalk is {{ic|10333}}, but is flexible to other port numbers/assignments and can also be changed through the wizard or manually edited configuration file.<br />
<br />
=== First startup ===<br />
<br />
You will need to configure at least one user through the server wizard to be able to use the client. Facebook functionality is enabled by creating a special facebook user through the wizard. Then you can <br />
* [[Start]] the {{ic|tt5srv}} service.<br />
<br />
* To find the privilege key:<br />
There is not a privilege key like there is with [[Teamspeak]] or [[Mumble]]. You create users with the server wizard directly without using the client program. An admin user can use the client program like in Mumble to assign ACLs. By default, most users will be able to do most things that a common user will need to be able to do in a conference including creating temporary rooms, sharing video, files or desktops. Desktop sharing doesn't appear to be working on Linux. <br />
<br />
=== Regular startup ===<br />
<br />
* Simply [[enable]] the {{ic|tt5srv}} service.<br />
<br />
=== Changing configuration options manually ===<br />
<br />
* Most likely remember to restart the {{ic|tt5srv}} service. Using the client admin function is usually more preferable for user administration, but other options are configured through manual edits or the server wizard. Using the facebook login function may save administrative maintainence, but may not be desirable. Reusing users may not be desirable either. <br />
<br />
=== See also ===<br />
<br />
* [https://www.bearware.dk Official website]</div>Holycowhttps://wiki.archlinux.org/index.php?title=TeamTalk&diff=582489TeamTalk2019-09-16T15:55:06Z<p>Holycow: missed the bbcode</p>
<hr />
<div>[[Category:Voice over IP]]<br />
From [[Wikipedia:TeamTalk]]:<br />
<br />
:TeamTalk is a conferencing system which people use to communicate on the Internet using VoIP and video streaming.<br />
<br />
== Installation ==<br />
<br />
=== Client ===<br />
<br />
[[Install]] the {{AUR|teamtalk}} package. It is the same package for the server. But the client files will be under the pkgsrc/srcdir/client directory. The client can be invoked by running ./run.sh.<br />
<br />
=== Server ===<br />
<br />
Install the {{AUR|teamtalk}} package.<br />
<br />
== Server configuration and startup ==<br />
<br />
=== Configuration ===<br />
<br />
* Teamtalk comes with a configuration script in the server binary, tt5srv.<br />
<br />
Just execute {{ic|tt5srv -wizard}} and follow the steps. This makes the file in {{ic|/etc/teamspeak/tt5srv.xml}} initially. Minor edits can be made to this file later. The usernames/passwords and other configuration options are stored in plaintext, so you may want to {{ic|chmod 0600}} the configuration file with {{ic|chmod teamtalk}}. Also the connection by default is not SSL/TLS enabled. <br />
<br />
Teamtalk also has a facebook capability, which allows the user to enter facebook into the username box on the client. To configure this feature on the server, an option will show up to create a generic facebook user to authenticate using facebook's network creating a profile on teamtalk directly from facebook. It will be created like a normal user and ACLs. An internet connection with DNS is required (if only using a local lan server) to use facebook's auth challenge which will alleviate having to administrate users manually through the wizard. However, a username can be used over and over again with multiple connections to the server, but this can also be restricted per user.<br />
<br />
To enable file sharing, it can be given a storage directory in the wizard. It needs to be a directory that the teamtalk user has access to. A quota seems to be enforced by the wizard, making disabling a quota more difficult. This might actually be a benefit to keep down spamming and only using the server for temporary storage until everyone has received the file. The file uploader can delete the file share when finished.<br />
<br />
IPv6 support is available and needs to be a specified listening address, but if IPv6 is not being used can be simply ignored.<br />
<br />
The IP port for teamtalk is 10333, but is flexible to other port numbers/assignments and can also be changed through the wizard or manually edited configuration file.<br />
<br />
=== First startup ===<br />
<br />
You will need to configure at least one user through the server wizard to be able to use the client. Facebook functionality is enabled by creating a special facebook user through the wizard. Then you can <br />
* [[Start]] the {{ic|tt5srv}} service.<br />
<br />
* To find the privilege key:<br />
There is not a privilege key like there is with [[Teamspeak]] or [[Mumble]]. You create users with the server wizard directly without using the client program. An admin user can use the client program like in Mumble to assign ACLs. By default, most users will be able to do most things that a common user will need to be able to do in a conference including creating temporary rooms, sharing video, files or desktops. Desktop sharing doesn't appear to be working on Linux. <br />
<br />
=== Regular startup ===<br />
<br />
* Simply [[enable]] the {{ic|tt5srv}} service.<br />
<br />
=== Changing configuration options manually ===<br />
<br />
* Most likely remember to restart the {{ic|tt5srv}} service. Using the client admin function is usually more preferable for user administration, but other options are configured through manual edits or the server wizard. Using the facebook login function may save administrative maintainence, but may not be desirable. Reusing users may not be desirable either. <br />
<br />
=== See also ===<br />
<br />
* [https://www.bearware.dk Official website]</div>Holycowhttps://wiki.archlinux.org/index.php?title=TeamTalk&diff=582488TeamTalk2019-09-16T15:54:25Z<p>Holycow: /* Server configuration and startup */ bbcoded</p>
<hr />
<div>[[Category:Voice over IP]]<br />
From [[Wikipedia:TeamTalk]]:<br />
<br />
:TeamTalk is a conferencing system which people use to communicate on the Internet using VoIP and video streaming.<br />
<br />
== Installation ==<br />
<br />
=== Client ===<br />
<br />
[[Install]] the {{AUR|teamtalk}} package. It is the same package for the server. But the client files will be under the pkgsrc/srcdir/client directory. The client can be invoked by running ./run.sh.<br />
<br />
=== Server ===<br />
<br />
Install the {{AUR|teamtalk}} package.<br />
<br />
== Server configuration and startup ==<br />
<br />
=== Configuration ===<br />
<br />
* Teamtalk comes with a configuration script in the server binary, tt5srv.<br />
<br />
Just execute {{ic|tt5srv -wizard}} and follow the steps. This makes the file in {{ic|/etc/teamspeak/tt5srv.xml}} initially. Minor edits can be made to this file later. The usernames/passwords and other configuration options are stored in plaintext, so you may want to {{chmod 0600}} the configuration file with {{chmod teamtalk}}. Also the connection by default is not SSL/TLS enabled. <br />
<br />
Teamtalk also has a facebook capability, which allows the user to enter facebook into the username box on the client. To configure this feature on the server, an option will show up to create a generic facebook user to authenticate using facebook's network creating a profile on teamtalk directly from facebook. It will be created like a normal user and ACLs. An internet connection with DNS is required (if only using a local lan server) to use facebook's auth challenge which will alleviate having to administrate users manually through the wizard. However, a username can be used over and over again with multiple connections to the server, but this can also be restricted per user.<br />
<br />
To enable file sharing, it can be given a storage directory in the wizard. It needs to be a directory that the teamtalk user has access to. A quota seems to be enforced by the wizard, making disabling a quota more difficult. This might actually be a benefit to keep down spamming and only using the server for temporary storage until everyone has received the file. The file uploader can delete the file share when finished.<br />
<br />
IPv6 support is available and needs to be a specified listening address, but if IPv6 is not being used can be simply ignored.<br />
<br />
The IP port for teamtalk is 10333, but is flexible to other port numbers/assignments and can also be changed through the wizard or manually edited configuration file.<br />
<br />
=== First startup ===<br />
<br />
You will need to configure at least one user through the server wizard to be able to use the client. Facebook functionality is enabled by creating a special facebook user through the wizard. Then you can <br />
* [[Start]] the {{ic|tt5srv}} service.<br />
<br />
* To find the privilege key:<br />
There is not a privilege key like there is with [[Teamspeak]] or [[Mumble]]. You create users with the server wizard directly without using the client program. An admin user can use the client program like in Mumble to assign ACLs. By default, most users will be able to do most things that a common user will need to be able to do in a conference including creating temporary rooms, sharing video, files or desktops. Desktop sharing doesn't appear to be working on Linux. <br />
<br />
=== Regular startup ===<br />
<br />
* Simply [[enable]] the {{ic|tt5srv}} service.<br />
<br />
=== Changing configuration options manually ===<br />
<br />
* Most likely remember to restart the {{ic|tt5srv}} service. Using the client admin function is usually more preferable for user administration, but other options are configured through manual edits or the server wizard. Using the facebook login function may save administrative maintainence, but may not be desirable. Reusing users may not be desirable either. <br />
<br />
=== See also ===<br />
<br />
* [https://www.bearware.dk Official website]</div>Holycowhttps://wiki.archlinux.org/index.php?title=TeamTalk&diff=582486TeamTalk2019-09-16T15:45:28Z<p>Holycow: Created page with "Category:Voice over IP From Wikipedia:TeamTalk: :TeamTalk is a conferencing system which people use to communicate on the Internet using VoIP and video streaming. ==..."</p>
<hr />
<div>[[Category:Voice over IP]]<br />
From [[Wikipedia:TeamTalk]]:<br />
<br />
:TeamTalk is a conferencing system which people use to communicate on the Internet using VoIP and video streaming.<br />
<br />
== Installation ==<br />
<br />
=== Client ===<br />
<br />
[[Install]] the {{AUR|teamtalk}} package. It is the same package for the server. But the client files will be under the pkgsrc/srcdir/client directory. The client can be invoked by running ./run.sh.<br />
<br />
=== Server ===<br />
<br />
Install the {{AUR|teamtalk}} package.<br />
<br />
== Server configuration and startup ==<br />
<br />
=== Configuration ===<br />
<br />
* Teamtalk comes with a configuration script in the server binary, tt5srv.<br />
<br />
Just execute tt5srv -wizard and follow the steps. This makes the file in /etc/teamspeak/tt5srv.xml initially. Minor edits can be made to this file later. The usernames/passwords and other configuration options are stored in plaintext, so you may want to chmod 0600 the configuration file with chmod teamtalk. Also the connection by default is not SSL/TLS enabled. <br />
<br />
Teamtalk also has a facebook capability, which allows the user to enter facebook into the username box on the client. To configure this feature on the server, an option will show up to create a generic facebook user to authenticate using facebook's network creating a profile on teamtalk directly from facebook. An internet connection with DNS is required (if only using a local lan server) to use facebook's auth challenge which will alleviate having to administrate users manually through the wizard. However, a username can be used over and over again with multiple connections to the server, but this can also be restricted per user.<br />
<br />
To enable file sharing, it can be given a storage directory in the wizard. It needs to be a directory that the teamtalk user has access to. A quota seems to be enforced by the wizard, making disabling a quota more difficult. This might actually be a benefit to keep down spamming and only using the server for temporary storage until everyone has received the file. The file uploader can delete the file share when finished.<br />
<br />
IPv6 support is available and needs to be a specified listening address, but if IPv6 is not being used can be simply ignored.<br />
<br />
The IP port for teamtalk is 10333, but is flexible to other port numbers/assignments and can also be changed through the wizard or manually edited configuration file.<br />
<br />
=== First startup ===<br />
<br />
You will need to configure at least one user through the server wizard to be able to use the client. Facebook functionality is enabled by creating a special facebook user through the wizard. Then you can <br />
* [[Start]] the {{ic|tt5srv}} service.<br />
<br />
* To find the privilege key:<br />
There is not a privilege key like there is with [[Teamspeak]] or [[Mumble]]. You create users with the server wizard directly without using the client program. An admin user can use the client program like in Mumble to assign ACLs. By default, most users will be able to do most things that a common user will need to be able to do in a conference including creating temporary rooms, sharing video, files or desktops. Desktop sharing doesn't appear to be working on Linux. <br />
<br />
=== Regular startup ===<br />
<br />
* Simply [[enable]] the {{ic|tt5srv}} service.<br />
<br />
=== Changing configuration options manually ===<br />
<br />
* Most likely remember to restart the {{ic|tt5srv}} service. Using the client admin function is usually more preferable for user administration, but other options are configured through manual edits or the server wizard. Using the facebook login function may save administrative maintainence, but may not be desirable. Reusing users may not be desirable either. <br />
<br />
=== See also ===<br />
<br />
* [https://www.bearware.dk Official website]</div>Holycowhttps://wiki.archlinux.org/index.php?title=List_of_applications/Internet&diff=582479List of applications/Internet2019-09-16T15:00:44Z<p>Holycow: /* Other IM clients */ Added TeamTalk apparently new</p>
<hr />
<div><noinclude><br />
[[Category:Internet applications]]<br />
[[Category:Lists of software]]<br />
[[cs:List of applications/Internet]]<br />
[[es:List of applications/Internet]]<br />
[[it:List of applications/Internet]]<br />
[[ja:アプリケーション一覧/インターネット]]<br />
[[ru:List of applications/Internet]]<br />
[[zh-hans:List of applications/Internet]]<br />
[[zh-hant:List of applications/Internet]]<br />
{{List of applications navigation}}<br />
</noinclude><br />
== Internet ==<br />
<br />
=== Network connection ===<br />
<br />
==== Network managers ====<br />
<br />
{{Move|Network configuration#Network managers|There's a dedicated article.}}<br />
<br />
* {{App|[[ConnMan]]|Daemon for managing internet connections within embedded devices running the Linux operating system. Comes with a command-line client, plus Enlightenment, ncurses, GTK and Dmenu clients are available.|https://01.org/connman|{{Pkg|connman}}}}<br />
* {{App|dhclient|DHCP client from the Internet Systems Consortium.|https://www.isc.org/downloads/dhcp/|{{Pkg|dhclient}}}}<br />
* {{App|[[dhcpcd]]|RFC2131 compliant DHCP client daemon.|https://roy.marples.name/projects/dhcpcd|{{Pkg|dhcpcd}}}}<br />
* {{App|[[netctl]]|Simple and robust tool to manage network connections via profiles. Intended for use with [[systemd]].|https://projects.archlinux.org/netctl.git/|{{Pkg|netctl}}}}<br />
* {{App|[[NetworkManager]]|Manager that provides wired, wireless, mobile broadband and OpenVPN detection with configuration and automatic connection.|https://wiki.gnome.org/Projects/NetworkManager|CLI: {{Pkg|networkmanager}}, GUI: {{Pkg|network-manager-applet}}}}<br />
* {{App|[[systemd-networkd]]|Native [[systemd]] daemon that manages network configuration. It includes support for basic network configuration through [[udev]].|http://www.freedesktop.org/software/systemd/man/systemd-networkd.service.html|{{Pkg|systemd}}}}<br />
* {{App|[[Wicd]]|Wireless and wired connection manager with few dependencies. Comes with ncurses and GTK interfaces.|https://launchpad.net/wicd|CLI: {{Pkg|wicd}}, GUI: {{Pkg|wicd-gtk}}}}<br />
* {{app|[[Wifi Radar]]|''WiFi Radar'' is a Python/PyGTK2 utility for managing wireless (and '''only''' wireless) profiles. It enables you to scan for available networks and create profiles for your preferred networks.|http://wifi-radar.tuxfamily.org/|{{pkg|wifi-radar}}}}<br />
* {{app|wpa-cute| Is a graphical Qt [[wpa_supplicant]] front end to manage your wireless profiles ''only''. It offer to change and add profiles or scan for networks and connect to them by [[Wikipedia:Wi-Fi_Protected_Setup|WPS]].|https://github.com/loh-tar/wpa-cute|{{aur|wpa-cute}}}}<br />
<br />
See also [[Network configuration#Network managers]].<br />
<br />
==== VPN clients ====<br />
<br />
* {{App|Bitmask|Secured and encrypted communication using various service providers|https://bitmask.net/|{{AUR|bitmask}}}}<br />
* {{App|Libreswan| A free software implementation of the most widely supported and standarized VPN protocol based on ("IPsec") and the Internet Key Exchange ("IKE").|https://libreswan.org/|{{AUR|libreswan}}}}<br />
* {{App|[[NetworkManager]]|Supports a variety of protocols (e.g. MS, Cisco, Fortinet) via a plugin system.|https://wiki.gnome.org/Projects/NetworkManager/VPN|{{pkg|networkmanager}}}}<br />
* {{App|[[OpenConnect]]|Supports Cisco and Juniper VPNs.|http://www.infradead.org/openconnect/|{{pkg|openconnect}}}}<br />
* {{App|[[Openswan]]|IPsec-based VPN Solution.|https://www.openswan.org/|{{AUR|openswan}}}}<br />
* {{App|[[OpenVPN]]|To connect to OpenVPN VPNs.|https://openvpn.net/|{{pkg|openvpn}}}}<br />
* {{App|[[PPTP Client]]|To connect to PPTP VPNs, like Microsoft VPNs (MPPE). (insecure)|http://pptpclient.sourceforge.net/|{{pkg|pptpclient}}}}<br />
* {{App|[[strongSwan]]|IPsec-based VPN Solution.|https://www.strongswan.org/|{{pkg|strongswan}}}}<br />
* {{App|[[tinc]]|tinc is a free VPN daemon.|https://www.tinc-vpn.org/|{{pkg|tinc}}}}<br />
* {{App|[[Vpnc]]|To connect to Cisco 3000 VPN Concentrators.|https://www.unix-ag.uni-kl.de/~massar/vpnc/|{{pkg|vpnc}}}}<br />
* {{App|[[WireGuard]]|Next generation secure network tunnel.|https://www.wireguard.com/|{{Pkg|wireguard-tools}}}}<br />
<br />
==== Proxy servers ====<br />
<br />
* {{App|Dante|SOCKS server and SOCKS client, implementing RFC 1928 and related standards.|https://www.inet.no/dante/|{{Pkg|dante}}}}<br />
* {{App|[[Privoxy]]|Non-caching web proxy with advanced filtering capabilities for enhancing privacy, modifying web page data and HTTP headers, controlling access, and removing ads and other obnoxious Internet junk.|https://www.privoxy.org/|{{Pkg|privoxy}}}}<br />
* {{App|Project V|Project V is a set of tools to help you build your own privacy network over internet.|https://www.v2ray.com/en/|{{Pkg|v2ray}}}}<br />
* {{App|[[Shadowsocks]]|Secure socks5 proxy, designed to protect your Internet traffic.|https://www.shadowsocks.org/en/index.html|Python: {{Pkg|shadowsocks}}, C: {{Pkg|shadowsocks-libev}}, Qt: {{Pkg|shadowsocks-qt5}}}}<br />
* {{App|[[Squid]]|Caching proxy for the Web supporting HTTP, HTTPS, FTP, and more.|http://www.squid-cache.org/|{{Pkg|squid}}}}<br />
* {{App|[[Stunnel]]|A server and client to add and remove TLS encryption to TCP data flow.|https://www.stunnel.org/|{{Pkg|stunnel}}}}<br />
* {{App|Tinyproxy|Lightweight HTTP/HTTPS proxy daemon.|https://tinyproxy.github.io/|{{Pkg|tinyproxy}}}}<br />
* {{App|[[Trojan]]|An unidentifiable mechanism that helps you bypass GFW.|https://trojan-gfw.github.io/trojan/|{{Pkg|trojan}}}}<br />
* {{App|[[Varnish]]|High-performance HTTP accelerator.|https://varnish-cache.org/|{{Pkg|varnish}}}}<br />
* {{App|Ziproxy|Forwarding (non-caching) compressing HTTP proxy server.|http://ziproxy.sourceforge.net/|{{Pkg|ziproxy}}}}<br />
<br />
==== Anonymizing networks ====<br />
<br />
* {{App|[[Freenet]]|An encrypted network without censorship.|https://freenetproject.org/|{{AUR|freenet}}}}<br />
* {{App|[[GNUnet]]|Framework for secure peer-to-peer networking.|https://gnunet.org/|CLI: {{Pkg|gnunet}}, GUI: {{Pkg|gnunet-gtk}}}}<br />
* {{App|[[I2P]]|Distributed anonymous network.|https://geti2p.net/|{{AUR|i2p}}}}<br />
* {{App|[[Lantern]]|Peer-to-peer internet censorship circumvention software.|https://getlantern.org/|{{AUR|lantern-bin}}}}<br />
* {{App|[[Tor]]|Anonymizing overlay network.|https://www.torproject.org/|{{Pkg|tor}}}}<br />
<br />
=== Web browsers ===<br />
<br />
See also [[Wikipedia:Comparison of web browsers]].<br />
<br />
==== Console ====<br />
<br />
* {{App|[[ELinks]]|Advanced and well-established feature-rich text mode web browser with mouse wheel scroll support (links fork, barely supported since 2009).|http://elinks.or.cz/|{{Pkg|elinks}}}}<br />
* {{App|[[Wikipedia:Links (web browser)|Links]]|Graphics and text mode web browser. Includes a console version similar to Lynx.|http://links.twibright.com/|{{Pkg|links}}}}<br />
* {{App|[[Wikipedia:Lynx (web browser)|Lynx]]|Text browser for the World Wide Web.|http://lynx.invisible-island.net/|{{Pkg|lynx}}}}<br />
* {{App|[[Wikipedia:W3m|w3m]]|Pager/text-based web browser. It has vim-like keybindings, and is able to display images.|http://w3m.sourceforge.net/|{{Pkg|w3m}}}}<br />
<br />
==== Graphical ====<br />
<br />
===== Gecko-based =====<br />
<br />
See also [[Wikipedia:Gecko (software)]].<br />
<br />
* {{App|[[Firefox]]|Extensible browser from Mozilla based on Gecko with fast rendering.|https://mozilla.com/firefox|{{Pkg|firefox}}}}<br />
* {{App|[[Wikipedia:SeaMonkey|SeaMonkey]]|Continuation of the Mozilla Internet Suite.|http://www.seamonkey-project.org/|{{Pkg|seamonkey}}}}<br />
<br />
====== Firefox spin-offs ======<br />
* {{App|[[Wikipedia:Cliqz|Cliqz]]|Firefox-based privacy aware web browser.|https://cliqz.com/|{{AUR|cliqz}} or {{AUR|cliqz-bin}}}}<br />
* {{App|Cyberfox|Fast and privacy oriented fork of Mozilla Firefox.|https://cyberfox.8pecxstudios.com/|{{AUR|cyberfox-bin}}}}<br />
* {{App|[[Wikipedia:GNU IceCat|GNU IceCat]]|A customized build of Firefox ESR distributed by the GNU Project, stripped of non-free components and with additional privacy extensions. Release cycle may be delayed compared to Mozilla Firefox.|https://www.gnu.org/software/gnuzilla/|{{AUR|icecat}} or {{AUR|icecat-bin}}}}<br />
* {{App|LibreWolf|A fork of Firefox, focused on privacy, security and freedom.|https://librewolf-community.gitlab.io/|{{AUR|librewolf}} or {{AUR|librewolf-bin}}}}<br />
* {{App|Waterfox|Optimized fork of Mozilla Firefox, without data collection and allowing unsigned extensions and NPAPI plugins.|https://www.waterfoxproject.org/|{{AUR|waterfox-bin}}}}<br />
<br />
===== Blink-based =====<br />
<br />
See also [[Wikipedia:Blink (web engine)]].<br />
<br />
* {{App|[[Chromium]]|Web browser developed by Google, the open source project behind Google Chrome.|https://www.chromium.org/|{{Pkg|chromium}}}}<br />
<br />
====== Privacy-focused chromium spin-offs ======<br />
<br />
* {{App|[[Wikipedia:Brave (web browser)|Brave]]|Web browser that blocks ads and trackers by default.|https://www.brave.com/|{{AUR|brave-bin}}}}<br />
* {{App|Iridium|A privacy-focused [https://git.iridiumbrowser.de/cgit.cgi/iridium-browser/tree/?h&#61;patchview patchset] for Chromium. See [https://github.com/iridium-browser/tracker/wiki/Differences-between-Iridium-and-Chromium differences from Chromium].|https://iridiumbrowser.de/|{{AUR|iridium-deb}}}}<br />
* {{App|Ungoogled Chromium|Modifications to Google Chromium for removing Google integration and enhancing privacy, control, and transparency|https://github.com/Eloston/ungoogled-chromium|{{AUR|ungoogled-chromium}}}}<br />
<br />
====== Proprietary chromium spin-offs ======<br />
<br />
* {{App|[[Google Chrome]]|Proprietary web browser developed by Google.|https://www.google.com/chrome/|{{AUR|google-chrome}}}}<br />
* {{App|[[Opera]]|Proprietary browser developed by Opera Software.|https://opera.com|{{Pkg|opera}}}}<br />
* {{App|[[Wikipedia:SlimBrowser|Slimjet]]|Fast, smart and powerful proprietary browser based on Chromium.|http://www.slimjet.com/|{{AUR|slimjet}}}}<br />
* {{App|[[Vivaldi]]|An advanced proprietary browser made with the power user in mind.|https://vivaldi.com/|{{AUR|vivaldi}}}}<br />
* {{App|[[Wikipedia:Yandex Browser|Yandex Browser]]|Proprietary browser that combines a minimal design with sophisticated technology to make the web faster, safer, and easier.|https://browser.yandex.com/|{{AUR|yandex-browser-beta}}}}<br />
<br />
====== Browsers based on qt5-webengine ======<br />
<br />
* {{App|Crusta|Blazingly fast full feature web browser with unique features.|https://github.com/Crusta/CrustaBrowser/|{{AUR|crusta}}}}<br />
* {{App|[[Wikipedia:Dooble|Dooble]]|Colorful Web browser.|https://textbrowser.github.io/dooble/|{{AUR|dooble}}}}<br />
* {{App|[[Wikipedia:Eric Python IDE|Eric]]|QtWebEngine-based HTML browser, part of the eric6 development toolset, can be launched with the {{ic|eric6_browser}} command.|https://eric-ide.python-projects.org/|{{Pkg|eric}}}}<br />
* {{App|[[Wikipedia:Falkon|Falkon]]|Web browser based on QtWebEngine, written in Qt framework.|https://falkon.org/|{{pkg|falkon}}}}<br />
* {{App|[[Wikipedia:Konqueror|Konqueror]]|Web browser based on Qt toolkit and Qt WebEngine (or KHTML layout engine), part of {{Grp|kdebase}}. |http://konqueror.org/|{{Pkg|konqueror}}}}<br />
* {{App|Liri Browser|A minimalistic material design web browser written for Liri.|https://github.com/lirios/browser|{{AUR|liri-browser-git}}}}<br />
* {{App|[[Otter Browser]]|Browser aiming to recreate classic Opera (12.x) UI using Qt5. It can use Qt WebEngine as an alternative backend.|https://otter-browser.org/|{{Pkg|otter-browser}}}}<br />
* {{App|Qt WebBrowser|Browser for embedded devices developed using the capabilities of Qt and Qt WebEngine.|http://doc.qt.io/QtWebBrowser/|{{AUR|qtwebbrowser}}}}<br />
* {{App|[[qutebrowser]]|A keyboard-driven, [[vim]]-like browser based on PyQt5 and QtWebEngine.|https://qutebrowser.org/|{{Pkg|qutebrowser}}}}<br />
<br />
====== Browsers based on electron ======<br />
<br />
* {{App|Beaker|Peer-to-peer web browser with tools to create and host websites. Based on the [https://electronjs.org/ Electron] platform.|https://github.com/beakerbrowser/beaker|{{AUR|beaker}}}}<br />
* {{App|Min|A smarter, faster web browser based on the [https://electronjs.org/ Electron] platform.|https://minbrowser.github.io/min/|{{Pkg|min}}}}<br />
<br />
===== WebKit-based =====<br />
<br />
See also [[Wikipedia:WebKit]].<br />
<br />
{{Note|webkitgtk, webkitgtk2 and qtwebkit-based browsers were removed from the list, because these are today considered insecure and outdated. More info [https://blogs.gnome.org/mcatanzaro/2016/02/01/on-webkit-security-updates/ here].}}<br />
<br />
====== Browsers based on webkit2gtk ======<br />
<br />
* {{App|Eolie|Simple web browser for GNOME.|https://wiki.gnome.org/Apps/Eolie|{{Pkg|eolie}}}}<br />
* {{App|[[GNOME Web]]|Browser which uses the WebKitGTK rendering engine, part of {{Grp|gnome}}.|https://wiki.gnome.org/Apps/Web/|{{Pkg|epiphany}}}}<br />
* {{App|[[Lariza]]|A simple, experimental web browser using GTK 3, GLib and WebKit2GTK.|https://www.uninformativ.de/git/lariza/|{{AUR|lariza}}}}<br />
* {{App|[[Luakit]]|Fast, small, webkit based browser framework extensible by Lua.|https://luakit.github.io/|{{Pkg|luakit}}}}<br />
* {{App|[[Midori]]|Lightweight web browser based on GTK and WebKit.|http://midori-browser.org/|{{Pkg|midori}}}}<br />
* {{App|Next|Keyboard-oriented, infinitely extensible browser.|https://next.atlas.engineer/|{{AUR|next-browser-git}}}}<br />
* {{App|[[surf]]|Lightweight WebKit-based browser, which follows the [https://suckless.org/philosophy suckless ideology] (basically, the browser itself is a single C source file).|https://surf.suckless.org/|{{Pkg|surf}}}}<br />
* {{App|Surfer|Simple keyboard based web browser, written in C.|https://github.com/nihilowy/surfer|{{AUR|surfer}}}}<br />
* {{App|Vimb|A Vim-like web browser that is inspired by Pentadactyl and Vimprobable.|https://fanglingsu.github.io/vimb/|{{Pkg|vimb}}}}<br />
<br />
====== Browsers based on qt5-webkit ======<br />
<br />
* {{App|[[Wikipedia:Eric Python IDE|Eric]]|QtWebKit-based HTML browser, part of the eric6 development toolset, can be launched with the {{ic|eric6_webbrowser}} command.|https://eric-ide.python-projects.org/|{{Pkg|eric}}}}<br />
* {{App|OSPKit|Webkit based html browser for printing.|http://osp.kitchen/tools/ospkit/|{{AUR|ospkit-git}}}}<br />
* {{App|[[Otter Browser]]|Browser aiming to recreate classic Opera (12.x) UI using Qt5.|https://otter-browser.org/|{{Pkg|otter-browser}} or {{Pkg|otter-browser-nowebengine}}}}<br />
* {{App|[[qutebrowser]]|A keyboard-driven, [[vim]]-like browser based on PyQt5 with QtWebKit as an available backend.|https://github.com/qutebrowser/qutebrowser|{{Pkg|qutebrowser}}}}<br />
* {{App|smtube|Application that allows to browse, search and play YouTube videos.|https://www.smtube.org/|{{Pkg|smtube}}}}<br />
* {{App|WCGBrowser|A web browser for kiosk systems.|http://www.alandmoore.com/wcgbrowser/wcgbrowser.html|{{AUR|wcgbrowser-git}}}}<br />
<br />
===== Other =====<br />
<br />
* {{App|[[Wikipedia:Dillo|Dillo]]|Small, fast graphical web browser built on [[Wikipedia:Fltk|FLTK]]. Uses its own layout engine.|http://dillo.org/|{{Pkg|dillo}}}}<br />
* {{App|[[Wikipedia:Links (web browser)|Links]]|Graphics and text mode web browser. Includes a graphical X-window/framebuffer version with CSS, image rendering, pull-down menus. It can be launched with the {{ic|xlinks -g}} command.|http://links.twibright.com/|{{Pkg|links}}}}<br />
* {{App|[[Wikipedia:NetSurf|NetSurf]]|Featherweight browser written in C, notable for its slowly developing JavaScript support and fast rendering through its own layout engine.|http://netsurf-browser.org|{{Pkg|netsurf}}}}<br />
* {{App|[[Wikipedia:Pale Moon (web browser)|Pale Moon]]|A Firefox fork focussing on speed, with a pre-Firefox 29 interface. Uses [[Wikipedia:Goanna (software)|Goanna]] layout engine, a fork of Gecko. Firefox add-ons may not be compatible. [https://addons.palemoon.org/firefox/incompatible/] Without support for newer Firefox features such as cache2, e10s, and OTMC.|http://www.palemoon.org/|{{AUR|palemoon}} or {{AUR|palemoon-bin}}}}<br />
<br />
=== Web servers ===<br />
<br />
A [[Wikipedia:Web server|web server]] serves HTML web pages and other files via HTTP to clients like [[:Category:Web browser|web browsers]].<br />
The major web servers can be interfaced with programs to serve dynamic content ([[web applications]]).<br />
<br />
See also [[:Category:Web server]] and [[Wikipedia:Comparison of web server software]].<br />
<br />
* {{App|[[Apache]]|A high performance Unix-based HTTP server.|http://www.apache.org/dist/httpd|{{Pkg|apache}}}}<br />
* {{App|[[Caddy]]|HTTP/2 web server with automatic HTTPS.|https://caddyserver.com/|{{AUR|caddy}}}}<br />
* {{App|[[Hiawatha]]|Secure and advanced web server.|https://www.hiawatha-webserver.org/|{{Pkg|hiawatha}}}}<br />
* {{App|[[Lighttpd]]|A secure, fast, compliant and very flexible web-server.|http://www.lighttpd.net/|{{Pkg|lighttpd}}}}<br />
* {{App|[[nginx]]|Lightweight HTTP server and IMAP/POP3 proxy server.|https://nginx.org/|{{Pkg|nginx}}}}<br />
* {{App|sthttpd|Supported fork of the thttpd web server.|https://github.com/blueness/sthttpd|{{Pkg|sthttpd}}}}<br />
* {{App|yaws|Web server/framework written in Erlang.|http://yaws.hyber.org/|{{Pkg|yaws}}}}<br />
<br />
==== Static web servers ====<br />
<br />
* {{App|darkhttpd|A small and secure static web server, written in C, does not support HTTPS or Auth.|https://unix4lyfe.org/darkhttpd/|{{Pkg|darkhttpd}}}}<br />
* {{App|KatWeb|A lightweight static web server and reverse proxy, written in Go, designed for the modern web.|https://github.com/kittyhacker101/KatWeb|{{AUR|katweb}}}}<br />
* {{App|quark|An extremly small and simple http get-only web server. It only serves static pages on a single host.|http://tools.suckless.org/quark/|{{AUR|quark-git}}}}<br />
* {{App|serve|Static file serving and directory listing.|https://github.com/zeit/serve|{{AUR|nodejs-serve}}}}<br />
* {{App|servy|A tiny little web server, single binary, written in Rust.|https://github.com/zethra/servy|{{AUR|servy}}}}<br />
* {{App|Webfs|Simple and instant web server for mostly static content.|http://linux.bytesex.org/misc/webfs.html|{{Pkg|webfs}}}}<br />
<br />
The [[Python]] standard library module [https://docs.python.org/library/http.server.html http.server] can also be used from the command-line.<br />
<br />
==== Specialized web servers ====<br />
<br />
* {{App|Mongoose|Embedded web server library, supports WebSocket and MQTT.|https://github.com/cesanta/mongoose|{{AUR|mongoose}}}}<br />
* {{App|webhook|Small server for creating HTTP endpoints (hooks)|https://github.com/adnanh/webhook|{{Pkg|webhook}}}}<br />
* {{App|Woof|An ad-hoc single file webserver; Web Offer One File.|http://www.home.unix-ag.org/simon/woof.html|{{AUR|woof}}}}<br />
<br />
==== WSGI servers ====<br />
<br />
* {{App|Gunicorn|A Python WSGI HTTP Server for UNIX.|https://gunicorn.org/|{{Pkg|gunicorn}}, {{Pkg|python2-gunicorn}}}}<br />
* {{App|[[uWSGI]]|A fast, self-healing and developer/sysadmin-friendly application container server written in C.|https://uwsgi-docs.readthedocs.io/|{{Pkg|uwsgi}}}}<br />
* {{App|Waitress|A WSGI server for Python 2 and 3.|https://github.com/Pylons/waitress|{{Pkg|python-waitress}}, {{Pkg|python2-waitress}}}}<br />
<br />
Apache also supports WSGI with [[mod_wsgi]].<br />
<br />
==== Performance testing ====<br />
<br />
* {{App|http_load|A webserver performance testing tool, runs in a single process.|http://www.acme.com/software/http_load/|{{AUR|http_load}}}}<br />
* {{App|httperf|Can generate various HTTP workloads, written in C.|https://github.com/httperf/httperf|{{AUR|httperf}}}}<br />
* {{App|vegeta|HTTP load testing tool, written in Go.|https://github.com/tsenart/vegeta|{{Pkg|vegeta}}}}<br />
* {{App|Web Bench|Benchmarking tool, uses fork() for simulating multiple clients.|http://home.tiscali.cz/~cz210552/webbench.html|{{AUR|webbench}}}}<br />
<br />
=== File sharing ===<br />
<br />
==== Download managers ====<br />
<br />
See also [[Wikipedia:Comparison of download managers]].<br />
<br />
===== Console =====<br />
<br />
* {{App|[[aria2]]|Lightweight download utility that supports HTTP, FTP, SFTP, BitTorrent and Metalink. It can run as a daemon controlled via a built-in JSON-RPC or XML-RPC interface.|https://aria2.github.io/|{{Pkg|aria2}}}}<br />
* {{App|Axel|Light command line download accelerator. Supports HTTP and FTP.|https://github.com/eribertomota/axel|{{Pkg|axel}}}}<br />
* {{App|[[Wikipedia:cURL|cURL]]|An URL retrieval utility and library. Supports HTTP, FTP and SFTP.|https://curl.haxx.se/|{{Pkg|curl}}}}<br />
* {{App|[[Wikipedia:Lftp|LFTP]]|Sophisticated file transfer program. Supports HTTP, FTP, SFTP, FISH, and BitTorrent.|http://lftp.yar.ru/|{{Pkg|lftp}}}}<br />
* {{App|mps-youtube|Terminal based YouTube jukebox with playlist management. Plays audio/video through mplayer/mpv.|https://github.com/mps-youtube/mps-youtube|{{Pkg|mps-youtube}}}}<br />
* {{App|Plowshare|A set of command-line tools designed for managing file-sharing websites (aka Hosters).|https://github.com/mcrapet/plowshare|{{Pkg|plowshare}}}}<br />
* {{App|[[Wikipedia:RTMPDump|RTMPDump]]|Download FLV videos through RTMP (Adobe's proprietary protocol for Flash video players)|http://rtmpdump.mplayerhq.hu/|{{Pkg|rtmpdump}}}}<br />
* {{App|snarf|Command-line URL retrieval tool. Supports HTTP and FTP.|http://www.xach.com/snarf/|{{Pkg|snarf}}}}<br />
* {{App|[[Streamlink]]|Launch streams from various streaming services in a custom video player or save them to a file.|https://streamlink.github.io/|{{Pkg|streamlink}}}}<br />
* {{App|[[Wikipedia:Streamripper|Streamripper]]|Records and splits streaming mp3 into tracks.|http://streamripper.sourceforge.net/|{{AUR|streamripper}}}}<br />
* {{App|You-Get|Download media contents (videos, audios, images) from the Web.|https://you-get.org/|{{Pkg|you-get}}}}<br />
* {{App|[[youtube-dl]]|Download videos from YouTube and many other web sites.|https://rg3.github.io/youtube-dl/|{{Pkg|youtube-dl}}}}<br />
* {{App|youtube-viewer|Command line utility for viewing YouTube videos.|https://github.com/trizen/youtube-viewer|{{Pkg|youtube-viewer}}}}<br />
* {{App|[[Wikipedia:Wget|Wget]]|A network utility to retrieve files from the Web. Supports HTTP and FTP.|https://www.gnu.org/software/wget/|{{Pkg|wget}}}}<br />
<br />
===== Graphical =====<br />
<br />
* {{App|ClipGrab|Downloader and converter for YouTube, Vimeo and many other online video sites.|https://clipgrab.org/|{{Pkg|clipgrab}}}}<br />
* {{App|FatRat|Qt based download manager with support for HTTP, FTP, SFTP, BitTorrent and Metalink.|http://fatrat.dolezel.info/|{{AUR|fatrat-git}}}}<br />
* {{App|FreeRapid|Java-based downloader that supports downloading from file-sharing services.|http://wordrider.net/freerapid/|{{AUR|freerapid}}}}<br />
* {{App|[[Wikipedia:FrostWire|FrostWire]]|Easy to use cloud downloader, BitTorrent client and media player.|http://www.frostwire.com/|{{AUR|frostwire}}}}<br />
* {{App|gtk-youtube-viewer|GTK utility for viewing YouTube videos.|https://github.com/trizen/youtube-viewer|{{Pkg|youtube-viewer}} + {{Pkg|gtk2-perl}} + {{Pkg|perl-file-sharedir}}}}<br />
* {{App|[[Wikipedia:Wget#GWget|Gwget]]|Download manager for GNOME. Supports HTTP and FTP.|https://projects.gnome.org/gwget/|{{Pkg|gwget}}}}<br />
* {{App|Gydl|GUI wrapper around the already existing youtube-dl program to download content from sites like YouTube.|https://github.com/JannikHv/gydl|{{AUR|gydl-git}}}}<br />
* {{App|[[JDownloader]]|Java-based downloader for one-click hosting sites.|http://jdownloader.org/|{{AUR|jdownloader2}}}}<br />
* {{App|[[Wikipedia:KGet|KGet]]|Download manager for KDE. Supports HTTP, FTP, BitTorrent and Metalink. Part of {{Grp|kdenetwork}}.|https://www.kde.org/applications/internet/kget/|{{Pkg|kget}}}}<br />
* {{App|Persepolis|Graphical front-end for aria2 download manager with lots of features. Supports HTTP and FTP.|https://persepolisdm.github.io/|{{AUR|persepolis}}}}<br />
* {{App|[[pyLoad]]|Downloader written in Python and designed to be extremely lightweight, easily extensible and fully manageable via web.|https://pyload.net/|{{AUR|pyload}}{{Broken package link|package not found}}}}<br />
* {{App|Steadyflow|Simple download manager for GNOME. Supports HTTP and FTP.|https://launchpad.net/steadyflow|{{Pkg|steadyflow}}}}<br />
* {{App|Streamtuner2|Internet radio station and video browser. It simply lists stations in categories from different directories and launches your preferred media apps for playback.|https://sourceforge.net/projects/streamtuner2/|{{AUR|streamtuner2}}}}<br />
* {{App|uGet|GTK download manager featuring download classification and HTML import. Supports HTTP, FTP, BitTorrent, Metalink, YouTube and Mega.|http://ugetdm.com/|{{Pkg|uget}}}}<br />
* {{App|Xtreme Download Manager|Powerful tool to increase download speed up-to 500%. Supports HTTP and FTP. Video grabber works in a general way and is not limited to certain websites.|http://xdman.sourceforge.net/|{{AUR|xdman}}}}<br />
<br />
==== Cloud storage servers ====<br />
<br />
* {{App|[[Cozy]]|A personal cloud you can hack, host and delete.|https://cozy.io/|{{Pkg|cozy-stack}}}}<br />
* {{App|[[Nextcloud]]|A cloud server to store your files centrally on a hardware controlled by you.|https://nextcloud.com|{{Pkg|nextcloud}}}}<br />
* {{App|[[Pydio]]|Mature open source web application for file sharing and synchronization.|https://pydio.com/|{{AUR|pydio}}}}<br />
* {{App|[[Seafile]]|An online file storage and collaboration tool with advanced support for file syncing, privacy protection and teamwork.|https://www.seafile.com/|{{AUR|seafile-server}}}}<br />
<br />
==== Cloud synchronization clients ====<br />
<br />
{{Tip|<nowiki></nowiki><br />
* Some [[synchronization and backup programs]] provide direct support for some cloud-storage services.<br />
* Some [[FUSE#List of FUSE filesystems|FUSE filesystems]] provide a way to mount cloud-storage as a filesystem. Google Drive can be accessed also by {{Pkg|gvfs-google}} for GVFS-based applications (like [[Nautilus]]), and by {{Pkg|kio-gdrive}} for KIO-based applications (like [[Dolphin]]).<br />
* See [[Disk encryption#Cloud-storage optimized]] to achieve zero-knowledge (client-side transparent encryption) storage on any third-party cloud service.<br />
}}<br />
<br />
* {{App|aws-cli|CLI for Amazon Web Services, including efficient file transfers to and from Amazon S3.|https://aws.amazon.com/cli/|{{Pkg|aws-cli}}}}<br />
* {{App|Backblaze B2|Backblaze B2 open-source command-line client.|https://www.backblaze.com/b2/cloud-storage.html|{{AUR|backblaze-b2}}}}<br />
* {{App|CloudCross|Synchronize local files and folders with many cloud providers. Mail.ru Cloud, Yandex Disk, Google Drive, OneDrive and Dropbox support is available.|https://cloudcross.mastersoft24.ru/|{{AUR|cloudcross}}}}<br />
* {{App|[[Cozy]] Drive|Desktop client for Cozy.|https://cozy-labs.github.io/cozy-desktop/|{{Pkg|cozy-desktop}}}}<br />
* {{App|drive|Tiny program to pull or push Google Drive files.|https://github.com/odeke-em/drive|{{AUR|drive-bin}}}}<br />
* {{App|DriveSync|Command line utility that synchronizes your Google Drive files with a local folder on your machine.|https://github.com/MStadlmeier/drivesync|{{AUR|drivesync}}}}<br />
* {{App|[[Dropbox]]|Proprietary desktop client for Dropbox.|https://www.dropbox.com/|{{AUR|dropbox}}}}<br />
* {{App|gdrive|Command line utility for interacting with Google Drive.|https://github.com/prasmussen/gdrive|{{AUR|gdrive}}}}<br />
* {{App|Grive|Google Drive client with support for new Drive REST API and partial sync.|https://github.com/vitalif/grive2|{{AUR|grive}}}}<br />
* {{App|ODrive|Google Drive GUI for Windows / Mac / Linux.|https://github.com/liberodark/ODrive|{{AUR|odrive-bin}}}}<br />
* {{App|hubiC|Proprietary synchronization client service and command line tools for hubiC.|https://hubic.com/en/downloads|{{AUR|hubic}}}}<br />
* {{App|[[Insync]]|Unofficial proprietary Google Drive desktop client.|https://www.insynchq.com/|{{AUR|insync}}}}<br />
* {{App|[[Wikipedia:Mail.Ru|Mail.ru]] Cloud|Proprietary client for Mail.ru Cloud storage service.|https://cloud.mail.ru/|{{AUR|mailru-cloud}}{{Broken package link|package not found}}}}<br />
* {{App|[[Wikipedia:Mega (service)|Mega]] Sync Client|Desktop client to sync files with Mega.|https://mega.nz/|{{AUR|megasync}}}}<br />
* {{App|Megatools|Unofficial CLI for Mega.|https://megatools.megous.com/|{{AUR|megatools}}}}<br />
* {{App|[[Nextcloud]] Client|Desktop client for Nextcloud.|https://nextcloud.com/|{{Pkg|nextcloud-client}}}}<br />
* {{App|Nutstore|Desktop client for Nutstore.|https://www.jianguoyun.com/|{{AUR|nutstore}}}}<br />
* {{App|OneDrive|Unofficial CLI for [https://onedrive.live.com/about/ OneDrive].|https://github.com/skilion/onedrive|{{AUR|onedrive}}}}<br />
* {{App|[[Wikipedia:ownCloud|ownCloud]] Desktop Client|Desktop syncing client for ownCloud.|https://owncloud.com/client/|{{Pkg|owncloud-client}}}}<br />
* {{App|pCloud Drive|Proprietary desktop syncing client for pCloud. Based on the [https://electronjs.org/ Electron] platform.|https://www.pcloud.com/download-free-online-cloud-file-storage.html|{{AUR|pcloud-drive}}}}<br />
* {{App|[[Pydio]]Sync|Desktop client for Pydio.|https://pydio.com/|{{AUR|pydio-sync}}}}<br />
* {{App|S3cmd|Unofficial CLI for Amazon S3.|http://s3tools.org/s3cmd|{{Pkg|s3cmd}}}}<br />
* {{App|[[Seafile]] Client|GUI client for Seafile.|https://www.seafile.com/|{{AUR|seafile-client}}}}<br />
* {{App|[[Wikipedia:SpiderOak|SpiderOak]] One|Proprietary client for SpiderOak One.|https://spideroak.com/|{{AUR|spideroak-one}}}}<br />
* {{App|[[Wikipedia:Tresorit|Tresorit]]|Proprietary desktop syncing client for Tresorit.|https://tresorit.com/download|{{AUR|tresorit}}}}<br />
* {{App|[[Yandex Disk]]|Proprietary CLI for Yandex Disk.|https://disk.yandex.ru/|{{AUR|yandex-disk}}}}<br />
<br />
==== FTP ====<br />
<br />
===== FTP clients =====<br />
<br />
See also [[Wikipedia:Comparison of FTP client software]].<br />
* {{App|[[Wikipedia:FileZilla|FileZilla]]|Fast and reliable FTP, FTPS and SFTP client.|http://filezilla-project.org/|{{Pkg|filezilla}}}}<br />
* {{App|[[Wikipedia:gFTP|gFTP]]|Multithreaded FTP client for Linux.|http://gftp.seul.org/|{{Pkg|gftp}}}}<br />
* {{App|ftp|Simple ftp client provided by GNU Inetutils|https://www.gnu.org/software/inetutils/manual/inetutils.html#ftp-invocation|{{Pkg|inetutils}}}}<br />
* {{App|ncftp|A set of free application programs implementing FTP.|http://www.ncftp.com/|{{Pkg|ncftp}}}}<br />
* {{App|[[Wikipedia:tnftp|tnftp]]|FTP client with several advanced features for [[Wikipedia:NetBSD|NetBSD]].|http://freecode.com/projects/tnftp|{{Pkg|tnftp}}}}<br />
<br />
Some file managers like [[Dolphin]], [[GNOME Files]] and [[Thunar]] also provide FTP functionality.<br />
<br />
===== FTP servers =====<br />
<br />
See also [[Wikipedia:List of FTP server software]].<br />
<br />
* {{App|[[bftpd]]|Small, easy-to-configure FTP server|http://bftpd.sourceforge.net/|{{Pkg|bftpd}}}}<br />
* {{App|chezdav|WebDAV server that allows to share a particular directory.|https://wiki.gnome.org/phodav|{{Pkg|phodav}}}}<br />
* {{App|ftpd|Simple ftp server provided by GNU Inetutils|https://www.gnu.org/software/inetutils/manual/inetutils.html#ftpd-invocation|{{Pkg|inetutils}}}}<br />
* {{App|[[Proftpd|proFTPd]]|A secure and configurable FTP server|http://www.proftpd.org/|{{AUR|proftpd}}}}<br />
* {{App|[[Pure-FTPd]]|Free (BSD-licensed), secure, production-quality and standard-compliant FTP server.|http://www.pureftpd.org/project/pure-ftpd|{{AUR|pure-ftpd}}}}<br />
* {{App|[[SSH]]|SFTP is a network protocol that provides file access, file transfer, and file management over any reliable data stream.|https://www.openssh.com|{{Pkg|openssh}}}}<br />
* {{App|[[vsftpd]]|Lightweight, stable and secure FTP server for UNIX-like systems.|https://security.appspot.com/vsftpd.html|{{Pkg|vsftpd}}}}<br />
<br />
==== BitTorrent clients ====<br />
<br />
Some [[#Download managers|download managers]] are also able to connect to the BitTorrent network: [[Aria2]], [[Wikipedia:Lftp|LFTP]], FatRat, [[Wikipedia:FrostWire|FrostWire]], [[Wikipedia:KGet|KGet]], [[Wikipedia:MLDonkey|MLDonkey]], uGet.<br />
<br />
See also [[Wikipedia:Comparison of BitTorrent clients]].<br />
<br />
===== Console =====<br />
<br />
* {{App|btpd|The BitTorrent Protocol Daemon.|https://github.com/btpd/btpd|{{AUR|btpd}}}}<br />
* {{App|Ctorrent|CTorrent is a BitTorrent client implemented in C++ to be lightweight and quick.|http://www.rahul.net/dholmes/ctorrent/|{{AUR|enhanced-ctorrent}}}}<br />
* {{App|peerflix|Streaming torrent client for node.js.|https://github.com/mafintosh/peerflix|{{AUR|peerflix}}}}<br />
* {{App|[[rTorrent]]|Simple and lightweight ncurses BitTorrent client. Requires {{Pkg|libtorrent}} backend.|https://rakshasa.github.io/rtorrent/|{{Pkg|rtorrent}}}}<br />
* {{App|[[Transmission]] CLI|Simple and easy-to-use BitTorrent client with a daemon version and multiple front-ends. This package includes backend, daemon, command-line interface, and a Web UI interface.|https://transmissionbt.com/|{{Pkg|transmission-cli}}}}<br />
<br />
===== Graphical =====<br />
<br />
* {{App|[[Deluge]]|User-friendly BitTorrent client written in PyGTK that can run as a daemon.|https://deluge-torrent.org/|{{Pkg|deluge}}}}<br />
* {{App|Fragments|Easy to use BitTorrent client which follows the GNOME HIG and includes well thought-out features.|https://gitlab.gnome.org/World/Fragments|{{Pkg|fragments}}}}<br />
* {{App|[[Ktorrent]]|Feature-rich BitTorrent client for KDE.|https://www.kde.org/applications/internet/ktorrent/|{{Pkg|ktorrent}}}}<br />
* {{App|Powder Player|Hybrid between a streaming BitTorrent client and a player. Based on the [https://electronjs.org/ Electron] platform.|https://powder.media/|{{AUR|powder-player-bin}}}}<br />
* {{App|[[Wikipedia:qBittorrent|qBittorrent]]|Open source (GPLv2) BitTorrent client that strongly resembles µtorrent.|https://www.qbittorrent.org/|{{Pkg|qbittorrent}} or {{Pkg|qbittorrent-nox}}}}<br />
* {{App|[[Wikipedia:Tixati|Tixati]]|Proprietary peer-to-peer file sharing program that uses the popular BitTorrent protocol.|https://tixati.com/|{{AUR|tixati}}}}<br />
* {{App|Torrential|Simple torrent client for elementary OS.|https://github.com/davidmhewitt/torrential|{{AUR|torrential}}}}<br />
* {{App|[[Transmission]]|Simple and easy-to-use BitTorrent client with a daemon version and multiple front-ends.|https://transmissionbt.com/|GTK: {{Pkg|transmission-gtk}}, Qt: {{Pkg|transmission-qt}}}}<br />
* {{App|[[Transmission]] Remote|GTK client for remote management of the Transmission BitTorrent client, using its HTTP RPC protocol.|https://github.com/transmission-remote-gtk/transmission-remote-gtk|{{Pkg|transmission-remote-gtk}}}}<br />
* {{App|[[Wikipedia:Tribler|Tribler]]|4th generation file sharing system BitTorrent client.|https://www.tribler.org|{{Pkg|tribler}}}}<br />
* {{App|[[Wikipedia:Vuze|Vuze]]|Feature-rich BitTorrent client written in Java (formerly Azureus).|https://www.vuze.com/|{{AUR|vuze}}}}<br />
* {{App|WebTorrent Desktop|Streaming BitTorrent application. Based on the [https://electronjs.org/ Electron] platform.|https://webtorrent.io/desktop/|{{AUR|webtorrent-desktop}}}}<br />
<br />
==== Other P2P networks ====<br />
<br />
See also [[Wikipedia:Comparison of file-sharing applications]].<br />
<br />
* {{App|[[aMule]]|Well-known eDonkey/Kad client with a daemon version and GTK, web, and CLI front-ends.|http://www.amule.org/|{{Pkg|amule}}}}<br />
* {{App|EiskaltDC++|Direct Connect and ADC client.|https://github.com/eiskaltdcpp/eiskaltdcpp|GTK: {{AUR|eiskaltdcpp-gtk}}, Qt: {{AUR|eiskaltdcpp-qt}}}}<br />
* {{App|[[Wikipedia:gtk-gnutella|gtk-gnutella]]|GTK server/client for the Gnutella peer-to-peer network.|http://gtk-gnutella.sourceforge.net/|{{AUR|gtk-gnutella}}}}<br />
* {{App|KaMule|KDE graphical front-end for aMule.|http://kde-apps.org/content/show.php?content&#61;150270|{{AUR|kamule}}}}<br />
* {{App|LBRY|Browser and wallet for LBRY, the decentralized, user-controlled content marketplace. Based on the [https://electronjs.org/ Electron] platform.|https://lbry.io/|{{AUR|lbry-app-bin}}}}<br />
* {{App|[[Wikipedia:MLDonkey|MLDonkey]]|Multi-protocol P2P client that supports HTTP, FTP, BitTorrent, Direct Connect, eDonkey and FastTrack.|http://mldonkey.sourceforge.net/|{{Pkg|mldonkey}}}}<br />
* {{App|ncdc|Modern and lightweight Direct Connect and ADC client with a friendly ncurses interface.|https://dev.yorhel.nl/ncdc|{{AUR|ncdc}}}}<br />
* {{App|Nicotine+|A graphical client for the Soulseek P2P network.|https://www.nicotine-plus.org/|{{Pkg|nicotine+}}}}<br />
* {{App|Valknut|Direct Connect client (like DC++) with segmented downloading.|http://wxdcgui.sourceforge.net/|{{AUR|valknut}}}}<br />
<br />
==== Pastebin clients ====<br />
<br />
See also [[Wikipedia:Pastebin]].<br />
<br />
Pastebin services are often used to quote text or images while collaborating and troubleshooting. Pastebin clients provide a convenient way to post from the command line.<br />
<br />
{{Tip| You can access the [http://ix.io/ ix.io] pastebin using curl. For example pipe the output of a command to ix.io: {{bc|''command'' <nowiki>| curl -F 'f:1=<-' ix.io </nowiki>}} or upload a file: {{bc|<nowiki>curl -F 'f:1=<-' ix.io < </nowiki>''file''}}}}<br />
<br />
{{Note| [http://pastebin.com/ pastebin.com] is blocked for some people and has a history of annoying issues (javascript, adverts, poor formatting, etc). Do ''not'' use it.}}<br />
<br />
* {{App|Elmer|Pastebin client similar to wgetpaste and curlpaste, except written in Perl and usable with wget or curl. Servers: [http://codepad.org/ codepad.org], [http://rafb.me/ rafb.me], [http://sprunge.us/ sprunge.us].|https://github.com/sudokode/elmer|{{AUR|elmer}}}}<br />
* {{App|Fb-client|Client for the [http://paste.xinu.at/ paste.xinu.at] pastebin.|http://paste.xinu.at|{{Pkg|fb-client}}}}<br />
* {{App|Gist|Command-line interface for the [https://gist.github.com/ gist.github.com] pastebin service.|https://github.com/defunkt/gist|{{Pkg|gist}}}}<br />
* {{App|imgur|A CLI client which can upload image to [http://imgur.com imgur.com] image sharing service.|http://imgur.com/apps|{{AUR|imgur}}}}<br />
* {{App|Ix|Client for the ix.io pastebin.|http://ix.io|{{AUR|ix}}}}<br />
* {{App|Pastebinit|Really small Python script that acts as a Pastebin client. Servers: [http://pastie.org/ pastie.org], [https://paste.kde.org/ paste.kde.org], [http://paste.debian.net/ paste.debian.net], [http://paste.ubuntu.com/ paste.ubuntu.com] and others (for a full list see {{ic|pastebinit -l}}).|http://launchpad.net/pastebinit|{{Pkg|pastebinit}}}}<br />
* {{App|ruby-haste|Client for [http://hastebin.com/ hastebin.com].|https://github.com/seejohnrun/haste-client|{{AUR|ruby-haste}}}}<br />
* {{App|Uppity|The pastebin client with an attitude.|https://github.com/Kiwi/Uppity|{{AUR|uppity-git}}}}<br />
* {{App|Wgetpaste|Bash script that automates pasting to a number of pastebin services. Servers: [http://pastebin.ca/ pastebin.ca], [http://codepad.org/ codepad.org], [http://dpaste.com/ dpaste.com] and [http://pastebin.osuosl.org/ pastebin.osuosl.org].|http://wgetpaste.zlin.dk/|{{Pkg|wgetpaste}}}}<br />
<br />
=== Communication ===<br />
<br />
==== Email clients ====<br />
<br />
See also [[Wikipedia:Comparison of email clients]]<br />
<br />
===== Console =====<br />
<br />
* {{App|aerc|Work in progress asynchronous email client.|https://github.com/SirCmpwn/aerc|{{AUR|aerc-git}}}}<br />
* {{App|alot|An experimental terminal MUA based on [http://notmuchmail.org/ notmuch mail]. It is written in python using the [http://urwid.org/ urwid] toolkit.|https://github.com/pazz/alot|{{Pkg|alot}}}}<br />
* {{App|[[Alpine]]|Fast, easy-to-use and Apache-licensed email client based on [[Wikipedia:Pine (email client)|Pine]].|http://www.washington.edu/alpine/|{{AUR|alpine}}{{Broken package link|package not found}}}}<br />
* {{App|[[S-nail]]|a mail processing system with a command syntax reminiscent of ''ed'' with lines replaced by messages. Provides the functionality of [[Wikipedia:mailx|mailx]].|https://www.sdaoden.eu/code.html#s-mailx|{{Pkg|s-nail}}}}<br />
* {{App|mu/mu4e|Email indexer (mu) and client for emacs (mu4e). Xapian based for fast searches.|http://www.djcbsoftware.nl/code/mu/mu4e.html|{{AUR|mu}}}}<br />
* {{App|[[Mutt]]|Small but very powerful text-based mail client.|http://www.mutt.org/|{{Pkg|mutt}}}}<br />
* {{App|[[Mutt#NeoMutt|NeoMutt]]|Command line mail reader (or MUA). It's a fork of Mutt with added features.|https://www.neomutt.org/|{{Pkg|neomutt}}}}<br />
* {{App|[[nmh]]|A modular mail handling system.|http://www.nongnu.org/nmh/|{{AUR|nmh}}}}<br />
* {{App|[[notmuch]]|A fast mail indexer built on top of ''xapian''.|http://notmuchmail.org/|{{Pkg|notmuch}}}}<br />
* {{App|[[Sup]]|CLI mail client with very fast searching, tagging, threading and GMail like operation.|https://sup-heliotrope.github.io/|{{AUR|sup}}}}<br />
* {{App|Wanderlust|Email client and news reader for Emacs.|http://www.gohome.org/wl/|{{Pkg|wanderlust}}}}<br />
<br />
===== Graphical =====<br />
<br />
* {{App|Balsa|Simple and light email client for GNOME.|https://pawsa.fedorapeople.org/balsa/|{{Pkg|balsa}}}}<br />
* {{App|[[Wikipedia:Claws Mail|Claws Mail]]|Lightweight GTK-based email client and news reader.|https://www.claws-mail.org/|{{Pkg|claws-mail}}}}<br />
* {{App|ElectronMail|Unofficial desktop app for several end-to-end encrypted email providers (like ProtonMail, Tutanota). Based on the [https://electronjs.org/ Electron] platform.|https://github.com/vladimiry/ElectronMail|{{AUR|electronmail-bin}}}}<br />
* {{App|[[Evolution]]|Mature and feature-rich e-mail client that is part of the GNOME project. Part of {{Grp|gnome-extra}}.|https://wiki.gnome.org/Apps/Evolution|{{Pkg|evolution}}}}<br />
* {{App|Geary|Simple desktop mail client built in [[Wikipedia:Vala (programming language)|Vala]].|https://wiki.gnome.org/Apps/Geary|{{Pkg|geary}}}}<br />
* {{App|Gnubiff|Mail notification program that checks for mail and displays headers when new mail has arrived.|http://gnubiff.sourceforge.net/|{{Pkg|gnubiff}}}}<br />
* {{App|Inboxer|Unofficial, free and open-source Google Inbox desktop app. Based on the [https://electronjs.org/ Electron] platform.|https://denysdovhan.com/inboxer/|{{AUR|inboxer}}}}<br />
* {{App|[[Wikipedia:Kmail|Kmail]]|Mature and feature-rich email client. Part of {{Grp|kdepim}}.|https://www.kde.org/applications/internet/kmail/|{{Pkg|kmail}}}}<br />
* {{App|Kube|Modern communication and collaboration client built with QtQuick.|https://kube.kde.org/|{{Pkg|kube}}}}<br />
* {{App|Mailnag|Extensible mail notification daemon.|https://github.com/pulb/mailnag|{{Pkg|mailnag}}}}<br />
* {{App|Mailspring|[https://github.com/Foundry376/Mailspring/issues/24 Proprietary] fork of Nylas Mail by one of the original authors.|https://getmailspring.com/|{{AUR|mailspring}}}}<br />
* {{App|Nylas Mail|Extensible desktop mail app. Based on the [https://electronjs.org/ Electron] platform.|https://www.nylas.com/nylas-mail/|{{AUR|nylas-mail-lives-bin}}}}<br />
* {{App|openWMail|The missing desktop client for Gmail & Google Inbox. Based on the [https://electronjs.org/ Electron] platform.|https://openwmail.github.io/|{{AUR|openwmail}}}}<br />
* {{App|QGmailNotifier|Portable Qt5 based GMail notifier.|https://github.com/eteran/qgmailnotifier|{{AUR|qgmailnotifier}}}}<br />
* {{App|Protonmail Desktop|Unofficial app that emulates a native client for the ProtonMail e-mail service. Based on the [https://electronjs.org/ Electron] platform.|http://protondesktop.com/|{{AUR|protonmail-desktop}}}}<br />
* {{App|[[Wikipedia:SeaMonkey#Mail|SeaMonkey Mail & Newsgroups]]|Email client included in the SeaMonkey suite.|http://www.seamonkey-project.org/|{{Pkg|seamonkey}}}}<br />
* {{App|[[Wikipedia:Sylpheed|Sylpheed]]|Lightweight and user-friendly GTK email client.|http://sylpheed.sraoss.jp/en/|{{Pkg|sylpheed}}}}<br />
* {{App|[[Thunderbird]]|Feature-rich email client from Mozilla written in GTK.|http://www.mozilla.org/thunderbird/|{{Pkg|thunderbird}}}}<br />
* {{App|Trojitá|Qt IMAP email client. Only supports [https://bugs.kde.org/show_bug.cgi?id&#61;321374 one IMAP account].|http://trojita.flaska.net/|{{Pkg|trojita}}}}<br />
<br />
===== Web-based =====<br />
<br />
* {{App|[[Wikipedia:Mailpile|Mailpile]]|A modern, fast web-mail client with user-friendly encryption and privacy features.|https://www.mailpile.is/|{{AUR|mailpile}}}}<br />
* {{App|[[Nextcloud]] Mail|An email webapp for NextCloud.|https://github.com/nextcloud/mail|{{Pkg|nextcloud-app-mail}}}}<br />
* {{App|Roundcubemail|Browser-based multilingual IMAP client webapp with a native application-like user interface.|http://roundcube.net/|{{Pkg|roundcubemail}}}}<br />
* {{App|[[Squirrelmail|SquirrelMail]]|Webmail for Nuts!|https://squirrelmail.org/|{{AUR|squirrelmail}}}}<br />
<br />
==== Mail servers ====<br />
<br />
See [[Mail server]].<br />
<br />
* {{App|Modoboa|A modular mail hosting and management platform, written in Python.|https://modoboa.org/|{{AUR|modoboa}}}}<br />
<br />
==== Mail retrieval agents ====<br />
<br />
See also [[Wikipedia:Mail retrieval agent]].<br />
<br />
* {{App|[[fdm]]|Program to fetch and deliver mail.|https://github.com/nicm/fdm|{{Pkg|fdm}}}}<br />
* {{App|[[Wikipedia:Fetchmail|Fetchmail]]|A remote-mail retrieval utility.|http://www.fetchmail.info/|{{AUR|fetchmail}}}}<br />
* {{App|[[getmail]]|A POP3/IMAP4 mail retriever with reliable Maildir and command delivery.|http://pyropus.ca/software/getmail/|{{Pkg|getmail}}}}<br />
* {{App|imapsync|IMAP synchronisation, sync, copy or migration tool|http://imapsync.lamiral.info/|{{AUR|imapsync}}}}<br />
* {{App|[[isync]]|IMAP and MailDir mailbox synchronizer|http://isync.sourceforge.net/|{{Pkg|isync}}}}<br />
* {{App|mpop|A small, fast POP3 client suitable as a fetchmail replacement|https://marlam.de/mpop/|{{Pkg|mpop}}}}<br />
* {{App|[[OfflineIMAP]]|Synchronizes emails between two repositories.|http://www.offlineimap.org/|{{Pkg|offlineimap}}}}<br />
<br />
==== Instant messaging clients ====<br />
<br />
See also [[Wikipedia:Comparison of instant messaging clients]] and [[Wikipedia:Comparison of VoIP software]].<br />
<br />
This section lists all client software with [[Wikipedia:Instant messaging|instant messaging]] support.<br />
<br />
===== Multi-protocol clients =====<br />
<br />
{{Note|All messengers, that support several networks by means of direct connections to them, belong to this section.}}<br />
<br />
The number of networks supported by these clients is very large but they (like any multi-protocol clients) usually have very limited or no support for network-specific features.<br />
<br />
====== Console ======<br />
<br />
* {{App|BarnOwl|Ncurses-based chat client with support for the Zephyr, XMPP, IRC and Twitter protocols.|http://barnowl.mit.edu/|{{AUR|barnowl}}}}<br />
* {{App|[[Bitlbee|BitlBee]]|IRC gateway to popular chat networks (XMPP, ICQ and Twitter).|http://bitlbee.org/|{{Pkg|bitlbee}}}}<br />
* {{App|[[Wikipedia:Centericq|CenterIM]]|Text mode menu- and window-driven IM interface. Supports most of widely used IM protocols, including ICQ, IRC, XMPP. |http://centerim.org/|{{AUR|centerim}}}}<br />
* {{App|EKG2|Ncurses based XMPP, Gadu-Gadu, ICQ and IRC client. |http://en.ekg2.org/{{Dead link|2018|09|21}}|{{AUR|ekg2}}}}<br />
* {{App|Finch|Ncurses-based chat client that uses libpurple and supports all its protocols (Bonjour, Gadu-Gadu, Groupwise, ICQ, IRC, SIMPLE, XMPP, Zephyr).|http://developer.pidgin.im/wiki/Using%20Finch|{{Pkg|finch}}}}<br />
* {{App|Minbif|IRC gateway to IM networks that uses libpurple.|https://symlink.me/projects/minbif/wiki|{{Pkg|minbif}}}}<br />
<br />
====== Graphical ======<br />
<br />
* {{App|[[Wikipedia:Empathy (software)|Empathy]]|GNOME instant messaging client with audio/video support using the [[Wikipedia:Telepathy (software)|Telepathy]] framework.|https://wiki.gnome.org/Apps/Empathy|{{Pkg|empathy}}}}<br />
* {{App|[[Wikipedia:Jitsi|Jitsi]]|Audio/video VoIP phone and instant messenger written in Java that supports protocols such as SIP, XMPP, ICQ, IRC and many other useful features.|https://jitsi.org/|{{AUR|jitsi}}}}<br />
* {{App|[[Wikipedia:Kopete|Kopete]]|User-friendly IM supporting Bonjour, Gadu-Gadu, GroupWise, ICQ, XMPP.|https://userbase.kde.org/Kopete|{{Pkg|kopete}}}}<br />
* {{App|[[KDE#KDE Telepathy|KDE Telepathy]]|KDE instant messaging client using the [[Wikipedia:Telepathy (software)|Telepathy]] framework. Meant as a replacement for Kopete.|https://userbase.kde.org/Telepathy|{{Pkg|telepathy-kde-meta}}}}<br />
* {{App|[[Pidgin]]|Multi-protocol instant messaging client with audio support that uses libpurple and supports all its protocols (Bonjour, Gadu-Gadu, Groupwise, ICQ, IRC, SIMPLE, XMPP, Zephyr).|http://pidgin.im/|{{Pkg|pidgin}}}}<br />
* {{App|qutIM|Simple and user-friendly IM supporting ICQ, XMPP, Mail.Ru, IRC and VKontakte messaging.|http://qutim.org/|{{AUR|qutim}}}}<br />
* {{App|[[Wikipedia:Smuxi|Smuxi]]|Cross-platform IRC client that also supports Twitter and XMPP. |https://smuxi.im/|{{AUR|smuxi}}}}<br />
* {{App|[[Thunderbird]]|Feature-rich email client supports instant messaging and chat using IRC, XMPP and Twitter.|http://www.mozilla.org/thunderbird/|{{Pkg|thunderbird}}}}<br />
* {{App|Volt|Proprietary native desktop client for Skype, Telegram, Slack, XMPP, Discord, IRC and more. |https://volt-app.com/|{{AUR|volt}}}}<br />
<br />
===== IRC clients =====<br />
<br />
See also [[Wikipedia:Comparison of Internet Relay Chat clients]].<br />
<br />
====== Console ======<br />
<br />
* {{App|[[Wikipedia:BitchX|BitchX]]|Console-based IRC client developed from the popular [[Wikipedia:ircII|ircII]].|http://www.bitchx.org/|{{AUR|bitchx-git}}}}<br />
* {{App|ERC|Powerful, modular and extensible IRC client for [[Emacs]].|https://savannah.gnu.org/projects/erc/|included with {{Pkg|emacs}}}}<br />
* {{App|[[Wikipedia:Ii (IRC client)|ii]]|Featherweight IRC client, literally {{ic|tail -f}} the conversation and {{ic|echo}} back your replies to a file.|https://tools.suckless.org/ii/|{{AUR|ii}}}}<br />
* {{App|[[Irssi]]|Highly-configurable ncurses-based IRC client.|https://irssi.org/|{{Pkg|irssi}}}}<br />
* {{App|pork|Programmable, ncurses-based IRC client that mostly looks and feels like ircII.|http://dev.ojnk.net/|{{Pkg|pork}}}}<br />
* {{App|ScrollZ|Advanced IRC client based on [[Wikipedia:ircII|ircII]].|http://www.scrollz.info/|{{AUR|scrollz}}}}<br />
* {{App|sic|Extremely simple IRC client, similar to [[Wikipedia:Ii (IRC client)|ii]].|https://tools.suckless.org/sic/|{{AUR|sic}}}}<br />
* {{App|[[WeeChat]]|Modular, lightweight ncurses-based IRC client.|https://weechat.org/|{{Pkg|weechat}}}}<br />
* {{App|Tiny|an IRC client written in Rust with a clutter-free interface|https://github.com/osa1/tiny|{{AUR|tiny-irc-client-git}}}}<br />
<br />
'''Comparison'''<br />
<br />
{| class="wikitable sortable"<br />
! Name !! Package !! Written in !! Extensible !! [[Wikipedia:Simple Authentication and Security Layer|SASL]]<br />
|-<br />
! [[Wikipedia:BitchX|BitchX]]<br />
| {{AUR|bitchx-git}} || C || {{C|?}} || {{C|?}}<br />
|-<br />
! [https://savannah.gnu.org/projects/erc/ ERC]<br />
| {{Pkg|emacs}} || ELisp || {{G|in ELisp}} || {{Y|[https://www.emacswiki.org/emacs/ErcSASL via script]}}<br />
|-<br />
! [[Wikipedia:Ii (IRC client)|ii]]<br />
| {{AUR|ii}} || C || {{G|stdin/stdout}} || {{No}}<br />
|-<br />
! [[Irssi]]<br />
| {{Pkg|irssi}} || C || {{G|in Perl}} || {{Yes}}<br />
|-<br />
! [http://dev.ojnk.net/ pork]<br />
| {{Pkg|pork}} || C || {{G|in Perl}} || {{No}}<br />
|-<br />
! [http://www.scrollz.info/ ScrollZ]<br />
| {{AUR|scrollz}} || C || {{C|?}} || {{No}}<br />
|-<br />
! [https://tools.suckless.org/sic/ sic]<br />
| {{AUR|sic}} || C || {{G|stdin/stdout}} || {{No}}<br />
|-<br />
! [[WeeChat]]<br />
| {{Pkg|weechat}} || C || {{G|[https://weechat.org/files/doc/stable/weechat_scripting.en.html multiple languages]}} || {{Yes}}<br />
|-<br />
! [https://github.com/osa1/tiny osa1/tiny]<br />
| {{AUR|tiny-irc-client-git}} || Rust || {{No}} || {{Yes}}<br />
|}<br />
<br />
====== Graphical ======<br />
<br />
* {{App|HexChat|Fork of XChat for Linux and Windows.|https://hexchat.github.io/|{{Pkg|hexchat}}}}<br />
* {{App|[[Wikipedia:Konversation|Konversation]]|Qt-based IRC client for the KDE desktop.|https://konversation.kde.org/|{{Pkg|konversation}}}}<br />
* {{App|[[Wikipedia:KVIrc|KVIrc]]|Qt-based IRC client featuring extensive themes support.|http://kvirc.net/|{{AUR|kvirc-git}}}}<br />
* {{App|Loqui|GTK IRC client.|https://launchpad.net/loqui|{{AUR|loqui}}}}<br />
* {{App|LostIRC|Simple GTK IRC client with tab-autocompletion, multiple server support, logging and others.|http://lostirc.sourceforge.net|{{AUR|lostirc}}}}<br />
* {{App|Polari|Simple IRC client by the GNOME project.|https://wiki.gnome.org/Apps/Polari|{{Pkg|polari}}}}<br />
* {{App|[[Quassel]]|Modern, cross-platform, distributed IRC client.|http://quassel-irc.org/|{{Pkg|quassel-monolithic}}}}<br />
* {{App|Srain|Modern, beautiful IRC client written in GTK 3.|https://srain.im/|{{AUR|srain}}}}<br />
<br />
===== XMPP clients =====<br />
<br />
See also [[Wikipedia:XMPP]] and [[Wikipedia:Comparison of instant messaging clients#XMPP-related features]].<br />
<br />
====== Console ======<br />
<br />
* {{App|Freetalk|Console-based XMPP client.|https://www.gnu.org/software/freetalk/|{{AUR|freetalk}}}}<br />
* {{App|jabber.el|Minimal XMPP client for [[Emacs]].|http://emacs-jabber.sourceforge.net/|{{AUR|emacs-jabber}}}}<br />
* {{App|jp (Salut à Toi)|CLI frontend for Salut à Toi, multi-purpose XMPP client|https://salut-a-toi.org/|{{AUR|sat-jp}}}}<br />
* {{App|[[Wikipedia:MCabber|MCabber]]|Small XMPP console client, includes features: SSL, PGP, MUC, OTR and UTF8.|https://mcabber.com/|{{Pkg|mcabber}}}}<br />
* {{App|Poezio|XMPP client with IRC feeling|https://poez.io/|{{AUR|poezio}}}}<br />
* {{App|Primitivus (Salut à Toi)|Console frontend for Salut à Toi, multi-purpose XMPP client|https://salut-a-toi.org/|{{AUR|sat-primitivus}}}}<br />
* {{App|Profanity|A console based XMPP client inspired by Irssi.|http://profanity.im/|{{Pkg|profanity}}}}<br />
* {{App|xmpp-client|A minimalist XMPP client with OTR support.|https://github.com/agl/xmpp-client|{{AUR|go-xmpp-client}}}}<br />
<br />
====== Graphical ======<br />
<br />
* {{App|Cagou (Salut à Toi)|Desktop/mobiles frontend for Salut à Toi, multi-purpose XMPP client|https://salut-a-toi.org/|{{AUR|sat-cagou-hg}}}}<br />
* {{App|Converse.js|Web-based XMPP chat client written in JavaScript.|https://conversejs.org/|{{AUR|conversejs-git}}}}<br />
* {{App|Dino|A modern, easy to use XMPP client, with PGP and OMEMO support.|https://dino.im/|{{AUR|dino-git}}}}<br />
* {{App|[[Gajim]]|XMPP client with audio support written in PyGTK.|https://gajim.org/|{{Pkg|gajim}}}}<br />
* {{App|[[Wikipedia:Kadu (software)|Kadu]]|Qt-based XMPP and Gadu-Gadu client.|http://www.kadu.im/|{{AUR|kadu}}}}<br />
* {{App|Libervia (Salut à Toi)|Web frontend for Salut à Toi, multi-purpose XMPP client|https://salut-a-toi.org/|{{AUR|sat-libervia-hg}}}}<br />
* {{App|Nextcloud JavaScript XMPP Client|Chat app for Nextcloud with XMPP, end-to-end encryption, video calls, file transfer & group chat.|https://github.com/nextcloud/jsxc.nextcloud|{{AUR|nextcloud-app-jsxc}}}}<br />
* {{App|[[Wikipedia:Psi (instant messaging client)|Psi]]|Qt-based XMPP client.|https://psi-im.org/|{{Pkg|psi}} or {{Pkg|psi-nowebengine}}}}<br />
* {{App|[[Wikipedia:Spark (XMPP client)|Spark]]|Cross-platform real-time XMPP collaboration client optimized for business and organizations.|https://www.igniterealtime.org/projects/spark/|{{AUR|spark}}}}<br />
* {{App|Swift|XMPP client written in C++ with Qt and Swiften.|https://swift.im/|{{AUR|swift-im}}}}<br />
* {{App|[[Wikipedia:Tkabber|Tkabber]]|Easy to hack feature-rich XMPP client by the author of the ejabberd XMPP server.|http://tkabber.jabber.ru/|{{AUR|tkabber}}}}<br />
* {{App|Vacuum IM|Full-featured crossplatform XMPP client.|https://github.com/Vacuum-IM/vacuum-im|{{AUR|vacuum-im}}}}<br />
<br />
===== SIP clients =====<br />
<br />
See also [[Wikipedia:List of SIP software#Clients]].<br />
<br />
* {{App|[[Jami|Banji]]|SIP-compatible softphone and instant messenger for the decentralized Jami network. KDE client, formerly known as Ring KDE.|https://kde.org/applications/internet/org.kde.ring-kde|{{AUR|ring-kde}}}}<br />
* {{App|[[Wikipedia:Blink (SIP client)|Blink]]|State of the art, easy to use SIP client.|http://icanblink.com/|{{AUR|blink}}}}<br />
* {{App|[[Wikipedia:Ekiga|Ekiga]]|VoIP and video conferencing application with full SIP and H.323 support (formerly known as GNOME Meeting).|http://www.ekiga.org/|{{Pkg|ekiga}}{{Broken package link|package not found}}}}<br />
* {{App|[[Jami]]|SIP-compatible softphone and instant messenger for the decentralized Jami network. Formerly known as Ring and SFLphone.|https://jami.net/|{{Pkg|jami-gnome}}}}<br />
* {{App|[[Wikipedia:Linphone|Linphone]]|VoIP phone application (SIP client) for communicating freely with people over the internet, with voice, video, and text instant messaging.|http://www.linphone.org/|{{AUR|linphone}}}}<br />
* {{App|[[Wikipedia:Twinkle (software)|Twinkle]]|Qt softphone for VoIP and IM communication using SIP.|http://twinkle.dolezel.info/|{{AUR|twinkle-qt5}}}}<br />
<br />
===== Matrix clients =====<br />
<br />
See also [[Matrix]].<br />
<br />
* {{App|Fractal|Matrix client for GNOME written in Rust.|https://wiki.gnome.org/Apps/Fractal|{{Pkg|fractal}}}}<br />
* {{App|nheko|Desktop client for the Matrix protocol.|https://github.com/Nheko-Reborn/nheko|{{AUR|nheko}}, {{AUR|nheko-git}}}}<br />
* {{App|Quaternion|Qt5-based IM client for the Matrix protocol.|https://github.com/QMatrixClient/Quaternion|{{AUR|quaternion}}}}<br />
* {{App|Riot|Glossy Matrix client with an emphasis on performance and usability. Web application and desktop application based on the [https://electronjs.org/ Electron] platform.|https://about.riot.im/|{{Pkg|riot-web}}, {{Pkg|riot-desktop}}}}<br />
* {{App|Tensor|Qt5/QML-based Matrix client.|https://github.com/davidar/tensor|{{AUR|tensor-git}}}}<br />
<br />
===== Tox clients =====<br />
<br />
See also [[Tox]].<br />
<br />
* {{App|qTox|Powerful Tox client written in C++/Qt that follows the Tox design guidelines.|https://qtox.github.io/|{{Pkg|qtox}}}}<br />
* {{App|ratox|FIFO based tox client.|https://ratox.2f30.org/|{{AUR|ratox-git}}}}<br />
* {{App|Ricin|Dead-simple but powerful Tox client.|https://github.com/RicinApp/Ricin|{{AUR|ricin}}}}<br />
* {{App|Toxic|ncurses-based Tox client|https://github.com/Jfreegman/toxic|{{Pkg|toxic}}}}<br />
* {{App|Toxygen|Tox client written in pure Python3.|https://github.com/toxygen-project/toxygen|{{AUR|toxygen-git}}}}<br />
* {{App|Venom|a modern Tox client for the GNU/Linux desktop|https://github.com/naxuroqa/Venom|{{AUR|venom}}}}<br />
* {{App|µTox|Lightweight Tox client.|https://utox.io/|{{Pkg|utox}}}}<br />
<br />
===== Serverless (decentralized) clients =====<br />
<br />
See also [[Avahi#Link-Local (Bonjour/Zeroconf) chat|Bonjour]], [[Ring]], [[Tox]] and [[Wikipedia:Comparison of LAN messengers]].<br />
<br />
* {{App|BeeBEEP|Secure LAN Messenger.|http://beebeep.sourceforge.net/|{{AUR|beebeep}}}}<br />
* {{App|Bit Chat|Secure, peer-to-peer instant messenger.|https://bitchat.im/|{{AUR|bitchat}}}}<br />
* {{App|[[Bitmessage]]|Decentralized and trustless P2P communications protocol for sending encrypted messages to another person or to many subscribers.|https://bitmessage.org/|{{AUR|pybitmessage}}}}<br />
* {{App|iptux|LAN communication software, compatible with IP Messenger.|https://github.com/iptux-src/iptux|{{AUR|iptux}}}}<br />
* {{App|LAN Messenger|P2P chat application for intranet communication and does not require a server. A variety of handy features are supported including notifications, personal and group messaging with encryption, file transfer and message logging.|https://lanmessenger.github.io/|{{AUR|lmc}}}}<br />
* {{App|Patchwork|Decentralized messaging and sharing app built on top of Secure Scuttlebutt (SSB). Based on the [https://electronjs.org/ Electron] platform.|https://github.com/ssbc/patchwork|{{AUR|ssb-patchwork}}}}<br />
* {{App|[[RetroShare]]|Serverless encrypted instant messenger with filesharing, chatgroups, mail.|http://retroshare.net/|{{AUR|retroshare}}}}<br />
* {{App|[[Wikipedia:Ricochet (software)|Ricochet]]|Anonymous peer-to-peer instant messaging system built on [[Tor]] hidden services.|https://ricochet.im/|{{AUR|ricochet}}}}<br />
<br />
===== Other IM clients =====<br />
<br />
* {{App|Caprine|Unofficial Facebook Messenger app. Based on the [https://electronjs.org/ Electron] platform.|https://github.com/sindresorhus/caprine|{{Pkg|caprine}}}}<br />
* {{App|[[Discord]]|Proprietary all-in-one voice and text chat application for gamers that’s free and works on both your desktop and phone.|https://discordapp.com/|{{Pkg|discord}}}}<br />
* {{App|Esmska|Program for sending SMS over the Internet.|https://github.com/kparal/esmska|{{Pkg|esmska}}}} <br />
* {{App|[[Wikipedia:Gitter|Gitter]]|Communication product for communities and teams on GitHub.|https://gitter.im/|{{AUR|gitter}}}}<br />
* {{App|Hangups|Third-party instant messaging client for Google Hangouts.|https://github.com/tdryer/hangups|{{AUR|hangups}}}}<br />
* {{App|[[ICQ]]|Official ICQ client for Linux.|https://icq.com/linux/|{{AUR|icqdesktop-bin}}}}<br />
* {{App|Licq|Instant messaging client for UNIX supporting ICQ.|http://licq.org/|{{Pkg|licq}}{{Broken package link|package not found}}}}<br />
* {{App|Matterhorn|Console client for the Mattermost chat system.|https://github.com/matterhorn-chat/matterhorn|{{AUR|matterhorn}}}}<br />
* {{App|[[Mattermost]] Desktop|Desktop application for Mattermost. Based on the [https://electronjs.org/ Electron] platform.|https://github.com/mattermost/desktop|{{AUR|mattermost-desktop}}}}<br />
* {{App|[[Mumble]]|Voice chat application similar to TeamSpeak.|http://mumble.sourceforge.net/|{{Pkg|mumble}}}}<br />
* {{App|QHangups|Alternative client for Google Hangouts written in PyQt.|https://github.com/xmikos/qhangups|{{AUR|qhangups}}}}<br />
* {{App|Rocket.Chat Desktop|Desktop application for Rocket.Chat. Based on the [https://electronjs.org/ Electron] platform.|https://github.com/RocketChat/Rocket.Chat.Electron|{{AUR|rocketchat-desktop}}}}<br />
* {{App|[[Wikipedia:Signal (software)|Signal]]|Signal Private Messenger for the Desktop. Based on the [https://electronjs.org/ Electron] platform.|https://github.com/signalapp/Signal-Desktop|{{AUR|signal}}}}<br />
* {{App|[[Wikipedia:Skype|Skype]]|Popular but proprietary application for voice and video communication. Based on the [https://electronjs.org/ Electron] platform.|https://www.skype.com/|{{AUR|skypeforlinux-stable-bin}}}}<br />
* {{App|[[Wikipedia:Slack (software)|Slack]]|Proprietary Slack client for desktop. Based on the [https://electronjs.org/ Electron] platform.|https://slack.com/downloads/linux|{{AUR|slack-desktop}}}}<br />
* {{App|[[TeamSpeak]]|Proprietary VoIP application with gamers as its target audience.|http://www.teamspeak.com/|{{Pkg|teamspeak3}}}}<br />
* {{App|[[TeamTalk]]|Proprietary VoIP application with video chat, file and desktop sharing. Desktop sharing doesn't appear to be working in Linux though. AUR package is server only, but client is built in the make process.|https://bearware.dk|{{AUR|teamtalk}}}}<br />
* {{App|[[Telegram]] Desktop|Official Telegram desktop client.|https://desktop.telegram.org/|{{Pkg|telegram-desktop}}}}<br />
* {{App|[[Wikipedia:Viber|Viber]]|Proprietary cross-platform IM and VoIP software.|https://www.viber.com/products/linux/|{{AUR|viber}}}}<br />
* {{App|[[Wikipedia:Wire (software)|Wire]]|Modern, private messenger. Based on the [https://electronjs.org/ Electron] platform.|https://wire.com/|{{Pkg|wire-desktop}}}}<br />
* {{App|YakYak|Unofficial desktop client for Google Hangouts. Based on the [https://electronjs.org/ Electron] platform.|https://github.com/yakyak/yakyak|{{AUR|yakyak}}}}<br />
* {{App|[[Wikipedia:Zoom Video Communications|Zoom]]|Proprietary video conferencing, online meetings and group messaging application.|https://zoom.us/|{{AUR|zoom}}}}<br />
* {{App|[[Wikipedia:Zulip|Zulip]]|Desktop client for Zulip group chat. Based on the [https://electronjs.org/ Electron] platform.|https://zulipchat.com/apps/linux|{{AUR|zulip-electron-bin}}}}<br />
<br />
==== Instant messaging servers ====<br />
<br />
See also [[Wikipedia:Comparison of instant messaging protocols]].<br />
<br />
===== IRC servers =====<br />
<br />
See also [[Wikipedia:Comparison of Internet Relay Chat daemons]].<br />
<br />
* {{App|[[InspIRCd]]|A stable, modern and lightweight IRC daemon.|https://www.inspircd.org/|{{AUR|inspircd}}}}<br />
* {{App|IRCD-Hybrid|A lightweight, high-performance internet relay chat daemon.|http://www.ircd-hybrid.org/|{{AUR|ircd-hybrid}}}}<br />
* {{App|miniircd|A small and configuration free IRC server, suitable for private use.|https://github.com/jrosdahl/miniircd|{{AUR|miniircd-git}}}}<br />
* {{App|[[UnrealIRCd]]|Open Source IRC Server.|https://www.unrealircd.org/|{{Pkg|unrealircd}}}}<br />
* {{App|ngIRCd|A free, portable and lightweight Internet Relay Chat server for small or private networks.|https://ngircd.barton.de/|{{Pkg|ngircd}}}}<br />
<br />
===== XMPP servers =====<br />
<br />
See also [[Wikipedia:Comparison of XMPP server software]].<br />
<br />
* {{App|[[Prosody]]|An XMPP server written in the [http://www.lua.org/ Lua] programming language. Prosody is designed to be lightweight and highly extensible. It is licensed under a permissive [http://prosody.im/source/mit MIT license].|http://prosody.im/|{{Pkg|prosody}}}}<br />
* {{App|Ejabberd|Robust, scalable and extensible XMPP Server written in Erlang|https://www.ejabberd.im/|{{Pkg|ejabberd}}}}<br />
* {{App|[[Jabberd2]]|An XMPP server written in the C language and licensed under the GNU General Public License. It was inspired by jabberd14.|http://jabberd2.org|{{AUR|jabberd2}}}}<br />
* {{App|[[Openfire]]|An XMPP IM multiplatform server written in Java|http://www.igniterealtime.org/projects/openfire/|{{Pkg|openfire}}}}<br />
<br />
===== SIP servers =====<br />
<br />
See also [[Wikipedia:List of SIP software#Servers]].<br />
<br />
* {{App|[[Asterisk]]|A complete PBX solution.|https://www.asterisk.org/|{{AUR|asterisk}}}}<br />
* {{App|Kamailio|Rock solid SIP server.|https://www.kamailio.org/|{{AUR|kamailio}}}}<br />
* {{App|openSIPS|SIP proxy/server for voice, video, IM, presence and any other SIP extensions.|https://opensips.org/|{{Pkg|opensips}}}}<br />
* {{App|Repro|An open-source, free SIP server.|https://www.resiprocate.org/About_Repro|{{AUR|repro}}}}<br />
* {{App|[[Wikipedia:Yate (telephony engine)|Yate]]|Advanced, mature, flexible telephony server that is used for VoIP and fixed networks, and for traditional mobile operators and MVNOs.|http://yate.ro/|{{Pkg|yate}}}}<br />
<br />
===== Other IM servers =====<br />
<br />
* {{App|[[Mattermost]]|Open source private cloud server, Slack-alternative.|https://github.com/mattermost/mattermost-server|{{AUR|mattermost}}}}<br />
* {{App|[[Murmur]]|The voice chat application server for Mumble.|http://mumble.sourceforge.net/|{{Pkg|murmur}}}}<br />
* {{App|Nextcloud Talk|Video- and audio-conferencing app for Nextcloud.|https://github.com/nextcloud/spreed|{{Pkg|nextcloud-app-spreed}}}}<br />
* {{App|Rocket.Chat|Web chat server, developed in JavaScript, using the Meteor fullstack framework.|https://github.com/RocketChat/Rocket.Chat|{{AUR|rocketchat-server}}}}<br />
* {{App|Spreed WebRTC|WebRTC audio/video call and conferencing server.|https://github.com/strukturag/spreed-webrtc|{{AUR|spreed-webrtc-server}}}}<br />
* {{App|[[Matrix|Synapse]]|Reference homeserver for the Matrix protocol.|https://github.com/matrix-org/synapse|{{Pkg|matrix-synapse}}}}<br />
* {{App|[[TeamSpeak]] Server|Proprietary VoIP conference server.|https://teamspeak.com/|{{Pkg|teamspeak3-server}}}}<br />
* {{App|uMurmur|Minimalistic Mumble server.|http://umurmur.net/|{{Pkg|umurmur}}}}<br />
<br />
==== Collaborative software ====<br />
<br />
See also [[Wikipedia:Collaborative software]].<br />
<br />
* {{App|[[Wikipedia:Citadel/UX|Citadel/UX]]|Includes an email & mailing list server, instant messaging, address books, calendar/scheduling, bulletin boards, and wiki and blog engines.|http://www.citadel.org/|{{AUR|webcit}}}}<br />
* {{App|[[Kolab]]|Kolab Groupware solution consisting of a server and various clients.|https://kolab.org/|{{AUR|kolab}}}}<br />
* {{App|[[Open-xchange]]|A groupware solution providing mail facilities, calendaring, shared contacts and Google-Docs-like text editing|http://www.ox.io/|{{AUR|open-xchange}}}}<br />
* {{App|[[SOGo]]|Groupware server built around OpenGroupware.org (OGo) and the SOPE application server.|https://sogo.nu/|{{AUR|sogo}}}}<br />
<br />
=== News, RSS, and blogs ===<br />
<br />
==== News aggregators ====<br />
<br />
[[Wikipedia:RSS|RSS]]/[[Wikipedia:Atom (standard)|Atom]] aggregators. Some [[#Email clients|email clients]] are also able to act as news aggregator: [[Wikipedia:Claws Mail|Claws Mail]] RSSyl plugin, [[Evolution]] RSS plugin, [[Wikipedia:SeaMonkey#Mail|SeaMonkey Mail & Newsgroups]], [[Thunderbird]].<br />
<br />
See also [[Wikipedia:Comparison of feed aggregators]].<br />
<br />
===== Console =====<br />
<br />
* {{App|[[Wikipedia:Canto (news aggregator)|Canto]]|Ncurses RSS aggregator.|http://codezen.org/canto/|{{AUR|canto-curses}}}}<br />
* {{App|[[Wikipedia:Gnus|Gnus]]|Email, NNTP and RSS client for Emacs.|http://gnus.org/|{{Pkg|emacs}}}}<br />
* {{App|[[Newsboat]]|Ncurses RSS aggregator with layout and keybinding similar to the [[Mutt]] email client.|http://newsboat.org|{{Pkg|newsboat}}}}<br />
* {{App|Rawdog|"RSS Aggregator Without Delusions Of Grandeur" that parses RSS/CDF/Atom feeds into a static HTML page of articles in chronological order.|http://offog.org/code/rawdog.html|{{Pkg|rawdog}}}}<br />
* {{App|Snownews|Text mode RSS news reader.|https://github.com/kouya/snownews|{{AUR|snownews}}}}<br />
* {{App|sfeed|Lightweight RSS and Atom parser.|https://codemadness.org/sfeed-simple-feed-parser.html|{{AUR|sfeed-git}}}}<br />
<br />
===== Graphical =====<br />
<br />
* {{App|[[Wikipedia:Kontact#News Feed Aggregator|Akregator]]|News aggregator for KDE, part of {{Grp|kdepim}}.|https://www.kde.org/applications/internet/akregator/|{{Pkg|akregator}}}}<br />
* {{App|Alduin|RSS, Atom and JSON feed aggregator. Based on the [https://electronjs.org/ Electron] platform.|https://alduinapp.github.io/|{{AUR|alduin}}}}<br />
* {{App|FeedReader| Modern desktop application designed to complement existing web-based RSS accounts.|http://jangernert.github.io/FeedReader/|{{Pkg|feedreader}}}}<br />
* {{App|[[Wikipedia:Liferea|Liferea]]|GTK news aggregator for online news feeds and weblogs.|https://lzone.de/liferea/|{{Pkg|liferea}}}}<br />
* {{App|[[Nextcloud]] News|RSS/Atom feed reader for Nextcloud.|https://github.com/nextcloud/news|{{Pkg|nextcloud-app-news}}}}<br />
* {{App|QuiteRSS|RSS/Atom feed reader written on Qt/С++.|http://quiterss.org/|{{Pkg|quiterss}}}}<br />
* {{App|RSS Guard|Very tiny RSS and ATOM news reader developed using Qt framework.|https://github.com/martinrotter/rssguard|{{Pkg|rssguard}} or {{Pkg|rssguard-nowebengine}}}}<br />
* {{App|selfoss|The new multipurpose RSS reader, live stream, mashup, aggregation web application.|https://selfoss.aditu.de/|{{AUR|selfoss}}}}<br />
* {{App|Tickr|GTK-based RSS Reader that displays feeds as a smooth scrolling line on your desktop, as known from TV stations.|https://www.open-tickr.net/|{{AUR|tickr}}}}<br />
* {{App|[[Wikipedia:Tiny Tiny RSS|Tiny Tiny RSS]]|Web-based news feed (RSS/Atom) aggregator.|https://tt-rss.org/|{{Pkg|tt-rss}}}}<br />
<br />
==== Podcast clients ====<br />
<br />
Some media players are also able to act as podcast client: [[Amarok]], [[Wikipedia:Banshee (media player)|Banshee]], Cantata, [[Wikipedia:Clementine_(software)|Clementine]], Goggles Music Manager, [[Wikipedia:Rhythmbox|Rhythmbox]], [[VLC media player]]. [[Wikipedia:git-annex|git-annex]] can also [https://git-annex.branchable.com/tips/downloading_podcasts/ function as podcatcher].<br />
<br />
See also [[Wikipedia:List of podcatchers]].<br />
<br />
===== Console =====<br />
<br />
* {{App|castget|Simple, command-line RSS enclosure downloader, primarily intended for automatic, unattended downloading of podcasts.|http://castget.johndal.com/|{{Pkg|castget}}}}<br />
* {{App|gpo|Text mode interface of gPodder.|http://gpodder.org/|{{Pkg|gpodder}}}}<br />
* {{App|Greg|A command-line podcast aggregator.|https://github.com/manolomartinez/greg|{{AUR|greg-git}}}}<br />
* {{App|Marrie|A simple podcast client that runs on the Command Line Interface.|https://github.com/rafaelmartins/marrie/|{{AUR|marrie-git}}}}<br />
* {{App|pcd|A minimal podcast client written in go|https://github.com/kvannotten/pcd|{{AUR|pcd}}}}<br />
<br />
===== Graphical =====<br />
<br />
* {{App|CPod|Simple, beautiful podcast app. Based on the [https://electronjs.org/ Electron] platform.|https://github.com/z-------------/cumulonimbus|{{AUR|cpod-bin}}}}<br />
* {{App|GNOME Podcasts|Podcast client for the GNOME Desktop written in Rust.|https://gitlab.gnome.org/World/podcasts|{{Pkg|gnome-podcasts}}}}<br />
* {{App|gPodder|Podcast client and media aggregator (GTK interface).|http://gpodder.org/|{{Pkg|gpodder}}}}<br />
* {{App|Vocal|Simple podcast client for the Modern Desktop (GTK).|http://vocalproject.net/|{{Pkg|vocal}}}}<br />
<br />
==== Usenet newsreaders ====<br />
<br />
Some [[#Email clients|email clients]] are also able to act as Usenet newsreader: [[Wikipedia:Claws Mail|Claws Mail]], [[Evolution]], [[Mutt#NeoMutt|NeoMutt]], [[Wikipedia:SeaMonkey#Mail|SeaMonkey Mail & Newsgroups]], [[Wikipedia:Sylpheed|Sylpheed]], [[Thunderbird]].<br />
<br />
See also: [[Wikipedia:List of Usenet newsreaders]], [[Wikipedia:Comparison of Usenet newsreaders]].<br />
<br />
===== Console =====<br />
<br />
* {{app|[[Wikipedia:nn (newsreader)|nn]]|Alternative more user-friendly (curses-based) Usenet newsreader for UNIX.|http://www.nndev.org/|{{AUR|nn}}}}<br />
* {{app|[[Wikipedia:slrn|slrn]]|Text-based news client.|http://www.slrn.org/|{{AUR|slrn}}}}<br />
* {{app|[[Wikipedia:Tin_(newsreader)|tin]]|A cross-platform threaded NNTP and spool based UseNet newsreader.|http://tin.org/|{{AUR|tin}}}}<br />
* {{app|trn|A text-based Threaded Usenet newsreader.|http://trn.sourceforge.net/|{{AUR|trn}}}}<br />
<br />
===== Graphical =====<br />
<br />
* {{app|LottaNZB|A ''SABnzbd'' (Usenet binary downloader) GUI front-end written in PyGTK|https://launchpad.net/lottanzb/|{{aur|lottanzb}}}}<br />
* {{app|[[NZBGet]]|Usenet binary downloader for .nzb files with web and CLI interface.|https://nzbget.net/|{{Pkg|nzbget}}}}<br />
* {{app|[[Wikipedia:Pan (newsreader)|Pan]]|GTK Usenet newsreader that's good at both text and binaries.|http://pan.rebelbase.com/|{{Pkg|pan}}}}<br />
* {{app|[[SABnzbd]]|An open-source binary newsreader webapp written in Python.|https://sabnzbd.org/|{{AUR|sabnzbd}}}}<br />
* {{app|XRN|Usenet newsreader for X Window System.|http://www.mit.edu/people/jik/software/xrn.html|{{AUR|xrn}}}}<br />
<br />
==== Microblogging clients ====<br />
<br />
See also [[Wikipedia:List of Twitter services and applications]].<br />
<br />
===== Console =====<br />
<br />
* {{App|oysttyer|(official fork of ttytter) An interactive console text-based command-line Twitter client written in Perl.|https://github.com/oysttyer/oysttyer|{{AUR|oysttyer-git}}}}<br />
* {{App|Rainbowstream|A powerful and fully-featured console Twitter client written in Python.|https://github.com/orakaro/rainbowstream |{{AUR|rainbowstream}}}}<br />
* {{App|turses|Twitter client for the console based off ''tyrs'' with major improvements.|https://github.com/louipc/turses|{{AUR|turses-git}}}}<br />
<br />
===== Graphical =====<br />
<br />
* {{App|Birdie|Beautiful Twitter client designed for elementary OS.|https://www.amuza.uk/birdie|{{AUR|birdie-git}}}}<br />
* {{App|Choqok|Microblogging client for KDE that supports Twitter.com, Pump.io, GNU social and opendesktop.org services.|http://choqok.gnufolks.org/|{{Pkg|choqok}}}}<br />
* {{App|Corebird|Native GTK Twitter client for the Linux desktop.|http://corebird.baedert.org/|{{AUR|corebird}}{{Broken package link|package not found}}}}<br />
* {{App|Mikutter|Simple, powerful Twitter client using [[GTK]] and Ruby.|http://mikutter.hachune.net/|{{AUR|mikutter}}}}<br />
* {{App|Polly|Linux Twitter client designed for multiple columns of multiple accounts.|https://launchpad.net/polly/|{{AUR|polly}}}}<br />
* {{App|Pumpa|Pump.io client written in C++ and Qt.|https://pumpa.branchable.com/|{{AUR|pumpa-git}}}}<br />
* {{App|Turpial|Multi-interface Twitter client written in Python.|http://turpial.org.ve/|{{AUR|turpial-git}}}}<br />
* {{App|Whalebird|Mastodon client application. Based on the [https://electronjs.org/ Electron] platform.|https://whalebird.org/|{{AUR|whalebird-bin}}}}<br />
<br />
==== Blog engines ====<br />
<br />
See also [[Wikipedia:Blog software]] and [[Wikipedia:List of content management systems]].<br />
{{note|Content managers, social networks, and blog publishers overlap in many functions.}}<br />
* {{App|[[Diaspora]]|A distributed privacy aware social network.|https://diasporafoundation.org|{{AUR|diaspora-mysql}} or {{AUR|diaspora-postgresql}}}}<br />
* {{App|[[Drupal]]|A PHP-based content management platform.|http://www.drupal.org/|{{Pkg|drupal}}}}<br />
* {{App|[[Ghost]]|Blogging platform written in JavaScript and distributed under the MIT License, designed to simplify the process of online publishing for individual bloggers as well as online publications.|https://ghost.org/|{{AUR|ghost}}{{Broken package link|package not found}}}}<br />
* {{App|[[Joomla]]|A php Content Management System (CMS) which enables you to build websites and powerful online applications.|http://www.joomla.org/|{{AUR|joomla}}}}<br />
* {{App|[[Wordpress]]|Blog tool and publishing platform.|https://wordpress.org/|{{Pkg|wordpress}}}}<br />
<br />
==== Static site generators ====<br />
<br />
* {{App|Hexo|Fast, simple and powerful blog framework.|https://hexo.io/|{{AUR|nodejs-hexo-cli}}}}<br />
* {{App|Hugo|Hugo is a static HTML and CSS website generator written in Go. It is optimized for speed, ease of use, and configurability.|https://gohugo.io/|{{Pkg|hugo}}}}<br />
* {{App|[[Jekyll]]|Static blog engine, written in Ruby, which supports Markdown, textile and other formats.|http://jekyllrb.com/|{{AUR|jekyll}}}}<br />
* {{App|Nanoblogger|A small weblog engine written in Bash for the command line. It uses common UNIX tools such as cat, grep, and sed to create static HTML content. It is not maintained anymore.|http://nanoblogger.sourceforge.net/|{{AUR|nanoblogger}}}}<br />
* {{App|Nikola|Static site generator written in Python, with incremental rebuilds and multiple markup formats.|https://getnikola.com/|{{Pkg|nikola}}}}<br />
* {{app|Pelican|Static site generator, powered by Python.|http://docs.getpelican.com/|{{Pkg|pelican}}}}<br />
<br />
=== Remote desktop ===<br />
<br />
See also [[Wikipedia:Remote desktop software]] and [[Wikipedia:Comparison of remote desktop software]].<br />
<br />
==== Remote desktop clients ====<br />
<br />
* {{App|[[Wikipedia:AnyDesk|AnyDesk]]|Proprietary remote desktop software.|https://anydesk.com/|{{AUR|anydesk}}}}<br />
* {{App|[[Wikipedia:GNOME Boxes|GNOME Boxes]]|A simple GNOME 3 application to access remote or virtual systems. Supports VNC and SPICE.|https://wiki.gnome.org/Apps/Boxes|{{Pkg|gnome-boxes}}}}<br />
* {{App|GVncViewer|Simple VNC Client on Gtk-VNC. Run with {{ic|gvncviewer}}.|https://wiki.gnome.org/Projects/gtk-vnc|{{Pkg|gtk-vnc}}}}<br />
* {{App|[[Wikipedia:KRDC|KRDC]]|Remote Desktop Client for KDE. Supports RDP and VNC. Part of {{Grp|kdenetwork}}.|https://www.kde.org/applications/internet/krdc/|{{Pkg|krdc}}}}<br />
* {{App|[[Remmina]]|Remote desktop client written in GTK. Supports RDP, VNC, NX, XDMCP and SSH.|http://www.remmina.org/|{{Pkg|remmina}}}}<br />
* {{App|Remote Viewer|Simple remote display client. Supports SPICE and VNC.|https://virt-manager.org/|{{Pkg|virt-viewer}}}}<br />
* {{App|[[Wikipedia:TeamViewer|TeamViewer]]|Proprietary remote desktop client. It uses its own proprietary protocol.|http://www.teamviewer.com/|{{AUR|teamviewer}}}}<br />
* {{App|[[TigerVNC|vncviewer (TigerVNC)]]|VNC viewer for X.|http://tigervnc.org/|{{Pkg|tigervnc}}}}<br />
* {{App|[[Wikipedia:Vinagre|Vinagre]]|Remote desktop viewer for GNOME. Supports RDP, VNC, SPICE and SSH. Part of {{Grp|gnome-extra}}.|https://wiki.gnome.org/Apps/Vinagre|{{Pkg|vinagre}}}}<br />
* {{App|xfreerdp|FreeRDP X11 client. Run with {{ic|xfreerdp}}.|http://www.freerdp.com/|{{Pkg|freerdp}}}}<br />
* {{App|[[X2Go]] Client|A graphical client (Qt4) for the X2Go system that uses the [[w:NX technology|NX technology]] protocol.|http://wiki.x2go.org/doku.php|{{Pkg|x2goclient}}}}<br />
<br />
==== Remote desktop servers ====<br />
<br />
* {{App|Krfb|VNC server for KDE. Part of {{Grp|kdenetwork}}.|https://www.kde.org/applications/system/krfb|{{Pkg|krfb}}}}<br />
* {{App|[[Vino]]|VNC server for GNOME. Part of {{Grp|gnome}}.|https://wiki.gnome.org/Projects/Vino|{{Pkg|vino}}}}<br />
* {{App|[[TigerVNC|x0vncserver (TigerVNC)]]|VNC Server for X displays.|http://tigervnc.org/|{{Pkg|tigervnc}}}}<br />
* {{App|[[x11vnc]]|VNC server for real X displays.|http://www.karlrunge.com/x11vnc/|{{Pkg|x11vnc}}}}<br />
* {{App|[[X2Go]] Server|An open source remote desktop software that uses the [[w:NX technology|NX technology]] protocol.|http://wiki.x2go.org/doku.php|{{Pkg|x2goserver}}}}<br />
* {{App|[[Xrdp]]|A daemon that supports RDP. It uses Xvnc, X11rdp or xorgxrdp as a backend.|http://www.xrdp.org/|{{AUR|xrdp}}}}</div>Holycowhttps://wiki.archlinux.org/index.php?title=Improving_performance&diff=542191Improving performance2018-09-20T06:15:08Z<p>Holycow: /* Real-time kernel */ correct uur link</p>
<hr />
<div>[[Category:Hardware]]<br />
[[Category:System administration]]<br />
[[ar:Improving performance]]<br />
[[es:Improving performance]]<br />
[[ja:パフォーマンスの最大化]]<br />
[[ru:Improving performance]]<br />
[[zh-hans:Improving performance]]<br />
{{Related articles start}}<br />
{{Related|Improving performance/Boot process}}<br />
{{Related|Pacman/Tips and tricks#Performance}}<br />
{{Related|SSH#Speeding up SSH}}<br />
{{Related|Openoffice#Speed up OpenOffice}}<br />
{{Related|Laptop}}<br />
{{Related|Preload}}<br />
{{Related|Cpulimit}}<br />
{{Related articles end}}<br />
This article provides information on basic system diagnostics relating to performance as well as steps that may be taken to reduce resource consumption or to otherwise optimize the system with the end-goal being either perceived or documented improvements to a system's performance.<br />
<br />
== The basics ==<br />
<br />
=== Know your system ===<br />
<br />
The best way to tune a system is to target bottlenecks, or subsystems which limit overall speed. The system specifications can help identify them.<br />
<br />
* If the computer becomes slow when large applications (such as OpenOffice.org and Firefox) run at the same time, check if the amount of RAM is sufficient. Use the following command, and check the "available" column:<br />
<br />
$ free -h<br />
<br />
* If boot time is slow, and applications take a long time to load at first launch (only), then the hard drive is likely to blame. The speed of a hard drive can be measured with the {{ic|hdparm}} command:<br />
{{Note|{{Pkg|hdparm}} indicates only the pure read speed of a hard drive, and is not a valid benchmark. A value higher than 40MB/s (while idle) is however acceptable on an average system.}}<br />
<br />
# hdparm -t /dev/sdX<br />
<br />
* If CPU load is consistently high even with enough RAM available, then try to lower CPU usage by disabling running [[daemons]] and/or processes. This can be monitored in several ways, for example with {{Pkg|htop}}, {{ic|pstree}} or any other [[List_of_applications#System_monitoring|system monitoring]] tool:<br />
<br />
$ htop<br />
<br />
* If applications using direct rendering are slow (i.e those which use the GPU, such as video players, games, or even a [[window manager]]), then improving GPU performance should help. The first step is to verify if direct rendering is actually enabled. This is indicated by the {{ic|glxinfo}} command, part of the {{Pkg|mesa-demos}} package:<br />
{{hc|<nowiki>$ glxinfo | grep direct</nowiki>|<br />
direct rendering: Yes<br />
}}<br />
<br />
* When running a [[desktop environment]], disabling (unused) visual desktop effects may reduce GPU usage. Use a more lightweight environment or create a [[Desktop_environment#Custom_environments|custom environment]] if the current does not meet the hardware and/or personal requirements.<br />
<br />
=== Benchmarking ===<br />
<br />
The effects of optimization are often difficult to judge. They can however be measured by [[benchmarking]] tools.<br />
<br />
== Storage devices ==<br />
<br />
=== Multiple hardware paths ===<br />
<br />
{{Style|Subjective writing}}<br />
<br />
An internal hardware path is how the storage device is connected to your motherboard. There are different ways to connect to the motherboard such as TCP/IP through a NIC, plugged in directly using PCIe/PCI, Firewire, Raid Card, USB, etc. By spreading your storage devices across these multiple connection points you maximize the capabilities of your motherboard, for example 6 hard-drives connected via USB would be much much slower than 3 over USB and 3 over Firewire. The reason is that each entry path into the motherboard is like a pipe, and there is a set limit to how much can go through that pipe at any one time. The good news is that the motherboard usually has several pipes.<br />
<br />
More Examples<br />
<br />
# Directly to the motherboard using pci/PCIe/ata<br />
# Using an external enclosure to house the disk over USB/Firewire<br />
# Turn the device into a network storage device by connecting over tcp/ip<br />
<br />
Note also that if you have a 2 USB ports on the front of your machine, and 4 USB ports on the back, and you have 4 disks, it would probably be fastest to put 2 on front/2 on back or 3 on back/1 on front. This is because internally the front ports are likely a separate Root Hub than the back, meaning you can send twice as much data by using both than just 1. Use the following commands to determine the various paths on your machine.<br />
<br />
{{hc|USB Device Tree|$ lsusb -tv}}<br />
<br />
{{hc|PCI Device Tree|$ lspci -tv}}<br />
<br />
=== Partitioning ===<br />
<br />
Make sure that your partitions are [[Partitioning#Partition_alignment|properly aligned]].<br />
<br />
==== Multiple drives ====<br />
<br />
If you have multiple disks available, you can set them up as a software [[RAID]] for serious speed improvements.<br />
<br />
Creating [[swap]] on a separate disk can also help quite a bit, especially if your machine swaps frequently.<br />
<br />
==== Layout on HDDs ====<br />
<br />
If using a traditional spinning HDD, your partition layout can influence the system's performance. Sectors at the beginning of the drive (closer to the outside of the disk) are faster than those at the end. Also, a smaller partition requires less movements from the drive's head, and so speed up disk operations. Therefore, it is advised to create a small partition (10GB, more or less depending on your needs) only for your system, as near to the beginning of the drive as possible. Other data (pictures, videos) should be kept on a separate partition, and this is usually achieved by separating the home directory ({{ic|/home/''user''}}) from the system ({{ic|/}}).<br />
<br />
=== Choosing and tuning your filesystem ===<br />
<br />
Choosing the best filesystem for a specific system is very important because each has its own strengths. The [[File systems]] article provides a short summary of the most popular ones. You can also find relevant articles in [[:Category:File systems]].<br />
<br />
==== Mount options ====<br />
<br />
The [[fstab#atime options|noatime]] option is known to improve performance of the filesystem.<br />
<br />
Other mount options are filesystem specific, therefore see the relevant articles for the filesystems:<br />
<br />
* [[Ext3]]<br />
* [[Ext4#Improving performance]]<br />
* [[JFS Filesystem#Optimizations]]<br />
* [[XFS]]<br />
* [[Btrfs#Defragmentation]], [[Btrfs#Compression]], and {{man|5|btrfs}}<br />
* [[ZFS#Tuning]]<br />
<br />
===== Reiserfs =====<br />
<br />
The {{Ic|1=data=writeback}} mount option improves speed, but may corrupt data during power loss. The {{Ic|notail}} mount option increases the space used by the filesystem by about 5%, but also improves overall speed. You can also reduce disk load by putting the journal and data on separate drives. This is done when creating the filesystem: <br />
<br />
# mkreiserfs –j /dev/sd'''a1''' /dev/sd'''b1'''<br />
<br />
Replace {{ic|/dev/sd'''a1'''}} with the partition reserved for the journal, and {{ic|/dev/sd'''b1'''}} with the partition for data. You can learn more about reiserfs with this [http://www.funtoo.org/Funtoo_Filesystem_Guide,_Part_2 article].<br />
<br />
=== Tuning kernel parameters ===<br />
<br />
There are several key tunables affecting the performance of block devices, see [[sysctl#Virtual memory]] for more information.<br />
<br />
=== Input/output schedulers ===<br />
==== Background information ====<br />
The input/output ''(I/O)'' scheduler is the kernel component that decides in which order the block I/O operations are submitted to storage devices. It is useful to remind here some specifications of two main drive types because the goal of the I/O scheduler is to optimize the way these are able to deal with read requests:<br />
<br />
* An HDD has spinning disks and a head that moves physically to the required location. Therefore, random latency is quite high ranging between 3 and 12ms (whether it is a high end server drive or a laptop drive and bypassing the disk controller write buffer) while sequential access provides much higher throughput. The typical HDD throughput is about 200 I/O operations per second ''(IOPS)''.<br />
<br />
* An SSD does not have moving parts, random access is as fast as sequential one, typically under 0.1ms, and it can handle multiple concurrent requests. The typical SSD throughput is greater than 10,000 IOPS, which is more than needed in common workload situations.<br />
<br />
If there are many processes making I/O requests to different storage parts, thousands of IOPS can be generated while a typical HDD can handle only about 200 IOPS. There is a queue of requests that have to wait for access to the storage. This is where the I/O schedulers plays an optimization role.<br />
<br />
==== The scheduling algorithms ====<br />
<br />
One way to improve throughput is to linearize access: by ordering waiting requests by their logical address and grouping the closest ones. Historically this was the first Linux I/O scheduler called [[w:Elevator_algorithm|elevator]].<br />
<br />
One issue with the elevator algorithm is that it is not optimal for a process doing sequential access: reading a block of data, processing it for several microseconds then reading next block and so on. The elevator scheduler does not know that the process is about to read another block nearby and, thus, moves to another request at some other location. The [[w:Anticipatory_scheduling|anticipatory]] I/O scheduler overcomes the problem: it pauses for a few milliseconds in anticipation of another close-by read operation before dealing with another request.<br />
<br />
While these schedulers try to improve total throughput, they might leave some unlucky requests waiting for a very long time. As an example, imagine the majority of processes make requests at the beginning of the storage space while an unlucky process makes a request at the other end of storage. This potentially infinite postponement of the process is called starvation. To improve fairness, the [[w:Deadline_scheduler|deadline]] algorithm was developed. It has a queue ordered by address, similar to the elevator, but if some request sits in this queue for too long then it moves to an "expired" queue ordered by expire time. The scheduler checks the expire queue first and processes requests from there and only then moves to the elevator queue. Note that this fairness has a negative impact on overall throughput.<br />
<br />
The [[w:CFQ|Completely Fair Queuing ''(CFQ)'']] approaches the problem differently by allocating a timeslice and a number of allowed requests by queue depending on the priority of the process submitting them. It supports [[cgroup]] that allows to reserve some amount of I/O to a specific collection of processes. It is in particular useful for shared and cloud hosting: users who paid for some IOPS want to get their share whenever needed. Also, it idles at the end of synchronous I/O waiting for other nearby operations, taking over this feature from the ''anticipatory'' scheduler and bringing some enhancements. Both the ''anticipatory'' and the ''elevator'' schedulers were decommissioned from the Linux kernel replaced by the more advanced alternatives presented above.<br />
<br />
The [https://algo.ing.unimo.it/people/paolo/disk_sched/ Budget Fair Queuing ''(BFQ)''] is based on CFQ code and brings some enhancements. It does not grant the disk to each process for a fixed time-slice but assigns a "budget" measured in number of sectors to the process and uses heuristics. It is a relatively complex scheduler, it may be more adapted to rotational drives and slow SSDs because its high per-operation overhead, especially if associated with a slow CPU, can slow down fast devices. The objective of BFQ on personal systems is that for interactive tasks, the storage device is virtually as responsive as if it was idle. In its default configuration it focuses on delivering the lowest latency rather than achieving the maximum throughput.<br />
<br />
[https://lwn.net/Articles/720675/ Kyber] is a recent scheduler inspired by active queue management techniques used for network routing. The implementation is based on "tokens" that serve as a mechanism for limiting requests. A queuing token is required to allocate a request, this is used to prevent starvation of requests. A dispatch token is also needed and limits the operations of a certain priority on a given device. Finally, a target read latency is defined and the scheduler tunes itself to reach this latency goal. The implementation of the algorithm is relatively simple and it is deemed efficient for fast devices.<br />
<br />
==== Kernel's I/O schedulers ====<br />
While some of the early algorithms have now been decommissioned, the official Linux kernel supports a number of I/O schedulers which can be split into two categories:<br />
<br />
*The '''single-queue schedulers''' are available by default with the kernel:<br />
**[[w:NOOP_scheduler|NOOP]] is the simplest scheduler, it inserts all incoming I/O requests into a simple FIFO queue and implements request merging. In this algorithm, there is no re-ordering of the request based on the sector number. Therefore it can be used if the ordering is dealt with at another layer, at the device level for example, or if it does not matter, for SSDs for instance.<br />
**''Deadline''<br />
**''CFQ''<br />
*The '''multi-queue scheduler''' mode can be activated at boot time as described in [[#Changing I/O scheduler]]. This [https://www.thomas-krenn.com/en/wiki/Linux_Multi-Queue_Block_IO_Queueing_Mechanism_(blk-mq) Multi-Queue Block I/O Queuing Mechanism ''(blk-mq)''] maps I/O queries to multiple queues, the tasks are distributed across threads and therefore CPU cores. Within this framework the following schedulers are available:<br />
**''None'', no queuing algorithm is applied.<br />
**''mq-deadline'' is the adaptation of the deadline scheduler to multi-threading.<br />
**''Kyber''<br />
**''BFQ''<br />
:{{Warning|1=The multi-queue scheduler framework and its related algorithms are under active development, the state of some issues can be seen in the [https://groups.google.com/forum/#!forum/bfq-iosched bfq forum] and {{Bug|57496}}. In particular, users reported USB drives to stop working - [https://bbs.archlinux.org/viewtopic.php?id=234070][https://bbs.archlinux.org/viewtopic.php?id=234363][https://bbs.archlinux.org/viewtopic.php?id=236291].}}<br />
{{Note|The best choice of scheduler depends on both the device and the exact nature of the workload. Also, the throughput in MB/s is not the only measure of performance: deadline or fairness deteriorate the overall throughput but improve system responsiveness.}}<br />
<br />
==== Changing I/O scheduler ====<br />
{{Note|The block multi-queue ''(blk-mq)'' mode must be enabled at boot time to be able to access the latest ''BFQ'' and ''Kyber'' schedulers. This is done by adding {{ic|1=scsi_mod.use_blk_mq=1}} to the [[kernel parameters]]. The single-queue schedulers are no longer available once in this mode.}}<br />
To see the available schedulers for a device and the active one, in brackets:<br />
{{hc|$ cat /sys/block/'''''sda'''''/queue/scheduler|<br />
mq-deadline kyber [bfq] none}}<br />
or for all devices:<br />
{{hc|$ cat /sys/block/'''sd*'''/queue/scheduler|<br />
mq-deadline kyber [bfq] none<br />
[mq-deadline] kyber bfq none<br />
mq-deadline kyber [bfq] none}}<br />
<br />
To change the active I/O scheduler to ''bfq'' for device ''sda'', use:<br />
<br />
# echo '''''bfq''''' > /sys/block/'''''sda'''''/queue/scheduler<br />
SSDs can handle many IOPS and tend to perform best with simple algorithm like ''noop'' or ''deadline'' while ''BFQ'' is well adapted to HDDs. The process to change I/O scheduler, depending on whether the disk is rotating or not can be automated and persist across reboots with a [[udev]] rule like this:<br />
<br />
{{hc|/etc/udev/rules.d/60-ioschedulers.rules|2=<br />
# set scheduler for non-rotating disks<br />
ACTION=="add{{!}}change", KERNEL=="sd[a-z]{{!}}mmcblk[0-9]*{{!}}nvme[0-9]*", ATTR{queue/rotational}=="0", ATTR{queue/scheduler}="mq-deadline"<br />
# set scheduler for rotating disks<br />
ACTION=="add{{!}}change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="1", ATTR{queue/scheduler}="bfq" <br />
}}<br />
<br />
Save it, then reboot or force [[Udev#Loading_new_rules|reload/trigger]] of the rules.<br />
<br />
==== Tuning I/O scheduler ====<br />
<br />
Each of the kernel's I/O scheduler has its own tunables, such as the latency time, the expiry time or the FIFO parameters. They are helpful in adjusting the algorithm to a particular combination of device and workload. This is typically to achieve a higher throughput or a lower latency for a given utilization.<br />
The tunables and their description can be found within the [https://www.kernel.org/doc/Documentation/block/ kernel documentation files].<br />
<br />
To list the available tunables for a device, in the example below ''sdb'' which is using ''deadline'', use:<br />
{{hc|$ ls /sys/block/'''''sdb'''''/queue/iosched|<br />
fifo_batch front_merges read_expire write_expire writes_starved}}<br />
<br />
To improve ''deadline'''s throughput at the cost of latency, one can increase {{ic|fifo_batch}} with the command:<br />
<br />
{{bc|# echo ''32'' > /sys/block/'''''sdb'''''/queue/iosched/'''fifo_batch'''}}<br />
<br />
=== Power management configuration ===<br />
When dealing with traditional rotational disks (HDD's) you may want to [[Hdparm#Power_management_configuration|lower or disable power saving features]] completely.<br />
<br />
=== Reduce disk reads/writes ===<br />
<br />
Avoiding unnecessary access to slow storage drives is good for performance and also increasing lifetime of the devices, although on modern hardware the difference in life expectancy is usually negligible.<br />
<br />
{{Note|A 32GB SSD with a mediocre 10x write amplification factor, a standard 10000 write/erase cycle, and '''10GB of data written per day''', would get an '''8 years life expectancy'''. It gets better with bigger SSDs and modern controllers with less write amplification. Also compare [http://techreport.com/review/25889/the-ssd-endurance-experiment-500tb-update] when considering whether any particular strategy to limit disk writes is actually needed.}}<br />
<br />
==== Show disk writes ====<br />
<br />
The {{Pkg|iotop}} package can sort by disk writes, and show how much and how frequently programs are writing to the disk. See {{man|8|iotop}} for details.<br />
<br />
==== Relocate files to tmpfs ====<br />
<br />
Relocate files, such as your browser profile, to a [[tmpfs]] file system, for improvements in application response as all the files are now stored in RAM:<br />
<br />
* Refer to [[Profile-sync-daemon]] for syncing browser profiles. Certain browsers might need special attention, see e.g. [[Firefox on RAM]].<br />
* Refer to [[Anything-sync-daemon]] for syncing any specified folder.<br />
* Refer to [[Makepkg#Improving compile times]] for improving compile times when building packages.<br />
<br />
==== Compiling in tmpfs ====<br />
<br />
See [[Makepkg#Building from files in memory]].<br />
<br />
==== Optimize the filesystem ====<br />
<br />
[[Filesystems]] may provide performance improvements instructions for each filesystem, e.g. [[Ext4#Improving performance]].<br />
<br />
==== Swap space ====<br />
<br />
See [[Swap#Performance]].<br />
<br />
=== Storage I/O scheduling with ionice ===<br />
<br />
Many tasks such as backups do not rely on a short storage I/O delay or high storage I/O bandwidth to fulfil their task, they can be classified as background tasks.<br />
On the other hand quick I/O is necessary for good UI responsiveness on the desktop.<br />
Therefore it is beneficial to reduce the amount of storage bandwidth available to background tasks, whilst other tasks are in need of storage I/O. This can be achieved by making use of the linux I/O scheduler CFQ, which allows setting different priorities for processes.<br />
<br />
The I/O priority of a background process can be reduced to the "Idle" level by starting it with<br />
<br />
# ionice -c 3 command<br />
<br />
See {{man|1|ionice}} and [https://www.cyberciti.biz/tips/linux-set-io-scheduling-class-priority.html] for more information.<br />
<br />
== CPU ==<br />
<br />
=== Overclocking ===<br />
<br />
[[w:Overclocking|Overclocking]] improves the computational performance of the CPU by increasing its peak clock frequency. The ability to overclock depends on the combination of CPU model and motherboard model. It is most frequently done through the BIOS. Overclocking also has disadvantages and risks. It is neither recommended nor discouraged here.<br />
<br />
Many Intel chips will not correctly report their clock frequency to acpi_cpufreq and most other utilities. This will result in excessive messages in dmesg, which can be avoided by unloading and blacklisting the kernel module {{ic|acpi_cpufreq}}.<br />
To read their clock speed use ''i7z'' from the {{Pkg|i7z}} package. To check for correct operation of an overclocked CPU, it is recommended to do [[stress testing]].<br />
<br />
=== Frequency scaling ===<br />
<br />
See [[CPU frequency scaling]].<br />
<br />
=== Alternative CPU scheduler ===<br />
<br />
{{Expansion|MuQSS is not the only alternative scheduler.}}<br />
<br />
The default CPU scheduler in the mainline Linux kernel is [[w:Completely_Fair_Scheduler|CFS]].<br />
<br />
An alternative scheduler designed to be used on desktop computers is MuQSS, developed by [http://users.tpg.com.au/ckolivas/kernel/ Con Kolivas], which is focused on desktop interactivity and responsiveness. MuQSS is available either as a stand-alone patch or as part of a wider patchset, the '''-ck''' patchset. See [[Linux-ck]] and [[Linux-pf]] for more information on the patchset.<br />
<br />
=== Real-time kernel ===<br />
<br />
It may not be obvious but some applications such as running a TV tuner card at full HD resolution (1080p), may benefit from using the real-time linux kernel. Either compiling [https://aur.archlinux.org/packages/linux-rt/ linux-rt from aur] or adding the mirror for the coderkun-aur-audio [https://wiki.archlinux.org/index.php/Unofficial_user_repositories Unofficial user repository] to pacman.conf and installing linux-rt will use a real time scheduler instead of the stock scheduler. It may prevent a bottleneck in the hardware possibly resulting in premature hardware failure. This may especially be true with poorly designed thermal processor sensors on AMD CPUs.<br />
<br />
=== Adjusting priorities of processes ===<br />
<br />
==== Ananicy ====<br />
<br />
[https://github.com/Nefelim4ag/Ananicy Ananicy] is a daemon, available in the {{AUR|ananicy-git}} package, for auto adjusting the nice levels of executables. The nice level represents the priority of the executable when allocating CPU resources.<br />
<br />
==== cgroups ====<br />
<br />
See [[cgroups]].<br />
<br />
==== Cpulimit ====<br />
<br />
[https://github.com/opsengine/cpulimit Cpulimit] is a program to limit the CPU usage percentage of a specific process. After installing {{Pkg|cpulimit}}, you may limit the CPU usage of a processes' PID using a scale of 0 to 100 times the number of CPU cores that the computer has. For example, with eight CPU cores the precentage range will be 0 to 800. Usage:<br />
<br />
$ cpulimit -l 50 -p 5081<br />
<br />
=== irqbalance ===<br />
<br />
The purpose of {{Pkg|irqbalance}} is distribute hardware interrupts across processors on a multiprocessor system in order to increase performance. It can be [[systemd#Using units|controlled]] by the provided {{ic|irqbalance.service}}.<br />
<br />
== Graphics ==<br />
<br />
As with CPUs, overclocking can directly improve performance, but is generally recommended against. There are several packages in the [[AUR]], such as {{AUR|amdoverdrivectrl}} (ATI) and {{AUR|nvclock}} (NVIDIA).<br />
<br />
=== Xorg configuration ===<br />
<br />
Graphics performance may depend on the settings in {{man|5|xorg.conf}}; see the [[NVIDIA]], [[ATI]] and [[Intel]] articles. Improper settings may stop Xorg from working, so caution is advised.<br />
<br />
=== Mesa configuration ===<br />
<br />
The performance of the Mesa drivers can be configured via [https://dri.freedesktop.org/wiki/ConfigurationInfrastructure/ drirc]. GUI configuration tools are available:<br />
* {{App|adriconf (Advanced DRI Configurator)|Tool to set options and configure applications using the standard drirc file used by the Mesa drivers.|https://github.com/jlHertel/adriconf/|{{AUR|adriconf}}}}<br />
* {{App|DRIconf|Configuration applet for the Direct Rendering Infrastructure. It allows customizing performance and visual quality settings of OpenGL drivers on a per-driver, per-screen and/or per-application level.|https://dri.freedesktop.org/wiki/DriConf/|{{Pkg|driconf}}}}<br />
<br />
=== Overclocking with amdgpu ===<br />
<br />
{{Move|AMDGPU|There is a dedicated page.}}<br />
<br />
Since Linux 4.17, it is possible to adjust clocks and voltages of the graphics card via {{Ic|1=/sys/class/drm/card0/device/pp_od_clk_voltage}}. It is however required to unlock access to it in sysfs by appending the boot parameter {{Ic|1=amdgpu.ppfeaturemask=0xffffffff}}.<br />
<br />
After this, the range of allowed values must be increased to allow higher clocks than used by default. To allow the maximum GPU clock to be increased by e.g. up to 2%, run:<br />
echo "2" > /sys/class/drm/card0/device/pp_sclk_od<br />
{{Note|Running cat {{Ic|/sys/class/drm/card0/device/pp_sclk_od}} does always return either 1 or 0, no matter the value added to it via {{Ic|echo}}.}}<br />
Unlike with previous kernel versions, this alone doesn't lead to a higher clock. The values in {{Ic|pp_od_clk_voltage}} for the pstates have to be adjusted as well. It's a good idea to get the default values as a guidance by simply reading the file. In this example, the default clock is 1196MHz and a range increase by 2% allows up to 1219MHz.<br />
<br />
To set the GPU clock for the maximum pstate 7 on a Polaris GPU to 1209MHz and 900mV voltage, run:<br />
# echo "s 7 1209 900" > /sys/class/drm/card0/device/pp_od_clk_voltage<br />
{{Warning|1=Double check the entered values, as mistakes might instantly cause fatal hardware damage!}}<br />
To apply, run<br />
# echo "c" > /sys/class/drm/card0/device/pp_od_clk_voltage<br />
To check if it worked out, read out clocks and voltage under 3D load:<br />
# watch -n 0.5 cat /sys/kernel/debug/dri/0/amdgpu_pm_info<br />
You can reset to the default values using this:<br />
# echo "r" > /sys/class/drm/card0/device/pp_od_clk_voltage<br />
<br />
To set the allowed maximum power consumption of the GPU to e.g. 50 Watts, run<br />
# echo 50000000 > /sys/class/drm/card0/device/hwmon/hwmon0/power1_cap<br />
If the video card bios doesn't provide a maximum value above the default setting, you can only decrease the power limit, but not increase.<br />
{{Note|The above procedure was tested with a Polaris RX 560 card. There may be different behavior or bugs with different GPUs.}}<br />
<br />
== RAM and swap ==<br />
<br />
=== Clock frequency and timings ===<br />
<br />
RAM can run at different clock frequencies and timings, which can be configured in the BIOS. Memory performance depends on both values. Selecting the highest preset presented by the BIOS usually improves the performance over the default setting. Note that increasing the frequency to values not supported by both motherboard and RAM vendor is overclocking, and similar risks and disadvantages apply, see [[#Overclocking]].<br />
<br />
=== Root on RAM overlay ===<br />
<br />
If running off a slow writing medium (USB, spinning HDDs) and storage requirements are low, the root may be run on a RAM overlay ontop of read only root (on disk). This can vastly improve performance at the cost of a limited writable space to root. See {{AUR|liveroot}}.<br />
<br />
=== Zram or zswap ===<br />
<br />
The [https://www.kernel.org/doc/Documentation/blockdev/zram.txt zram] kernel module (previously called '''compcache''') provides a compressed block device in RAM. If you use it as swap device, the RAM can hold much more information but uses more CPU. Still, it is much quicker than swapping to a hard drive. If a system often falls back to swap, this could improve responsiveness. Using zram is also a good way to reduce disk read/write cycles due to swap on SSDs.<br />
<br />
Similar benefits (at similar costs) can be achieved using [[zswap]] rather than zram. The two are generally similar in intent although not operation: zswap operates as a compressed RAM cache and neither requires (nor permits) extensive userspace configuration.<br />
<br />
Example: To set up one lz4 compressed zram device with 32GiB capacity and a higher-than-normal priority (only for the current session):<br />
<br />
# modprobe zram<br />
# echo lz4 > /sys/block/zram0/comp_algorithm<br />
# echo 32G > /sys/block/zram0/disksize<br />
# mkswap --label zram0 /dev/zram0<br />
# swapon --priority 100 /dev/zram0<br />
<br />
To disable it again, either reboot or run<br />
<br />
# swapoff /dev/zram0<br />
# rmmod zram<br />
<br />
A detailed explanation of all steps, options and potential problems is provided in the official documentation of the module [https://www.kernel.org/doc/Documentation/blockdev/zram.txt here].<br />
<br />
The {{Pkg|systemd-swap}} package provides a {{ic|systemd-swap.service}} unit to automatically initialize zram devices. Configuration is possible in {{ic|/etc/systemd/swap.conf}}.<br />
<br />
The package {{AUR|zramswap}} provides an automated script for setting up such swap devices with optimal settings for your system (such as RAM size and CPU core number). The script creates one zram device per CPU core with a total space equivalent to the RAM available, so you will have a compressed swap with higher priority than regular swap, which will utilize multiple CPU cores for compressing data. To do this automatically on every boot, [[enable]] {{ic|zramswap.service}}.<br />
<br />
==== Swap on zRAM using a udev rule ====<br />
<br />
The example below describes how to set up swap on zRAM automatically at boot with a single udev rule. No extra package should be needed to make this work.<br />
<br />
First, enable the module:<br />
<br />
{{hc|/etc/modules-load.d/zram.conf|<nowiki><br />
zram<br />
</nowiki>}}<br />
<br />
Configure the number of /dev/zram nodes you need.<br />
<br />
{{hc|/etc/modprobe.d/zram.conf|<nowiki><br />
options zram num_devices=2<br />
</nowiki>}}<br />
<br />
Create the udev rule as shown in the example.<br />
<br />
{{hc|/etc/udev/rules.d/99-zram.rules|<nowiki><br />
KERNEL=="zram0", ATTR{disksize}="512M" RUN="/usr/bin/mkswap /dev/zram0", TAG+="systemd"<br />
KERNEL=="zram1", ATTR{disksize}="512M" RUN="/usr/bin/mkswap /dev/zram1", TAG+="systemd"<br />
</nowiki>}}<br />
<br />
Add /dev/zram to your fstab.<br />
<br />
{{hc|/etc/fstab|<nowiki><br />
/dev/zram0 none swap defaults 0 0<br />
/dev/zram1 none swap defaults 0 0<br />
</nowiki>}}<br />
<br />
=== Using the graphic card's RAM ===<br />
<br />
In the unlikely case that you have very little RAM and a surplus of video RAM, you can use the latter as swap. See [[Swap on video ram]].<br />
<br />
== Network ==<br />
<br />
* Kernel networking: see [[Sysctl#Improving performance]]<br />
* NIC: see [[Network configuration#Set device MTU and queue length]]<br />
* DNS: consider using a caching DNS resolver, see [[Domain name resolution#Resolvers]]<br />
* Samba: see [[Samba#Improve throughput]]<br />
<br />
== Watchdogs ==<br />
According to [[wikipedia:Watchdog_timer]]:<br />
:A watchdog timer [...] is an electronic timer that is used to detect and recover from computer malfunctions. During normal operation, the computer regularly resets the watchdog timer [...]. If, [...], the computer fails to reset the watchdog, the timer will elapse and generate a timeout signal [...] used to initiate corrective [...] actions [...] typically include placing the computer system in a safe state and restoring normal system operation.<br />
<br />
Many users need this feature due to their system's mission-critical role (i.e. servers), or because of the lack of power reset (i.e. embedded devices). Thus, this feature is required for a good operation in some situations. On the other hand, normal users (i.e. desktop and laptop) do not need this feature and can disable it.<br />
<br />
To disable watchdog timers (both software and hardware), append {{ic|nowatchdog}} to your boot parameters.<br />
<br />
To check the new configuration do:<br />
# cat /proc/sys/kernel/watchdog<br />
or use:<br />
# wdctl<br />
<br />
After you disabled watchdogs, you can ''optionally'' avoid the loading of the module responsible of the hardware watchdog, too. Do it by [[blacklisting]] the related module, e.g. {{ic|iTCO_wdt}}.<br />
<br />
{{Note|1=Some users [https://bbs.archlinux.org/viewtopic.php?id=221239 reported] the {{ic|nowatchdog}} parameter does not work as expected but they have successfully disabled the watchdog (at least the hardware one) by blacklisting the above-mentioned module.}}<br />
<br />
Either action will speed up your boot and shutdown, because one less module is loaded. Additionally disabling watchdog timers increases performance and [[Power_management#Disabling_NMI_watchdog|lowers power consumption]].<br />
<br />
See [https://bbs.archlinux.org/viewtopic.php?id=163768], [https://bbs.archlinux.org/viewtopic.php?id=165834], [http://0pointer.de/blog/projects/watchdog.html], and [https://www.kernel.org/doc/Documentation/watchdog/watchdog-parameters.txt] for more information.<br />
<br />
== See also ==<br />
<br />
* [https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Performance_Tuning_Guide/index.html Red Hat Performance Tuning Guide]<br />
* [https://www.thomas-krenn.com/en/wiki/Linux_Performance_Measurements_using_vmstat Linux Performance Measurements using vmstat]</div>Holycowhttps://wiki.archlinux.org/index.php?title=Improving_performance&diff=542190Improving performance2018-09-20T06:13:09Z<p>Holycow: /* Real-time kernel */ unofficial user repository link</p>
<hr />
<div>[[Category:Hardware]]<br />
[[Category:System administration]]<br />
[[ar:Improving performance]]<br />
[[es:Improving performance]]<br />
[[ja:パフォーマンスの最大化]]<br />
[[ru:Improving performance]]<br />
[[zh-hans:Improving performance]]<br />
{{Related articles start}}<br />
{{Related|Improving performance/Boot process}}<br />
{{Related|Pacman/Tips and tricks#Performance}}<br />
{{Related|SSH#Speeding up SSH}}<br />
{{Related|Openoffice#Speed up OpenOffice}}<br />
{{Related|Laptop}}<br />
{{Related|Preload}}<br />
{{Related|Cpulimit}}<br />
{{Related articles end}}<br />
This article provides information on basic system diagnostics relating to performance as well as steps that may be taken to reduce resource consumption or to otherwise optimize the system with the end-goal being either perceived or documented improvements to a system's performance.<br />
<br />
== The basics ==<br />
<br />
=== Know your system ===<br />
<br />
The best way to tune a system is to target bottlenecks, or subsystems which limit overall speed. The system specifications can help identify them.<br />
<br />
* If the computer becomes slow when large applications (such as OpenOffice.org and Firefox) run at the same time, check if the amount of RAM is sufficient. Use the following command, and check the "available" column:<br />
<br />
$ free -h<br />
<br />
* If boot time is slow, and applications take a long time to load at first launch (only), then the hard drive is likely to blame. The speed of a hard drive can be measured with the {{ic|hdparm}} command:<br />
{{Note|{{Pkg|hdparm}} indicates only the pure read speed of a hard drive, and is not a valid benchmark. A value higher than 40MB/s (while idle) is however acceptable on an average system.}}<br />
<br />
# hdparm -t /dev/sdX<br />
<br />
* If CPU load is consistently high even with enough RAM available, then try to lower CPU usage by disabling running [[daemons]] and/or processes. This can be monitored in several ways, for example with {{Pkg|htop}}, {{ic|pstree}} or any other [[List_of_applications#System_monitoring|system monitoring]] tool:<br />
<br />
$ htop<br />
<br />
* If applications using direct rendering are slow (i.e those which use the GPU, such as video players, games, or even a [[window manager]]), then improving GPU performance should help. The first step is to verify if direct rendering is actually enabled. This is indicated by the {{ic|glxinfo}} command, part of the {{Pkg|mesa-demos}} package:<br />
{{hc|<nowiki>$ glxinfo | grep direct</nowiki>|<br />
direct rendering: Yes<br />
}}<br />
<br />
* When running a [[desktop environment]], disabling (unused) visual desktop effects may reduce GPU usage. Use a more lightweight environment or create a [[Desktop_environment#Custom_environments|custom environment]] if the current does not meet the hardware and/or personal requirements.<br />
<br />
=== Benchmarking ===<br />
<br />
The effects of optimization are often difficult to judge. They can however be measured by [[benchmarking]] tools.<br />
<br />
== Storage devices ==<br />
<br />
=== Multiple hardware paths ===<br />
<br />
{{Style|Subjective writing}}<br />
<br />
An internal hardware path is how the storage device is connected to your motherboard. There are different ways to connect to the motherboard such as TCP/IP through a NIC, plugged in directly using PCIe/PCI, Firewire, Raid Card, USB, etc. By spreading your storage devices across these multiple connection points you maximize the capabilities of your motherboard, for example 6 hard-drives connected via USB would be much much slower than 3 over USB and 3 over Firewire. The reason is that each entry path into the motherboard is like a pipe, and there is a set limit to how much can go through that pipe at any one time. The good news is that the motherboard usually has several pipes.<br />
<br />
More Examples<br />
<br />
# Directly to the motherboard using pci/PCIe/ata<br />
# Using an external enclosure to house the disk over USB/Firewire<br />
# Turn the device into a network storage device by connecting over tcp/ip<br />
<br />
Note also that if you have a 2 USB ports on the front of your machine, and 4 USB ports on the back, and you have 4 disks, it would probably be fastest to put 2 on front/2 on back or 3 on back/1 on front. This is because internally the front ports are likely a separate Root Hub than the back, meaning you can send twice as much data by using both than just 1. Use the following commands to determine the various paths on your machine.<br />
<br />
{{hc|USB Device Tree|$ lsusb -tv}}<br />
<br />
{{hc|PCI Device Tree|$ lspci -tv}}<br />
<br />
=== Partitioning ===<br />
<br />
Make sure that your partitions are [[Partitioning#Partition_alignment|properly aligned]].<br />
<br />
==== Multiple drives ====<br />
<br />
If you have multiple disks available, you can set them up as a software [[RAID]] for serious speed improvements.<br />
<br />
Creating [[swap]] on a separate disk can also help quite a bit, especially if your machine swaps frequently.<br />
<br />
==== Layout on HDDs ====<br />
<br />
If using a traditional spinning HDD, your partition layout can influence the system's performance. Sectors at the beginning of the drive (closer to the outside of the disk) are faster than those at the end. Also, a smaller partition requires less movements from the drive's head, and so speed up disk operations. Therefore, it is advised to create a small partition (10GB, more or less depending on your needs) only for your system, as near to the beginning of the drive as possible. Other data (pictures, videos) should be kept on a separate partition, and this is usually achieved by separating the home directory ({{ic|/home/''user''}}) from the system ({{ic|/}}).<br />
<br />
=== Choosing and tuning your filesystem ===<br />
<br />
Choosing the best filesystem for a specific system is very important because each has its own strengths. The [[File systems]] article provides a short summary of the most popular ones. You can also find relevant articles in [[:Category:File systems]].<br />
<br />
==== Mount options ====<br />
<br />
The [[fstab#atime options|noatime]] option is known to improve performance of the filesystem.<br />
<br />
Other mount options are filesystem specific, therefore see the relevant articles for the filesystems:<br />
<br />
* [[Ext3]]<br />
* [[Ext4#Improving performance]]<br />
* [[JFS Filesystem#Optimizations]]<br />
* [[XFS]]<br />
* [[Btrfs#Defragmentation]], [[Btrfs#Compression]], and {{man|5|btrfs}}<br />
* [[ZFS#Tuning]]<br />
<br />
===== Reiserfs =====<br />
<br />
The {{Ic|1=data=writeback}} mount option improves speed, but may corrupt data during power loss. The {{Ic|notail}} mount option increases the space used by the filesystem by about 5%, but also improves overall speed. You can also reduce disk load by putting the journal and data on separate drives. This is done when creating the filesystem: <br />
<br />
# mkreiserfs –j /dev/sd'''a1''' /dev/sd'''b1'''<br />
<br />
Replace {{ic|/dev/sd'''a1'''}} with the partition reserved for the journal, and {{ic|/dev/sd'''b1'''}} with the partition for data. You can learn more about reiserfs with this [http://www.funtoo.org/Funtoo_Filesystem_Guide,_Part_2 article].<br />
<br />
=== Tuning kernel parameters ===<br />
<br />
There are several key tunables affecting the performance of block devices, see [[sysctl#Virtual memory]] for more information.<br />
<br />
=== Input/output schedulers ===<br />
==== Background information ====<br />
The input/output ''(I/O)'' scheduler is the kernel component that decides in which order the block I/O operations are submitted to storage devices. It is useful to remind here some specifications of two main drive types because the goal of the I/O scheduler is to optimize the way these are able to deal with read requests:<br />
<br />
* An HDD has spinning disks and a head that moves physically to the required location. Therefore, random latency is quite high ranging between 3 and 12ms (whether it is a high end server drive or a laptop drive and bypassing the disk controller write buffer) while sequential access provides much higher throughput. The typical HDD throughput is about 200 I/O operations per second ''(IOPS)''.<br />
<br />
* An SSD does not have moving parts, random access is as fast as sequential one, typically under 0.1ms, and it can handle multiple concurrent requests. The typical SSD throughput is greater than 10,000 IOPS, which is more than needed in common workload situations.<br />
<br />
If there are many processes making I/O requests to different storage parts, thousands of IOPS can be generated while a typical HDD can handle only about 200 IOPS. There is a queue of requests that have to wait for access to the storage. This is where the I/O schedulers plays an optimization role.<br />
<br />
==== The scheduling algorithms ====<br />
<br />
One way to improve throughput is to linearize access: by ordering waiting requests by their logical address and grouping the closest ones. Historically this was the first Linux I/O scheduler called [[w:Elevator_algorithm|elevator]].<br />
<br />
One issue with the elevator algorithm is that it is not optimal for a process doing sequential access: reading a block of data, processing it for several microseconds then reading next block and so on. The elevator scheduler does not know that the process is about to read another block nearby and, thus, moves to another request at some other location. The [[w:Anticipatory_scheduling|anticipatory]] I/O scheduler overcomes the problem: it pauses for a few milliseconds in anticipation of another close-by read operation before dealing with another request.<br />
<br />
While these schedulers try to improve total throughput, they might leave some unlucky requests waiting for a very long time. As an example, imagine the majority of processes make requests at the beginning of the storage space while an unlucky process makes a request at the other end of storage. This potentially infinite postponement of the process is called starvation. To improve fairness, the [[w:Deadline_scheduler|deadline]] algorithm was developed. It has a queue ordered by address, similar to the elevator, but if some request sits in this queue for too long then it moves to an "expired" queue ordered by expire time. The scheduler checks the expire queue first and processes requests from there and only then moves to the elevator queue. Note that this fairness has a negative impact on overall throughput.<br />
<br />
The [[w:CFQ|Completely Fair Queuing ''(CFQ)'']] approaches the problem differently by allocating a timeslice and a number of allowed requests by queue depending on the priority of the process submitting them. It supports [[cgroup]] that allows to reserve some amount of I/O to a specific collection of processes. It is in particular useful for shared and cloud hosting: users who paid for some IOPS want to get their share whenever needed. Also, it idles at the end of synchronous I/O waiting for other nearby operations, taking over this feature from the ''anticipatory'' scheduler and bringing some enhancements. Both the ''anticipatory'' and the ''elevator'' schedulers were decommissioned from the Linux kernel replaced by the more advanced alternatives presented above.<br />
<br />
The [https://algo.ing.unimo.it/people/paolo/disk_sched/ Budget Fair Queuing ''(BFQ)''] is based on CFQ code and brings some enhancements. It does not grant the disk to each process for a fixed time-slice but assigns a "budget" measured in number of sectors to the process and uses heuristics. It is a relatively complex scheduler, it may be more adapted to rotational drives and slow SSDs because its high per-operation overhead, especially if associated with a slow CPU, can slow down fast devices. The objective of BFQ on personal systems is that for interactive tasks, the storage device is virtually as responsive as if it was idle. In its default configuration it focuses on delivering the lowest latency rather than achieving the maximum throughput.<br />
<br />
[https://lwn.net/Articles/720675/ Kyber] is a recent scheduler inspired by active queue management techniques used for network routing. The implementation is based on "tokens" that serve as a mechanism for limiting requests. A queuing token is required to allocate a request, this is used to prevent starvation of requests. A dispatch token is also needed and limits the operations of a certain priority on a given device. Finally, a target read latency is defined and the scheduler tunes itself to reach this latency goal. The implementation of the algorithm is relatively simple and it is deemed efficient for fast devices.<br />
<br />
==== Kernel's I/O schedulers ====<br />
While some of the early algorithms have now been decommissioned, the official Linux kernel supports a number of I/O schedulers which can be split into two categories:<br />
<br />
*The '''single-queue schedulers''' are available by default with the kernel:<br />
**[[w:NOOP_scheduler|NOOP]] is the simplest scheduler, it inserts all incoming I/O requests into a simple FIFO queue and implements request merging. In this algorithm, there is no re-ordering of the request based on the sector number. Therefore it can be used if the ordering is dealt with at another layer, at the device level for example, or if it does not matter, for SSDs for instance.<br />
**''Deadline''<br />
**''CFQ''<br />
*The '''multi-queue scheduler''' mode can be activated at boot time as described in [[#Changing I/O scheduler]]. This [https://www.thomas-krenn.com/en/wiki/Linux_Multi-Queue_Block_IO_Queueing_Mechanism_(blk-mq) Multi-Queue Block I/O Queuing Mechanism ''(blk-mq)''] maps I/O queries to multiple queues, the tasks are distributed across threads and therefore CPU cores. Within this framework the following schedulers are available:<br />
**''None'', no queuing algorithm is applied.<br />
**''mq-deadline'' is the adaptation of the deadline scheduler to multi-threading.<br />
**''Kyber''<br />
**''BFQ''<br />
:{{Warning|1=The multi-queue scheduler framework and its related algorithms are under active development, the state of some issues can be seen in the [https://groups.google.com/forum/#!forum/bfq-iosched bfq forum] and {{Bug|57496}}. In particular, users reported USB drives to stop working - [https://bbs.archlinux.org/viewtopic.php?id=234070][https://bbs.archlinux.org/viewtopic.php?id=234363][https://bbs.archlinux.org/viewtopic.php?id=236291].}}<br />
{{Note|The best choice of scheduler depends on both the device and the exact nature of the workload. Also, the throughput in MB/s is not the only measure of performance: deadline or fairness deteriorate the overall throughput but improve system responsiveness.}}<br />
<br />
==== Changing I/O scheduler ====<br />
{{Note|The block multi-queue ''(blk-mq)'' mode must be enabled at boot time to be able to access the latest ''BFQ'' and ''Kyber'' schedulers. This is done by adding {{ic|1=scsi_mod.use_blk_mq=1}} to the [[kernel parameters]]. The single-queue schedulers are no longer available once in this mode.}}<br />
To see the available schedulers for a device and the active one, in brackets:<br />
{{hc|$ cat /sys/block/'''''sda'''''/queue/scheduler|<br />
mq-deadline kyber [bfq] none}}<br />
or for all devices:<br />
{{hc|$ cat /sys/block/'''sd*'''/queue/scheduler|<br />
mq-deadline kyber [bfq] none<br />
[mq-deadline] kyber bfq none<br />
mq-deadline kyber [bfq] none}}<br />
<br />
To change the active I/O scheduler to ''bfq'' for device ''sda'', use:<br />
<br />
# echo '''''bfq''''' > /sys/block/'''''sda'''''/queue/scheduler<br />
SSDs can handle many IOPS and tend to perform best with simple algorithm like ''noop'' or ''deadline'' while ''BFQ'' is well adapted to HDDs. The process to change I/O scheduler, depending on whether the disk is rotating or not can be automated and persist across reboots with a [[udev]] rule like this:<br />
<br />
{{hc|/etc/udev/rules.d/60-ioschedulers.rules|2=<br />
# set scheduler for non-rotating disks<br />
ACTION=="add{{!}}change", KERNEL=="sd[a-z]{{!}}mmcblk[0-9]*{{!}}nvme[0-9]*", ATTR{queue/rotational}=="0", ATTR{queue/scheduler}="mq-deadline"<br />
# set scheduler for rotating disks<br />
ACTION=="add{{!}}change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="1", ATTR{queue/scheduler}="bfq" <br />
}}<br />
<br />
Save it, then reboot or force [[Udev#Loading_new_rules|reload/trigger]] of the rules.<br />
<br />
==== Tuning I/O scheduler ====<br />
<br />
Each of the kernel's I/O scheduler has its own tunables, such as the latency time, the expiry time or the FIFO parameters. They are helpful in adjusting the algorithm to a particular combination of device and workload. This is typically to achieve a higher throughput or a lower latency for a given utilization.<br />
The tunables and their description can be found within the [https://www.kernel.org/doc/Documentation/block/ kernel documentation files].<br />
<br />
To list the available tunables for a device, in the example below ''sdb'' which is using ''deadline'', use:<br />
{{hc|$ ls /sys/block/'''''sdb'''''/queue/iosched|<br />
fifo_batch front_merges read_expire write_expire writes_starved}}<br />
<br />
To improve ''deadline'''s throughput at the cost of latency, one can increase {{ic|fifo_batch}} with the command:<br />
<br />
{{bc|# echo ''32'' > /sys/block/'''''sdb'''''/queue/iosched/'''fifo_batch'''}}<br />
<br />
=== Power management configuration ===<br />
When dealing with traditional rotational disks (HDD's) you may want to [[Hdparm#Power_management_configuration|lower or disable power saving features]] completely.<br />
<br />
=== Reduce disk reads/writes ===<br />
<br />
Avoiding unnecessary access to slow storage drives is good for performance and also increasing lifetime of the devices, although on modern hardware the difference in life expectancy is usually negligible.<br />
<br />
{{Note|A 32GB SSD with a mediocre 10x write amplification factor, a standard 10000 write/erase cycle, and '''10GB of data written per day''', would get an '''8 years life expectancy'''. It gets better with bigger SSDs and modern controllers with less write amplification. Also compare [http://techreport.com/review/25889/the-ssd-endurance-experiment-500tb-update] when considering whether any particular strategy to limit disk writes is actually needed.}}<br />
<br />
==== Show disk writes ====<br />
<br />
The {{Pkg|iotop}} package can sort by disk writes, and show how much and how frequently programs are writing to the disk. See {{man|8|iotop}} for details.<br />
<br />
==== Relocate files to tmpfs ====<br />
<br />
Relocate files, such as your browser profile, to a [[tmpfs]] file system, for improvements in application response as all the files are now stored in RAM:<br />
<br />
* Refer to [[Profile-sync-daemon]] for syncing browser profiles. Certain browsers might need special attention, see e.g. [[Firefox on RAM]].<br />
* Refer to [[Anything-sync-daemon]] for syncing any specified folder.<br />
* Refer to [[Makepkg#Improving compile times]] for improving compile times when building packages.<br />
<br />
==== Compiling in tmpfs ====<br />
<br />
See [[Makepkg#Building from files in memory]].<br />
<br />
==== Optimize the filesystem ====<br />
<br />
[[Filesystems]] may provide performance improvements instructions for each filesystem, e.g. [[Ext4#Improving performance]].<br />
<br />
==== Swap space ====<br />
<br />
See [[Swap#Performance]].<br />
<br />
=== Storage I/O scheduling with ionice ===<br />
<br />
Many tasks such as backups do not rely on a short storage I/O delay or high storage I/O bandwidth to fulfil their task, they can be classified as background tasks.<br />
On the other hand quick I/O is necessary for good UI responsiveness on the desktop.<br />
Therefore it is beneficial to reduce the amount of storage bandwidth available to background tasks, whilst other tasks are in need of storage I/O. This can be achieved by making use of the linux I/O scheduler CFQ, which allows setting different priorities for processes.<br />
<br />
The I/O priority of a background process can be reduced to the "Idle" level by starting it with<br />
<br />
# ionice -c 3 command<br />
<br />
See {{man|1|ionice}} and [https://www.cyberciti.biz/tips/linux-set-io-scheduling-class-priority.html] for more information.<br />
<br />
== CPU ==<br />
<br />
=== Overclocking ===<br />
<br />
[[w:Overclocking|Overclocking]] improves the computational performance of the CPU by increasing its peak clock frequency. The ability to overclock depends on the combination of CPU model and motherboard model. It is most frequently done through the BIOS. Overclocking also has disadvantages and risks. It is neither recommended nor discouraged here.<br />
<br />
Many Intel chips will not correctly report their clock frequency to acpi_cpufreq and most other utilities. This will result in excessive messages in dmesg, which can be avoided by unloading and blacklisting the kernel module {{ic|acpi_cpufreq}}.<br />
To read their clock speed use ''i7z'' from the {{Pkg|i7z}} package. To check for correct operation of an overclocked CPU, it is recommended to do [[stress testing]].<br />
<br />
=== Frequency scaling ===<br />
<br />
See [[CPU frequency scaling]].<br />
<br />
=== Alternative CPU scheduler ===<br />
<br />
{{Expansion|MuQSS is not the only alternative scheduler.}}<br />
<br />
The default CPU scheduler in the mainline Linux kernel is [[w:Completely_Fair_Scheduler|CFS]].<br />
<br />
An alternative scheduler designed to be used on desktop computers is MuQSS, developed by [http://users.tpg.com.au/ckolivas/kernel/ Con Kolivas], which is focused on desktop interactivity and responsiveness. MuQSS is available either as a stand-alone patch or as part of a wider patchset, the '''-ck''' patchset. See [[Linux-ck]] and [[Linux-pf]] for more information on the patchset.<br />
<br />
=== Real-time kernel ===<br />
<br />
It may not be obvious but some applications such as running a TV tuner card at full HD resolution (1080p), may benefit from using the real-time linux kernel. Either compiling [https://aur.archlinux.org/packages/linux-rt/ linux-rt from aur] or adding the mirror for the coderkun-aur-audio [[unofficial repository]] to pacman.conf and installing linux-rt will use a real time scheduler instead of the stock scheduler. It may prevent a bottleneck in the hardware possibly resulting in premature hardware failure. This may especially be true with poorly designed thermal processor sensors on AMD CPUs.<br />
<br />
=== Adjusting priorities of processes ===<br />
<br />
==== Ananicy ====<br />
<br />
[https://github.com/Nefelim4ag/Ananicy Ananicy] is a daemon, available in the {{AUR|ananicy-git}} package, for auto adjusting the nice levels of executables. The nice level represents the priority of the executable when allocating CPU resources.<br />
<br />
==== cgroups ====<br />
<br />
See [[cgroups]].<br />
<br />
==== Cpulimit ====<br />
<br />
[https://github.com/opsengine/cpulimit Cpulimit] is a program to limit the CPU usage percentage of a specific process. After installing {{Pkg|cpulimit}}, you may limit the CPU usage of a processes' PID using a scale of 0 to 100 times the number of CPU cores that the computer has. For example, with eight CPU cores the precentage range will be 0 to 800. Usage:<br />
<br />
$ cpulimit -l 50 -p 5081<br />
<br />
=== irqbalance ===<br />
<br />
The purpose of {{Pkg|irqbalance}} is distribute hardware interrupts across processors on a multiprocessor system in order to increase performance. It can be [[systemd#Using units|controlled]] by the provided {{ic|irqbalance.service}}.<br />
<br />
== Graphics ==<br />
<br />
As with CPUs, overclocking can directly improve performance, but is generally recommended against. There are several packages in the [[AUR]], such as {{AUR|amdoverdrivectrl}} (ATI) and {{AUR|nvclock}} (NVIDIA).<br />
<br />
=== Xorg configuration ===<br />
<br />
Graphics performance may depend on the settings in {{man|5|xorg.conf}}; see the [[NVIDIA]], [[ATI]] and [[Intel]] articles. Improper settings may stop Xorg from working, so caution is advised.<br />
<br />
=== Mesa configuration ===<br />
<br />
The performance of the Mesa drivers can be configured via [https://dri.freedesktop.org/wiki/ConfigurationInfrastructure/ drirc]. GUI configuration tools are available:<br />
* {{App|adriconf (Advanced DRI Configurator)|Tool to set options and configure applications using the standard drirc file used by the Mesa drivers.|https://github.com/jlHertel/adriconf/|{{AUR|adriconf}}}}<br />
* {{App|DRIconf|Configuration applet for the Direct Rendering Infrastructure. It allows customizing performance and visual quality settings of OpenGL drivers on a per-driver, per-screen and/or per-application level.|https://dri.freedesktop.org/wiki/DriConf/|{{Pkg|driconf}}}}<br />
<br />
=== Overclocking with amdgpu ===<br />
<br />
{{Move|AMDGPU|There is a dedicated page.}}<br />
<br />
Since Linux 4.17, it is possible to adjust clocks and voltages of the graphics card via {{Ic|1=/sys/class/drm/card0/device/pp_od_clk_voltage}}. It is however required to unlock access to it in sysfs by appending the boot parameter {{Ic|1=amdgpu.ppfeaturemask=0xffffffff}}.<br />
<br />
After this, the range of allowed values must be increased to allow higher clocks than used by default. To allow the maximum GPU clock to be increased by e.g. up to 2%, run:<br />
echo "2" > /sys/class/drm/card0/device/pp_sclk_od<br />
{{Note|Running cat {{Ic|/sys/class/drm/card0/device/pp_sclk_od}} does always return either 1 or 0, no matter the value added to it via {{Ic|echo}}.}}<br />
Unlike with previous kernel versions, this alone doesn't lead to a higher clock. The values in {{Ic|pp_od_clk_voltage}} for the pstates have to be adjusted as well. It's a good idea to get the default values as a guidance by simply reading the file. In this example, the default clock is 1196MHz and a range increase by 2% allows up to 1219MHz.<br />
<br />
To set the GPU clock for the maximum pstate 7 on a Polaris GPU to 1209MHz and 900mV voltage, run:<br />
# echo "s 7 1209 900" > /sys/class/drm/card0/device/pp_od_clk_voltage<br />
{{Warning|1=Double check the entered values, as mistakes might instantly cause fatal hardware damage!}}<br />
To apply, run<br />
# echo "c" > /sys/class/drm/card0/device/pp_od_clk_voltage<br />
To check if it worked out, read out clocks and voltage under 3D load:<br />
# watch -n 0.5 cat /sys/kernel/debug/dri/0/amdgpu_pm_info<br />
You can reset to the default values using this:<br />
# echo "r" > /sys/class/drm/card0/device/pp_od_clk_voltage<br />
<br />
To set the allowed maximum power consumption of the GPU to e.g. 50 Watts, run<br />
# echo 50000000 > /sys/class/drm/card0/device/hwmon/hwmon0/power1_cap<br />
If the video card bios doesn't provide a maximum value above the default setting, you can only decrease the power limit, but not increase.<br />
{{Note|The above procedure was tested with a Polaris RX 560 card. There may be different behavior or bugs with different GPUs.}}<br />
<br />
== RAM and swap ==<br />
<br />
=== Clock frequency and timings ===<br />
<br />
RAM can run at different clock frequencies and timings, which can be configured in the BIOS. Memory performance depends on both values. Selecting the highest preset presented by the BIOS usually improves the performance over the default setting. Note that increasing the frequency to values not supported by both motherboard and RAM vendor is overclocking, and similar risks and disadvantages apply, see [[#Overclocking]].<br />
<br />
=== Root on RAM overlay ===<br />
<br />
If running off a slow writing medium (USB, spinning HDDs) and storage requirements are low, the root may be run on a RAM overlay ontop of read only root (on disk). This can vastly improve performance at the cost of a limited writable space to root. See {{AUR|liveroot}}.<br />
<br />
=== Zram or zswap ===<br />
<br />
The [https://www.kernel.org/doc/Documentation/blockdev/zram.txt zram] kernel module (previously called '''compcache''') provides a compressed block device in RAM. If you use it as swap device, the RAM can hold much more information but uses more CPU. Still, it is much quicker than swapping to a hard drive. If a system often falls back to swap, this could improve responsiveness. Using zram is also a good way to reduce disk read/write cycles due to swap on SSDs.<br />
<br />
Similar benefits (at similar costs) can be achieved using [[zswap]] rather than zram. The two are generally similar in intent although not operation: zswap operates as a compressed RAM cache and neither requires (nor permits) extensive userspace configuration.<br />
<br />
Example: To set up one lz4 compressed zram device with 32GiB capacity and a higher-than-normal priority (only for the current session):<br />
<br />
# modprobe zram<br />
# echo lz4 > /sys/block/zram0/comp_algorithm<br />
# echo 32G > /sys/block/zram0/disksize<br />
# mkswap --label zram0 /dev/zram0<br />
# swapon --priority 100 /dev/zram0<br />
<br />
To disable it again, either reboot or run<br />
<br />
# swapoff /dev/zram0<br />
# rmmod zram<br />
<br />
A detailed explanation of all steps, options and potential problems is provided in the official documentation of the module [https://www.kernel.org/doc/Documentation/blockdev/zram.txt here].<br />
<br />
The {{Pkg|systemd-swap}} package provides a {{ic|systemd-swap.service}} unit to automatically initialize zram devices. Configuration is possible in {{ic|/etc/systemd/swap.conf}}.<br />
<br />
The package {{AUR|zramswap}} provides an automated script for setting up such swap devices with optimal settings for your system (such as RAM size and CPU core number). The script creates one zram device per CPU core with a total space equivalent to the RAM available, so you will have a compressed swap with higher priority than regular swap, which will utilize multiple CPU cores for compressing data. To do this automatically on every boot, [[enable]] {{ic|zramswap.service}}.<br />
<br />
==== Swap on zRAM using a udev rule ====<br />
<br />
The example below describes how to set up swap on zRAM automatically at boot with a single udev rule. No extra package should be needed to make this work.<br />
<br />
First, enable the module:<br />
<br />
{{hc|/etc/modules-load.d/zram.conf|<nowiki><br />
zram<br />
</nowiki>}}<br />
<br />
Configure the number of /dev/zram nodes you need.<br />
<br />
{{hc|/etc/modprobe.d/zram.conf|<nowiki><br />
options zram num_devices=2<br />
</nowiki>}}<br />
<br />
Create the udev rule as shown in the example.<br />
<br />
{{hc|/etc/udev/rules.d/99-zram.rules|<nowiki><br />
KERNEL=="zram0", ATTR{disksize}="512M" RUN="/usr/bin/mkswap /dev/zram0", TAG+="systemd"<br />
KERNEL=="zram1", ATTR{disksize}="512M" RUN="/usr/bin/mkswap /dev/zram1", TAG+="systemd"<br />
</nowiki>}}<br />
<br />
Add /dev/zram to your fstab.<br />
<br />
{{hc|/etc/fstab|<nowiki><br />
/dev/zram0 none swap defaults 0 0<br />
/dev/zram1 none swap defaults 0 0<br />
</nowiki>}}<br />
<br />
=== Using the graphic card's RAM ===<br />
<br />
In the unlikely case that you have very little RAM and a surplus of video RAM, you can use the latter as swap. See [[Swap on video ram]].<br />
<br />
== Network ==<br />
<br />
* Kernel networking: see [[Sysctl#Improving performance]]<br />
* NIC: see [[Network configuration#Set device MTU and queue length]]<br />
* DNS: consider using a caching DNS resolver, see [[Domain name resolution#Resolvers]]<br />
* Samba: see [[Samba#Improve throughput]]<br />
<br />
== Watchdogs ==<br />
According to [[wikipedia:Watchdog_timer]]:<br />
:A watchdog timer [...] is an electronic timer that is used to detect and recover from computer malfunctions. During normal operation, the computer regularly resets the watchdog timer [...]. If, [...], the computer fails to reset the watchdog, the timer will elapse and generate a timeout signal [...] used to initiate corrective [...] actions [...] typically include placing the computer system in a safe state and restoring normal system operation.<br />
<br />
Many users need this feature due to their system's mission-critical role (i.e. servers), or because of the lack of power reset (i.e. embedded devices). Thus, this feature is required for a good operation in some situations. On the other hand, normal users (i.e. desktop and laptop) do not need this feature and can disable it.<br />
<br />
To disable watchdog timers (both software and hardware), append {{ic|nowatchdog}} to your boot parameters.<br />
<br />
To check the new configuration do:<br />
# cat /proc/sys/kernel/watchdog<br />
or use:<br />
# wdctl<br />
<br />
After you disabled watchdogs, you can ''optionally'' avoid the loading of the module responsible of the hardware watchdog, too. Do it by [[blacklisting]] the related module, e.g. {{ic|iTCO_wdt}}.<br />
<br />
{{Note|1=Some users [https://bbs.archlinux.org/viewtopic.php?id=221239 reported] the {{ic|nowatchdog}} parameter does not work as expected but they have successfully disabled the watchdog (at least the hardware one) by blacklisting the above-mentioned module.}}<br />
<br />
Either action will speed up your boot and shutdown, because one less module is loaded. Additionally disabling watchdog timers increases performance and [[Power_management#Disabling_NMI_watchdog|lowers power consumption]].<br />
<br />
See [https://bbs.archlinux.org/viewtopic.php?id=163768], [https://bbs.archlinux.org/viewtopic.php?id=165834], [http://0pointer.de/blog/projects/watchdog.html], and [https://www.kernel.org/doc/Documentation/watchdog/watchdog-parameters.txt] for more information.<br />
<br />
== See also ==<br />
<br />
* [https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Performance_Tuning_Guide/index.html Red Hat Performance Tuning Guide]<br />
* [https://www.thomas-krenn.com/en/wiki/Linux_Performance_Measurements_using_vmstat Linux Performance Measurements using vmstat]</div>Holycowhttps://wiki.archlinux.org/index.php?title=Improving_performance&diff=542189Improving performance2018-09-20T06:06:20Z<p>Holycow: /* Real-time kernel */ add aur link linux-rt</p>
<hr />
<div>[[Category:Hardware]]<br />
[[Category:System administration]]<br />
[[ar:Improving performance]]<br />
[[es:Improving performance]]<br />
[[ja:パフォーマンスの最大化]]<br />
[[ru:Improving performance]]<br />
[[zh-hans:Improving performance]]<br />
{{Related articles start}}<br />
{{Related|Improving performance/Boot process}}<br />
{{Related|Pacman/Tips and tricks#Performance}}<br />
{{Related|SSH#Speeding up SSH}}<br />
{{Related|Openoffice#Speed up OpenOffice}}<br />
{{Related|Laptop}}<br />
{{Related|Preload}}<br />
{{Related|Cpulimit}}<br />
{{Related articles end}}<br />
This article provides information on basic system diagnostics relating to performance as well as steps that may be taken to reduce resource consumption or to otherwise optimize the system with the end-goal being either perceived or documented improvements to a system's performance.<br />
<br />
== The basics ==<br />
<br />
=== Know your system ===<br />
<br />
The best way to tune a system is to target bottlenecks, or subsystems which limit overall speed. The system specifications can help identify them.<br />
<br />
* If the computer becomes slow when large applications (such as OpenOffice.org and Firefox) run at the same time, check if the amount of RAM is sufficient. Use the following command, and check the "available" column:<br />
<br />
$ free -h<br />
<br />
* If boot time is slow, and applications take a long time to load at first launch (only), then the hard drive is likely to blame. The speed of a hard drive can be measured with the {{ic|hdparm}} command:<br />
{{Note|{{Pkg|hdparm}} indicates only the pure read speed of a hard drive, and is not a valid benchmark. A value higher than 40MB/s (while idle) is however acceptable on an average system.}}<br />
<br />
# hdparm -t /dev/sdX<br />
<br />
* If CPU load is consistently high even with enough RAM available, then try to lower CPU usage by disabling running [[daemons]] and/or processes. This can be monitored in several ways, for example with {{Pkg|htop}}, {{ic|pstree}} or any other [[List_of_applications#System_monitoring|system monitoring]] tool:<br />
<br />
$ htop<br />
<br />
* If applications using direct rendering are slow (i.e those which use the GPU, such as video players, games, or even a [[window manager]]), then improving GPU performance should help. The first step is to verify if direct rendering is actually enabled. This is indicated by the {{ic|glxinfo}} command, part of the {{Pkg|mesa-demos}} package:<br />
{{hc|<nowiki>$ glxinfo | grep direct</nowiki>|<br />
direct rendering: Yes<br />
}}<br />
<br />
* When running a [[desktop environment]], disabling (unused) visual desktop effects may reduce GPU usage. Use a more lightweight environment or create a [[Desktop_environment#Custom_environments|custom environment]] if the current does not meet the hardware and/or personal requirements.<br />
<br />
=== Benchmarking ===<br />
<br />
The effects of optimization are often difficult to judge. They can however be measured by [[benchmarking]] tools.<br />
<br />
== Storage devices ==<br />
<br />
=== Multiple hardware paths ===<br />
<br />
{{Style|Subjective writing}}<br />
<br />
An internal hardware path is how the storage device is connected to your motherboard. There are different ways to connect to the motherboard such as TCP/IP through a NIC, plugged in directly using PCIe/PCI, Firewire, Raid Card, USB, etc. By spreading your storage devices across these multiple connection points you maximize the capabilities of your motherboard, for example 6 hard-drives connected via USB would be much much slower than 3 over USB and 3 over Firewire. The reason is that each entry path into the motherboard is like a pipe, and there is a set limit to how much can go through that pipe at any one time. The good news is that the motherboard usually has several pipes.<br />
<br />
More Examples<br />
<br />
# Directly to the motherboard using pci/PCIe/ata<br />
# Using an external enclosure to house the disk over USB/Firewire<br />
# Turn the device into a network storage device by connecting over tcp/ip<br />
<br />
Note also that if you have a 2 USB ports on the front of your machine, and 4 USB ports on the back, and you have 4 disks, it would probably be fastest to put 2 on front/2 on back or 3 on back/1 on front. This is because internally the front ports are likely a separate Root Hub than the back, meaning you can send twice as much data by using both than just 1. Use the following commands to determine the various paths on your machine.<br />
<br />
{{hc|USB Device Tree|$ lsusb -tv}}<br />
<br />
{{hc|PCI Device Tree|$ lspci -tv}}<br />
<br />
=== Partitioning ===<br />
<br />
Make sure that your partitions are [[Partitioning#Partition_alignment|properly aligned]].<br />
<br />
==== Multiple drives ====<br />
<br />
If you have multiple disks available, you can set them up as a software [[RAID]] for serious speed improvements.<br />
<br />
Creating [[swap]] on a separate disk can also help quite a bit, especially if your machine swaps frequently.<br />
<br />
==== Layout on HDDs ====<br />
<br />
If using a traditional spinning HDD, your partition layout can influence the system's performance. Sectors at the beginning of the drive (closer to the outside of the disk) are faster than those at the end. Also, a smaller partition requires less movements from the drive's head, and so speed up disk operations. Therefore, it is advised to create a small partition (10GB, more or less depending on your needs) only for your system, as near to the beginning of the drive as possible. Other data (pictures, videos) should be kept on a separate partition, and this is usually achieved by separating the home directory ({{ic|/home/''user''}}) from the system ({{ic|/}}).<br />
<br />
=== Choosing and tuning your filesystem ===<br />
<br />
Choosing the best filesystem for a specific system is very important because each has its own strengths. The [[File systems]] article provides a short summary of the most popular ones. You can also find relevant articles in [[:Category:File systems]].<br />
<br />
==== Mount options ====<br />
<br />
The [[fstab#atime options|noatime]] option is known to improve performance of the filesystem.<br />
<br />
Other mount options are filesystem specific, therefore see the relevant articles for the filesystems:<br />
<br />
* [[Ext3]]<br />
* [[Ext4#Improving performance]]<br />
* [[JFS Filesystem#Optimizations]]<br />
* [[XFS]]<br />
* [[Btrfs#Defragmentation]], [[Btrfs#Compression]], and {{man|5|btrfs}}<br />
* [[ZFS#Tuning]]<br />
<br />
===== Reiserfs =====<br />
<br />
The {{Ic|1=data=writeback}} mount option improves speed, but may corrupt data during power loss. The {{Ic|notail}} mount option increases the space used by the filesystem by about 5%, but also improves overall speed. You can also reduce disk load by putting the journal and data on separate drives. This is done when creating the filesystem: <br />
<br />
# mkreiserfs –j /dev/sd'''a1''' /dev/sd'''b1'''<br />
<br />
Replace {{ic|/dev/sd'''a1'''}} with the partition reserved for the journal, and {{ic|/dev/sd'''b1'''}} with the partition for data. You can learn more about reiserfs with this [http://www.funtoo.org/Funtoo_Filesystem_Guide,_Part_2 article].<br />
<br />
=== Tuning kernel parameters ===<br />
<br />
There are several key tunables affecting the performance of block devices, see [[sysctl#Virtual memory]] for more information.<br />
<br />
=== Input/output schedulers ===<br />
==== Background information ====<br />
The input/output ''(I/O)'' scheduler is the kernel component that decides in which order the block I/O operations are submitted to storage devices. It is useful to remind here some specifications of two main drive types because the goal of the I/O scheduler is to optimize the way these are able to deal with read requests:<br />
<br />
* An HDD has spinning disks and a head that moves physically to the required location. Therefore, random latency is quite high ranging between 3 and 12ms (whether it is a high end server drive or a laptop drive and bypassing the disk controller write buffer) while sequential access provides much higher throughput. The typical HDD throughput is about 200 I/O operations per second ''(IOPS)''.<br />
<br />
* An SSD does not have moving parts, random access is as fast as sequential one, typically under 0.1ms, and it can handle multiple concurrent requests. The typical SSD throughput is greater than 10,000 IOPS, which is more than needed in common workload situations.<br />
<br />
If there are many processes making I/O requests to different storage parts, thousands of IOPS can be generated while a typical HDD can handle only about 200 IOPS. There is a queue of requests that have to wait for access to the storage. This is where the I/O schedulers plays an optimization role.<br />
<br />
==== The scheduling algorithms ====<br />
<br />
One way to improve throughput is to linearize access: by ordering waiting requests by their logical address and grouping the closest ones. Historically this was the first Linux I/O scheduler called [[w:Elevator_algorithm|elevator]].<br />
<br />
One issue with the elevator algorithm is that it is not optimal for a process doing sequential access: reading a block of data, processing it for several microseconds then reading next block and so on. The elevator scheduler does not know that the process is about to read another block nearby and, thus, moves to another request at some other location. The [[w:Anticipatory_scheduling|anticipatory]] I/O scheduler overcomes the problem: it pauses for a few milliseconds in anticipation of another close-by read operation before dealing with another request.<br />
<br />
While these schedulers try to improve total throughput, they might leave some unlucky requests waiting for a very long time. As an example, imagine the majority of processes make requests at the beginning of the storage space while an unlucky process makes a request at the other end of storage. This potentially infinite postponement of the process is called starvation. To improve fairness, the [[w:Deadline_scheduler|deadline]] algorithm was developed. It has a queue ordered by address, similar to the elevator, but if some request sits in this queue for too long then it moves to an "expired" queue ordered by expire time. The scheduler checks the expire queue first and processes requests from there and only then moves to the elevator queue. Note that this fairness has a negative impact on overall throughput.<br />
<br />
The [[w:CFQ|Completely Fair Queuing ''(CFQ)'']] approaches the problem differently by allocating a timeslice and a number of allowed requests by queue depending on the priority of the process submitting them. It supports [[cgroup]] that allows to reserve some amount of I/O to a specific collection of processes. It is in particular useful for shared and cloud hosting: users who paid for some IOPS want to get their share whenever needed. Also, it idles at the end of synchronous I/O waiting for other nearby operations, taking over this feature from the ''anticipatory'' scheduler and bringing some enhancements. Both the ''anticipatory'' and the ''elevator'' schedulers were decommissioned from the Linux kernel replaced by the more advanced alternatives presented above.<br />
<br />
The [https://algo.ing.unimo.it/people/paolo/disk_sched/ Budget Fair Queuing ''(BFQ)''] is based on CFQ code and brings some enhancements. It does not grant the disk to each process for a fixed time-slice but assigns a "budget" measured in number of sectors to the process and uses heuristics. It is a relatively complex scheduler, it may be more adapted to rotational drives and slow SSDs because its high per-operation overhead, especially if associated with a slow CPU, can slow down fast devices. The objective of BFQ on personal systems is that for interactive tasks, the storage device is virtually as responsive as if it was idle. In its default configuration it focuses on delivering the lowest latency rather than achieving the maximum throughput.<br />
<br />
[https://lwn.net/Articles/720675/ Kyber] is a recent scheduler inspired by active queue management techniques used for network routing. The implementation is based on "tokens" that serve as a mechanism for limiting requests. A queuing token is required to allocate a request, this is used to prevent starvation of requests. A dispatch token is also needed and limits the operations of a certain priority on a given device. Finally, a target read latency is defined and the scheduler tunes itself to reach this latency goal. The implementation of the algorithm is relatively simple and it is deemed efficient for fast devices.<br />
<br />
==== Kernel's I/O schedulers ====<br />
While some of the early algorithms have now been decommissioned, the official Linux kernel supports a number of I/O schedulers which can be split into two categories:<br />
<br />
*The '''single-queue schedulers''' are available by default with the kernel:<br />
**[[w:NOOP_scheduler|NOOP]] is the simplest scheduler, it inserts all incoming I/O requests into a simple FIFO queue and implements request merging. In this algorithm, there is no re-ordering of the request based on the sector number. Therefore it can be used if the ordering is dealt with at another layer, at the device level for example, or if it does not matter, for SSDs for instance.<br />
**''Deadline''<br />
**''CFQ''<br />
*The '''multi-queue scheduler''' mode can be activated at boot time as described in [[#Changing I/O scheduler]]. This [https://www.thomas-krenn.com/en/wiki/Linux_Multi-Queue_Block_IO_Queueing_Mechanism_(blk-mq) Multi-Queue Block I/O Queuing Mechanism ''(blk-mq)''] maps I/O queries to multiple queues, the tasks are distributed across threads and therefore CPU cores. Within this framework the following schedulers are available:<br />
**''None'', no queuing algorithm is applied.<br />
**''mq-deadline'' is the adaptation of the deadline scheduler to multi-threading.<br />
**''Kyber''<br />
**''BFQ''<br />
:{{Warning|1=The multi-queue scheduler framework and its related algorithms are under active development, the state of some issues can be seen in the [https://groups.google.com/forum/#!forum/bfq-iosched bfq forum] and {{Bug|57496}}. In particular, users reported USB drives to stop working - [https://bbs.archlinux.org/viewtopic.php?id=234070][https://bbs.archlinux.org/viewtopic.php?id=234363][https://bbs.archlinux.org/viewtopic.php?id=236291].}}<br />
{{Note|The best choice of scheduler depends on both the device and the exact nature of the workload. Also, the throughput in MB/s is not the only measure of performance: deadline or fairness deteriorate the overall throughput but improve system responsiveness.}}<br />
<br />
==== Changing I/O scheduler ====<br />
{{Note|The block multi-queue ''(blk-mq)'' mode must be enabled at boot time to be able to access the latest ''BFQ'' and ''Kyber'' schedulers. This is done by adding {{ic|1=scsi_mod.use_blk_mq=1}} to the [[kernel parameters]]. The single-queue schedulers are no longer available once in this mode.}}<br />
To see the available schedulers for a device and the active one, in brackets:<br />
{{hc|$ cat /sys/block/'''''sda'''''/queue/scheduler|<br />
mq-deadline kyber [bfq] none}}<br />
or for all devices:<br />
{{hc|$ cat /sys/block/'''sd*'''/queue/scheduler|<br />
mq-deadline kyber [bfq] none<br />
[mq-deadline] kyber bfq none<br />
mq-deadline kyber [bfq] none}}<br />
<br />
To change the active I/O scheduler to ''bfq'' for device ''sda'', use:<br />
<br />
# echo '''''bfq''''' > /sys/block/'''''sda'''''/queue/scheduler<br />
SSDs can handle many IOPS and tend to perform best with simple algorithm like ''noop'' or ''deadline'' while ''BFQ'' is well adapted to HDDs. The process to change I/O scheduler, depending on whether the disk is rotating or not can be automated and persist across reboots with a [[udev]] rule like this:<br />
<br />
{{hc|/etc/udev/rules.d/60-ioschedulers.rules|2=<br />
# set scheduler for non-rotating disks<br />
ACTION=="add{{!}}change", KERNEL=="sd[a-z]{{!}}mmcblk[0-9]*{{!}}nvme[0-9]*", ATTR{queue/rotational}=="0", ATTR{queue/scheduler}="mq-deadline"<br />
# set scheduler for rotating disks<br />
ACTION=="add{{!}}change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="1", ATTR{queue/scheduler}="bfq" <br />
}}<br />
<br />
Save it, then reboot or force [[Udev#Loading_new_rules|reload/trigger]] of the rules.<br />
<br />
==== Tuning I/O scheduler ====<br />
<br />
Each of the kernel's I/O scheduler has its own tunables, such as the latency time, the expiry time or the FIFO parameters. They are helpful in adjusting the algorithm to a particular combination of device and workload. This is typically to achieve a higher throughput or a lower latency for a given utilization.<br />
The tunables and their description can be found within the [https://www.kernel.org/doc/Documentation/block/ kernel documentation files].<br />
<br />
To list the available tunables for a device, in the example below ''sdb'' which is using ''deadline'', use:<br />
{{hc|$ ls /sys/block/'''''sdb'''''/queue/iosched|<br />
fifo_batch front_merges read_expire write_expire writes_starved}}<br />
<br />
To improve ''deadline'''s throughput at the cost of latency, one can increase {{ic|fifo_batch}} with the command:<br />
<br />
{{bc|# echo ''32'' > /sys/block/'''''sdb'''''/queue/iosched/'''fifo_batch'''}}<br />
<br />
=== Power management configuration ===<br />
When dealing with traditional rotational disks (HDD's) you may want to [[Hdparm#Power_management_configuration|lower or disable power saving features]] completely.<br />
<br />
=== Reduce disk reads/writes ===<br />
<br />
Avoiding unnecessary access to slow storage drives is good for performance and also increasing lifetime of the devices, although on modern hardware the difference in life expectancy is usually negligible.<br />
<br />
{{Note|A 32GB SSD with a mediocre 10x write amplification factor, a standard 10000 write/erase cycle, and '''10GB of data written per day''', would get an '''8 years life expectancy'''. It gets better with bigger SSDs and modern controllers with less write amplification. Also compare [http://techreport.com/review/25889/the-ssd-endurance-experiment-500tb-update] when considering whether any particular strategy to limit disk writes is actually needed.}}<br />
<br />
==== Show disk writes ====<br />
<br />
The {{Pkg|iotop}} package can sort by disk writes, and show how much and how frequently programs are writing to the disk. See {{man|8|iotop}} for details.<br />
<br />
==== Relocate files to tmpfs ====<br />
<br />
Relocate files, such as your browser profile, to a [[tmpfs]] file system, for improvements in application response as all the files are now stored in RAM:<br />
<br />
* Refer to [[Profile-sync-daemon]] for syncing browser profiles. Certain browsers might need special attention, see e.g. [[Firefox on RAM]].<br />
* Refer to [[Anything-sync-daemon]] for syncing any specified folder.<br />
* Refer to [[Makepkg#Improving compile times]] for improving compile times when building packages.<br />
<br />
==== Compiling in tmpfs ====<br />
<br />
See [[Makepkg#Building from files in memory]].<br />
<br />
==== Optimize the filesystem ====<br />
<br />
[[Filesystems]] may provide performance improvements instructions for each filesystem, e.g. [[Ext4#Improving performance]].<br />
<br />
==== Swap space ====<br />
<br />
See [[Swap#Performance]].<br />
<br />
=== Storage I/O scheduling with ionice ===<br />
<br />
Many tasks such as backups do not rely on a short storage I/O delay or high storage I/O bandwidth to fulfil their task, they can be classified as background tasks.<br />
On the other hand quick I/O is necessary for good UI responsiveness on the desktop.<br />
Therefore it is beneficial to reduce the amount of storage bandwidth available to background tasks, whilst other tasks are in need of storage I/O. This can be achieved by making use of the linux I/O scheduler CFQ, which allows setting different priorities for processes.<br />
<br />
The I/O priority of a background process can be reduced to the "Idle" level by starting it with<br />
<br />
# ionice -c 3 command<br />
<br />
See {{man|1|ionice}} and [https://www.cyberciti.biz/tips/linux-set-io-scheduling-class-priority.html] for more information.<br />
<br />
== CPU ==<br />
<br />
=== Overclocking ===<br />
<br />
[[w:Overclocking|Overclocking]] improves the computational performance of the CPU by increasing its peak clock frequency. The ability to overclock depends on the combination of CPU model and motherboard model. It is most frequently done through the BIOS. Overclocking also has disadvantages and risks. It is neither recommended nor discouraged here.<br />
<br />
Many Intel chips will not correctly report their clock frequency to acpi_cpufreq and most other utilities. This will result in excessive messages in dmesg, which can be avoided by unloading and blacklisting the kernel module {{ic|acpi_cpufreq}}.<br />
To read their clock speed use ''i7z'' from the {{Pkg|i7z}} package. To check for correct operation of an overclocked CPU, it is recommended to do [[stress testing]].<br />
<br />
=== Frequency scaling ===<br />
<br />
See [[CPU frequency scaling]].<br />
<br />
=== Alternative CPU scheduler ===<br />
<br />
{{Expansion|MuQSS is not the only alternative scheduler.}}<br />
<br />
The default CPU scheduler in the mainline Linux kernel is [[w:Completely_Fair_Scheduler|CFS]].<br />
<br />
An alternative scheduler designed to be used on desktop computers is MuQSS, developed by [http://users.tpg.com.au/ckolivas/kernel/ Con Kolivas], which is focused on desktop interactivity and responsiveness. MuQSS is available either as a stand-alone patch or as part of a wider patchset, the '''-ck''' patchset. See [[Linux-ck]] and [[Linux-pf]] for more information on the patchset.<br />
<br />
=== Real-time kernel ===<br />
<br />
It may not be obvious but some applications such as running a TV tuner card at full HD resolution (1080p), may benefit from using the real-time linux kernel. Either compiling [https://aur.archlinux.org/packages/linux-rt/ linux-rt from aur] or adding the mirror for the coderkun-aur-audio unofficial repository to pacman.conf and installing linux-rt will use a real time scheduler instead of the stock scheduler. It may prevent a bottleneck in the hardware possibly resulting in premature hardware failure. This may especially be true with poorly designed thermal processor sensors on AMD CPUs.<br />
<br />
=== Adjusting priorities of processes ===<br />
<br />
==== Ananicy ====<br />
<br />
[https://github.com/Nefelim4ag/Ananicy Ananicy] is a daemon, available in the {{AUR|ananicy-git}} package, for auto adjusting the nice levels of executables. The nice level represents the priority of the executable when allocating CPU resources.<br />
<br />
==== cgroups ====<br />
<br />
See [[cgroups]].<br />
<br />
==== Cpulimit ====<br />
<br />
[https://github.com/opsengine/cpulimit Cpulimit] is a program to limit the CPU usage percentage of a specific process. After installing {{Pkg|cpulimit}}, you may limit the CPU usage of a processes' PID using a scale of 0 to 100 times the number of CPU cores that the computer has. For example, with eight CPU cores the precentage range will be 0 to 800. Usage:<br />
<br />
$ cpulimit -l 50 -p 5081<br />
<br />
=== irqbalance ===<br />
<br />
The purpose of {{Pkg|irqbalance}} is distribute hardware interrupts across processors on a multiprocessor system in order to increase performance. It can be [[systemd#Using units|controlled]] by the provided {{ic|irqbalance.service}}.<br />
<br />
== Graphics ==<br />
<br />
As with CPUs, overclocking can directly improve performance, but is generally recommended against. There are several packages in the [[AUR]], such as {{AUR|amdoverdrivectrl}} (ATI) and {{AUR|nvclock}} (NVIDIA).<br />
<br />
=== Xorg configuration ===<br />
<br />
Graphics performance may depend on the settings in {{man|5|xorg.conf}}; see the [[NVIDIA]], [[ATI]] and [[Intel]] articles. Improper settings may stop Xorg from working, so caution is advised.<br />
<br />
=== Mesa configuration ===<br />
<br />
The performance of the Mesa drivers can be configured via [https://dri.freedesktop.org/wiki/ConfigurationInfrastructure/ drirc]. GUI configuration tools are available:<br />
* {{App|adriconf (Advanced DRI Configurator)|Tool to set options and configure applications using the standard drirc file used by the Mesa drivers.|https://github.com/jlHertel/adriconf/|{{AUR|adriconf}}}}<br />
* {{App|DRIconf|Configuration applet for the Direct Rendering Infrastructure. It allows customizing performance and visual quality settings of OpenGL drivers on a per-driver, per-screen and/or per-application level.|https://dri.freedesktop.org/wiki/DriConf/|{{Pkg|driconf}}}}<br />
<br />
=== Overclocking with amdgpu ===<br />
<br />
{{Move|AMDGPU|There is a dedicated page.}}<br />
<br />
Since Linux 4.17, it is possible to adjust clocks and voltages of the graphics card via {{Ic|1=/sys/class/drm/card0/device/pp_od_clk_voltage}}. It is however required to unlock access to it in sysfs by appending the boot parameter {{Ic|1=amdgpu.ppfeaturemask=0xffffffff}}.<br />
<br />
After this, the range of allowed values must be increased to allow higher clocks than used by default. To allow the maximum GPU clock to be increased by e.g. up to 2%, run:<br />
echo "2" > /sys/class/drm/card0/device/pp_sclk_od<br />
{{Note|Running cat {{Ic|/sys/class/drm/card0/device/pp_sclk_od}} does always return either 1 or 0, no matter the value added to it via {{Ic|echo}}.}}<br />
Unlike with previous kernel versions, this alone doesn't lead to a higher clock. The values in {{Ic|pp_od_clk_voltage}} for the pstates have to be adjusted as well. It's a good idea to get the default values as a guidance by simply reading the file. In this example, the default clock is 1196MHz and a range increase by 2% allows up to 1219MHz.<br />
<br />
To set the GPU clock for the maximum pstate 7 on a Polaris GPU to 1209MHz and 900mV voltage, run:<br />
# echo "s 7 1209 900" > /sys/class/drm/card0/device/pp_od_clk_voltage<br />
{{Warning|1=Double check the entered values, as mistakes might instantly cause fatal hardware damage!}}<br />
To apply, run<br />
# echo "c" > /sys/class/drm/card0/device/pp_od_clk_voltage<br />
To check if it worked out, read out clocks and voltage under 3D load:<br />
# watch -n 0.5 cat /sys/kernel/debug/dri/0/amdgpu_pm_info<br />
You can reset to the default values using this:<br />
# echo "r" > /sys/class/drm/card0/device/pp_od_clk_voltage<br />
<br />
To set the allowed maximum power consumption of the GPU to e.g. 50 Watts, run<br />
# echo 50000000 > /sys/class/drm/card0/device/hwmon/hwmon0/power1_cap<br />
If the video card bios doesn't provide a maximum value above the default setting, you can only decrease the power limit, but not increase.<br />
{{Note|The above procedure was tested with a Polaris RX 560 card. There may be different behavior or bugs with different GPUs.}}<br />
<br />
== RAM and swap ==<br />
<br />
=== Clock frequency and timings ===<br />
<br />
RAM can run at different clock frequencies and timings, which can be configured in the BIOS. Memory performance depends on both values. Selecting the highest preset presented by the BIOS usually improves the performance over the default setting. Note that increasing the frequency to values not supported by both motherboard and RAM vendor is overclocking, and similar risks and disadvantages apply, see [[#Overclocking]].<br />
<br />
=== Root on RAM overlay ===<br />
<br />
If running off a slow writing medium (USB, spinning HDDs) and storage requirements are low, the root may be run on a RAM overlay ontop of read only root (on disk). This can vastly improve performance at the cost of a limited writable space to root. See {{AUR|liveroot}}.<br />
<br />
=== Zram or zswap ===<br />
<br />
The [https://www.kernel.org/doc/Documentation/blockdev/zram.txt zram] kernel module (previously called '''compcache''') provides a compressed block device in RAM. If you use it as swap device, the RAM can hold much more information but uses more CPU. Still, it is much quicker than swapping to a hard drive. If a system often falls back to swap, this could improve responsiveness. Using zram is also a good way to reduce disk read/write cycles due to swap on SSDs.<br />
<br />
Similar benefits (at similar costs) can be achieved using [[zswap]] rather than zram. The two are generally similar in intent although not operation: zswap operates as a compressed RAM cache and neither requires (nor permits) extensive userspace configuration.<br />
<br />
Example: To set up one lz4 compressed zram device with 32GiB capacity and a higher-than-normal priority (only for the current session):<br />
<br />
# modprobe zram<br />
# echo lz4 > /sys/block/zram0/comp_algorithm<br />
# echo 32G > /sys/block/zram0/disksize<br />
# mkswap --label zram0 /dev/zram0<br />
# swapon --priority 100 /dev/zram0<br />
<br />
To disable it again, either reboot or run<br />
<br />
# swapoff /dev/zram0<br />
# rmmod zram<br />
<br />
A detailed explanation of all steps, options and potential problems is provided in the official documentation of the module [https://www.kernel.org/doc/Documentation/blockdev/zram.txt here].<br />
<br />
The {{Pkg|systemd-swap}} package provides a {{ic|systemd-swap.service}} unit to automatically initialize zram devices. Configuration is possible in {{ic|/etc/systemd/swap.conf}}.<br />
<br />
The package {{AUR|zramswap}} provides an automated script for setting up such swap devices with optimal settings for your system (such as RAM size and CPU core number). The script creates one zram device per CPU core with a total space equivalent to the RAM available, so you will have a compressed swap with higher priority than regular swap, which will utilize multiple CPU cores for compressing data. To do this automatically on every boot, [[enable]] {{ic|zramswap.service}}.<br />
<br />
==== Swap on zRAM using a udev rule ====<br />
<br />
The example below describes how to set up swap on zRAM automatically at boot with a single udev rule. No extra package should be needed to make this work.<br />
<br />
First, enable the module:<br />
<br />
{{hc|/etc/modules-load.d/zram.conf|<nowiki><br />
zram<br />
</nowiki>}}<br />
<br />
Configure the number of /dev/zram nodes you need.<br />
<br />
{{hc|/etc/modprobe.d/zram.conf|<nowiki><br />
options zram num_devices=2<br />
</nowiki>}}<br />
<br />
Create the udev rule as shown in the example.<br />
<br />
{{hc|/etc/udev/rules.d/99-zram.rules|<nowiki><br />
KERNEL=="zram0", ATTR{disksize}="512M" RUN="/usr/bin/mkswap /dev/zram0", TAG+="systemd"<br />
KERNEL=="zram1", ATTR{disksize}="512M" RUN="/usr/bin/mkswap /dev/zram1", TAG+="systemd"<br />
</nowiki>}}<br />
<br />
Add /dev/zram to your fstab.<br />
<br />
{{hc|/etc/fstab|<nowiki><br />
/dev/zram0 none swap defaults 0 0<br />
/dev/zram1 none swap defaults 0 0<br />
</nowiki>}}<br />
<br />
=== Using the graphic card's RAM ===<br />
<br />
In the unlikely case that you have very little RAM and a surplus of video RAM, you can use the latter as swap. See [[Swap on video ram]].<br />
<br />
== Network ==<br />
<br />
* Kernel networking: see [[Sysctl#Improving performance]]<br />
* NIC: see [[Network configuration#Set device MTU and queue length]]<br />
* DNS: consider using a caching DNS resolver, see [[Domain name resolution#Resolvers]]<br />
* Samba: see [[Samba#Improve throughput]]<br />
<br />
== Watchdogs ==<br />
According to [[wikipedia:Watchdog_timer]]:<br />
:A watchdog timer [...] is an electronic timer that is used to detect and recover from computer malfunctions. During normal operation, the computer regularly resets the watchdog timer [...]. If, [...], the computer fails to reset the watchdog, the timer will elapse and generate a timeout signal [...] used to initiate corrective [...] actions [...] typically include placing the computer system in a safe state and restoring normal system operation.<br />
<br />
Many users need this feature due to their system's mission-critical role (i.e. servers), or because of the lack of power reset (i.e. embedded devices). Thus, this feature is required for a good operation in some situations. On the other hand, normal users (i.e. desktop and laptop) do not need this feature and can disable it.<br />
<br />
To disable watchdog timers (both software and hardware), append {{ic|nowatchdog}} to your boot parameters.<br />
<br />
To check the new configuration do:<br />
# cat /proc/sys/kernel/watchdog<br />
or use:<br />
# wdctl<br />
<br />
After you disabled watchdogs, you can ''optionally'' avoid the loading of the module responsible of the hardware watchdog, too. Do it by [[blacklisting]] the related module, e.g. {{ic|iTCO_wdt}}.<br />
<br />
{{Note|1=Some users [https://bbs.archlinux.org/viewtopic.php?id=221239 reported] the {{ic|nowatchdog}} parameter does not work as expected but they have successfully disabled the watchdog (at least the hardware one) by blacklisting the above-mentioned module.}}<br />
<br />
Either action will speed up your boot and shutdown, because one less module is loaded. Additionally disabling watchdog timers increases performance and [[Power_management#Disabling_NMI_watchdog|lowers power consumption]].<br />
<br />
See [https://bbs.archlinux.org/viewtopic.php?id=163768], [https://bbs.archlinux.org/viewtopic.php?id=165834], [http://0pointer.de/blog/projects/watchdog.html], and [https://www.kernel.org/doc/Documentation/watchdog/watchdog-parameters.txt] for more information.<br />
<br />
== See also ==<br />
<br />
* [https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Performance_Tuning_Guide/index.html Red Hat Performance Tuning Guide]<br />
* [https://www.thomas-krenn.com/en/wiki/Linux_Performance_Measurements_using_vmstat Linux Performance Measurements using vmstat]</div>Holycowhttps://wiki.archlinux.org/index.php?title=Improving_performance&diff=542188Improving performance2018-09-20T05:57:34Z<p>Holycow: /* CPU */ linux-rt</p>
<hr />
<div>[[Category:Hardware]]<br />
[[Category:System administration]]<br />
[[ar:Improving performance]]<br />
[[es:Improving performance]]<br />
[[ja:パフォーマンスの最大化]]<br />
[[ru:Improving performance]]<br />
[[zh-hans:Improving performance]]<br />
{{Related articles start}}<br />
{{Related|Improving performance/Boot process}}<br />
{{Related|Pacman/Tips and tricks#Performance}}<br />
{{Related|SSH#Speeding up SSH}}<br />
{{Related|Openoffice#Speed up OpenOffice}}<br />
{{Related|Laptop}}<br />
{{Related|Preload}}<br />
{{Related|Cpulimit}}<br />
{{Related articles end}}<br />
This article provides information on basic system diagnostics relating to performance as well as steps that may be taken to reduce resource consumption or to otherwise optimize the system with the end-goal being either perceived or documented improvements to a system's performance.<br />
<br />
== The basics ==<br />
<br />
=== Know your system ===<br />
<br />
The best way to tune a system is to target bottlenecks, or subsystems which limit overall speed. The system specifications can help identify them.<br />
<br />
* If the computer becomes slow when large applications (such as OpenOffice.org and Firefox) run at the same time, check if the amount of RAM is sufficient. Use the following command, and check the "available" column:<br />
<br />
$ free -h<br />
<br />
* If boot time is slow, and applications take a long time to load at first launch (only), then the hard drive is likely to blame. The speed of a hard drive can be measured with the {{ic|hdparm}} command:<br />
{{Note|{{Pkg|hdparm}} indicates only the pure read speed of a hard drive, and is not a valid benchmark. A value higher than 40MB/s (while idle) is however acceptable on an average system.}}<br />
<br />
# hdparm -t /dev/sdX<br />
<br />
* If CPU load is consistently high even with enough RAM available, then try to lower CPU usage by disabling running [[daemons]] and/or processes. This can be monitored in several ways, for example with {{Pkg|htop}}, {{ic|pstree}} or any other [[List_of_applications#System_monitoring|system monitoring]] tool:<br />
<br />
$ htop<br />
<br />
* If applications using direct rendering are slow (i.e those which use the GPU, such as video players, games, or even a [[window manager]]), then improving GPU performance should help. The first step is to verify if direct rendering is actually enabled. This is indicated by the {{ic|glxinfo}} command, part of the {{Pkg|mesa-demos}} package:<br />
{{hc|<nowiki>$ glxinfo | grep direct</nowiki>|<br />
direct rendering: Yes<br />
}}<br />
<br />
* When running a [[desktop environment]], disabling (unused) visual desktop effects may reduce GPU usage. Use a more lightweight environment or create a [[Desktop_environment#Custom_environments|custom environment]] if the current does not meet the hardware and/or personal requirements.<br />
<br />
=== Benchmarking ===<br />
<br />
The effects of optimization are often difficult to judge. They can however be measured by [[benchmarking]] tools.<br />
<br />
== Storage devices ==<br />
<br />
=== Multiple hardware paths ===<br />
<br />
{{Style|Subjective writing}}<br />
<br />
An internal hardware path is how the storage device is connected to your motherboard. There are different ways to connect to the motherboard such as TCP/IP through a NIC, plugged in directly using PCIe/PCI, Firewire, Raid Card, USB, etc. By spreading your storage devices across these multiple connection points you maximize the capabilities of your motherboard, for example 6 hard-drives connected via USB would be much much slower than 3 over USB and 3 over Firewire. The reason is that each entry path into the motherboard is like a pipe, and there is a set limit to how much can go through that pipe at any one time. The good news is that the motherboard usually has several pipes.<br />
<br />
More Examples<br />
<br />
# Directly to the motherboard using pci/PCIe/ata<br />
# Using an external enclosure to house the disk over USB/Firewire<br />
# Turn the device into a network storage device by connecting over tcp/ip<br />
<br />
Note also that if you have a 2 USB ports on the front of your machine, and 4 USB ports on the back, and you have 4 disks, it would probably be fastest to put 2 on front/2 on back or 3 on back/1 on front. This is because internally the front ports are likely a separate Root Hub than the back, meaning you can send twice as much data by using both than just 1. Use the following commands to determine the various paths on your machine.<br />
<br />
{{hc|USB Device Tree|$ lsusb -tv}}<br />
<br />
{{hc|PCI Device Tree|$ lspci -tv}}<br />
<br />
=== Partitioning ===<br />
<br />
Make sure that your partitions are [[Partitioning#Partition_alignment|properly aligned]].<br />
<br />
==== Multiple drives ====<br />
<br />
If you have multiple disks available, you can set them up as a software [[RAID]] for serious speed improvements.<br />
<br />
Creating [[swap]] on a separate disk can also help quite a bit, especially if your machine swaps frequently.<br />
<br />
==== Layout on HDDs ====<br />
<br />
If using a traditional spinning HDD, your partition layout can influence the system's performance. Sectors at the beginning of the drive (closer to the outside of the disk) are faster than those at the end. Also, a smaller partition requires less movements from the drive's head, and so speed up disk operations. Therefore, it is advised to create a small partition (10GB, more or less depending on your needs) only for your system, as near to the beginning of the drive as possible. Other data (pictures, videos) should be kept on a separate partition, and this is usually achieved by separating the home directory ({{ic|/home/''user''}}) from the system ({{ic|/}}).<br />
<br />
=== Choosing and tuning your filesystem ===<br />
<br />
Choosing the best filesystem for a specific system is very important because each has its own strengths. The [[File systems]] article provides a short summary of the most popular ones. You can also find relevant articles in [[:Category:File systems]].<br />
<br />
==== Mount options ====<br />
<br />
The [[fstab#atime options|noatime]] option is known to improve performance of the filesystem.<br />
<br />
Other mount options are filesystem specific, therefore see the relevant articles for the filesystems:<br />
<br />
* [[Ext3]]<br />
* [[Ext4#Improving performance]]<br />
* [[JFS Filesystem#Optimizations]]<br />
* [[XFS]]<br />
* [[Btrfs#Defragmentation]], [[Btrfs#Compression]], and {{man|5|btrfs}}<br />
* [[ZFS#Tuning]]<br />
<br />
===== Reiserfs =====<br />
<br />
The {{Ic|1=data=writeback}} mount option improves speed, but may corrupt data during power loss. The {{Ic|notail}} mount option increases the space used by the filesystem by about 5%, but also improves overall speed. You can also reduce disk load by putting the journal and data on separate drives. This is done when creating the filesystem: <br />
<br />
# mkreiserfs –j /dev/sd'''a1''' /dev/sd'''b1'''<br />
<br />
Replace {{ic|/dev/sd'''a1'''}} with the partition reserved for the journal, and {{ic|/dev/sd'''b1'''}} with the partition for data. You can learn more about reiserfs with this [http://www.funtoo.org/Funtoo_Filesystem_Guide,_Part_2 article].<br />
<br />
=== Tuning kernel parameters ===<br />
<br />
There are several key tunables affecting the performance of block devices, see [[sysctl#Virtual memory]] for more information.<br />
<br />
=== Input/output schedulers ===<br />
==== Background information ====<br />
The input/output ''(I/O)'' scheduler is the kernel component that decides in which order the block I/O operations are submitted to storage devices. It is useful to remind here some specifications of two main drive types because the goal of the I/O scheduler is to optimize the way these are able to deal with read requests:<br />
<br />
* An HDD has spinning disks and a head that moves physically to the required location. Therefore, random latency is quite high ranging between 3 and 12ms (whether it is a high end server drive or a laptop drive and bypassing the disk controller write buffer) while sequential access provides much higher throughput. The typical HDD throughput is about 200 I/O operations per second ''(IOPS)''.<br />
<br />
* An SSD does not have moving parts, random access is as fast as sequential one, typically under 0.1ms, and it can handle multiple concurrent requests. The typical SSD throughput is greater than 10,000 IOPS, which is more than needed in common workload situations.<br />
<br />
If there are many processes making I/O requests to different storage parts, thousands of IOPS can be generated while a typical HDD can handle only about 200 IOPS. There is a queue of requests that have to wait for access to the storage. This is where the I/O schedulers plays an optimization role.<br />
<br />
==== The scheduling algorithms ====<br />
<br />
One way to improve throughput is to linearize access: by ordering waiting requests by their logical address and grouping the closest ones. Historically this was the first Linux I/O scheduler called [[w:Elevator_algorithm|elevator]].<br />
<br />
One issue with the elevator algorithm is that it is not optimal for a process doing sequential access: reading a block of data, processing it for several microseconds then reading next block and so on. The elevator scheduler does not know that the process is about to read another block nearby and, thus, moves to another request at some other location. The [[w:Anticipatory_scheduling|anticipatory]] I/O scheduler overcomes the problem: it pauses for a few milliseconds in anticipation of another close-by read operation before dealing with another request.<br />
<br />
While these schedulers try to improve total throughput, they might leave some unlucky requests waiting for a very long time. As an example, imagine the majority of processes make requests at the beginning of the storage space while an unlucky process makes a request at the other end of storage. This potentially infinite postponement of the process is called starvation. To improve fairness, the [[w:Deadline_scheduler|deadline]] algorithm was developed. It has a queue ordered by address, similar to the elevator, but if some request sits in this queue for too long then it moves to an "expired" queue ordered by expire time. The scheduler checks the expire queue first and processes requests from there and only then moves to the elevator queue. Note that this fairness has a negative impact on overall throughput.<br />
<br />
The [[w:CFQ|Completely Fair Queuing ''(CFQ)'']] approaches the problem differently by allocating a timeslice and a number of allowed requests by queue depending on the priority of the process submitting them. It supports [[cgroup]] that allows to reserve some amount of I/O to a specific collection of processes. It is in particular useful for shared and cloud hosting: users who paid for some IOPS want to get their share whenever needed. Also, it idles at the end of synchronous I/O waiting for other nearby operations, taking over this feature from the ''anticipatory'' scheduler and bringing some enhancements. Both the ''anticipatory'' and the ''elevator'' schedulers were decommissioned from the Linux kernel replaced by the more advanced alternatives presented above.<br />
<br />
The [https://algo.ing.unimo.it/people/paolo/disk_sched/ Budget Fair Queuing ''(BFQ)''] is based on CFQ code and brings some enhancements. It does not grant the disk to each process for a fixed time-slice but assigns a "budget" measured in number of sectors to the process and uses heuristics. It is a relatively complex scheduler, it may be more adapted to rotational drives and slow SSDs because its high per-operation overhead, especially if associated with a slow CPU, can slow down fast devices. The objective of BFQ on personal systems is that for interactive tasks, the storage device is virtually as responsive as if it was idle. In its default configuration it focuses on delivering the lowest latency rather than achieving the maximum throughput.<br />
<br />
[https://lwn.net/Articles/720675/ Kyber] is a recent scheduler inspired by active queue management techniques used for network routing. The implementation is based on "tokens" that serve as a mechanism for limiting requests. A queuing token is required to allocate a request, this is used to prevent starvation of requests. A dispatch token is also needed and limits the operations of a certain priority on a given device. Finally, a target read latency is defined and the scheduler tunes itself to reach this latency goal. The implementation of the algorithm is relatively simple and it is deemed efficient for fast devices.<br />
<br />
==== Kernel's I/O schedulers ====<br />
While some of the early algorithms have now been decommissioned, the official Linux kernel supports a number of I/O schedulers which can be split into two categories:<br />
<br />
*The '''single-queue schedulers''' are available by default with the kernel:<br />
**[[w:NOOP_scheduler|NOOP]] is the simplest scheduler, it inserts all incoming I/O requests into a simple FIFO queue and implements request merging. In this algorithm, there is no re-ordering of the request based on the sector number. Therefore it can be used if the ordering is dealt with at another layer, at the device level for example, or if it does not matter, for SSDs for instance.<br />
**''Deadline''<br />
**''CFQ''<br />
*The '''multi-queue scheduler''' mode can be activated at boot time as described in [[#Changing I/O scheduler]]. This [https://www.thomas-krenn.com/en/wiki/Linux_Multi-Queue_Block_IO_Queueing_Mechanism_(blk-mq) Multi-Queue Block I/O Queuing Mechanism ''(blk-mq)''] maps I/O queries to multiple queues, the tasks are distributed across threads and therefore CPU cores. Within this framework the following schedulers are available:<br />
**''None'', no queuing algorithm is applied.<br />
**''mq-deadline'' is the adaptation of the deadline scheduler to multi-threading.<br />
**''Kyber''<br />
**''BFQ''<br />
:{{Warning|1=The multi-queue scheduler framework and its related algorithms are under active development, the state of some issues can be seen in the [https://groups.google.com/forum/#!forum/bfq-iosched bfq forum] and {{Bug|57496}}. In particular, users reported USB drives to stop working - [https://bbs.archlinux.org/viewtopic.php?id=234070][https://bbs.archlinux.org/viewtopic.php?id=234363][https://bbs.archlinux.org/viewtopic.php?id=236291].}}<br />
{{Note|The best choice of scheduler depends on both the device and the exact nature of the workload. Also, the throughput in MB/s is not the only measure of performance: deadline or fairness deteriorate the overall throughput but improve system responsiveness.}}<br />
<br />
==== Changing I/O scheduler ====<br />
{{Note|The block multi-queue ''(blk-mq)'' mode must be enabled at boot time to be able to access the latest ''BFQ'' and ''Kyber'' schedulers. This is done by adding {{ic|1=scsi_mod.use_blk_mq=1}} to the [[kernel parameters]]. The single-queue schedulers are no longer available once in this mode.}}<br />
To see the available schedulers for a device and the active one, in brackets:<br />
{{hc|$ cat /sys/block/'''''sda'''''/queue/scheduler|<br />
mq-deadline kyber [bfq] none}}<br />
or for all devices:<br />
{{hc|$ cat /sys/block/'''sd*'''/queue/scheduler|<br />
mq-deadline kyber [bfq] none<br />
[mq-deadline] kyber bfq none<br />
mq-deadline kyber [bfq] none}}<br />
<br />
To change the active I/O scheduler to ''bfq'' for device ''sda'', use:<br />
<br />
# echo '''''bfq''''' > /sys/block/'''''sda'''''/queue/scheduler<br />
SSDs can handle many IOPS and tend to perform best with simple algorithm like ''noop'' or ''deadline'' while ''BFQ'' is well adapted to HDDs. The process to change I/O scheduler, depending on whether the disk is rotating or not can be automated and persist across reboots with a [[udev]] rule like this:<br />
<br />
{{hc|/etc/udev/rules.d/60-ioschedulers.rules|2=<br />
# set scheduler for non-rotating disks<br />
ACTION=="add{{!}}change", KERNEL=="sd[a-z]{{!}}mmcblk[0-9]*{{!}}nvme[0-9]*", ATTR{queue/rotational}=="0", ATTR{queue/scheduler}="mq-deadline"<br />
# set scheduler for rotating disks<br />
ACTION=="add{{!}}change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="1", ATTR{queue/scheduler}="bfq" <br />
}}<br />
<br />
Save it, then reboot or force [[Udev#Loading_new_rules|reload/trigger]] of the rules.<br />
<br />
==== Tuning I/O scheduler ====<br />
<br />
Each of the kernel's I/O scheduler has its own tunables, such as the latency time, the expiry time or the FIFO parameters. They are helpful in adjusting the algorithm to a particular combination of device and workload. This is typically to achieve a higher throughput or a lower latency for a given utilization.<br />
The tunables and their description can be found within the [https://www.kernel.org/doc/Documentation/block/ kernel documentation files].<br />
<br />
To list the available tunables for a device, in the example below ''sdb'' which is using ''deadline'', use:<br />
{{hc|$ ls /sys/block/'''''sdb'''''/queue/iosched|<br />
fifo_batch front_merges read_expire write_expire writes_starved}}<br />
<br />
To improve ''deadline'''s throughput at the cost of latency, one can increase {{ic|fifo_batch}} with the command:<br />
<br />
{{bc|# echo ''32'' > /sys/block/'''''sdb'''''/queue/iosched/'''fifo_batch'''}}<br />
<br />
=== Power management configuration ===<br />
When dealing with traditional rotational disks (HDD's) you may want to [[Hdparm#Power_management_configuration|lower or disable power saving features]] completely.<br />
<br />
=== Reduce disk reads/writes ===<br />
<br />
Avoiding unnecessary access to slow storage drives is good for performance and also increasing lifetime of the devices, although on modern hardware the difference in life expectancy is usually negligible.<br />
<br />
{{Note|A 32GB SSD with a mediocre 10x write amplification factor, a standard 10000 write/erase cycle, and '''10GB of data written per day''', would get an '''8 years life expectancy'''. It gets better with bigger SSDs and modern controllers with less write amplification. Also compare [http://techreport.com/review/25889/the-ssd-endurance-experiment-500tb-update] when considering whether any particular strategy to limit disk writes is actually needed.}}<br />
<br />
==== Show disk writes ====<br />
<br />
The {{Pkg|iotop}} package can sort by disk writes, and show how much and how frequently programs are writing to the disk. See {{man|8|iotop}} for details.<br />
<br />
==== Relocate files to tmpfs ====<br />
<br />
Relocate files, such as your browser profile, to a [[tmpfs]] file system, for improvements in application response as all the files are now stored in RAM:<br />
<br />
* Refer to [[Profile-sync-daemon]] for syncing browser profiles. Certain browsers might need special attention, see e.g. [[Firefox on RAM]].<br />
* Refer to [[Anything-sync-daemon]] for syncing any specified folder.<br />
* Refer to [[Makepkg#Improving compile times]] for improving compile times when building packages.<br />
<br />
==== Compiling in tmpfs ====<br />
<br />
See [[Makepkg#Building from files in memory]].<br />
<br />
==== Optimize the filesystem ====<br />
<br />
[[Filesystems]] may provide performance improvements instructions for each filesystem, e.g. [[Ext4#Improving performance]].<br />
<br />
==== Swap space ====<br />
<br />
See [[Swap#Performance]].<br />
<br />
=== Storage I/O scheduling with ionice ===<br />
<br />
Many tasks such as backups do not rely on a short storage I/O delay or high storage I/O bandwidth to fulfil their task, they can be classified as background tasks.<br />
On the other hand quick I/O is necessary for good UI responsiveness on the desktop.<br />
Therefore it is beneficial to reduce the amount of storage bandwidth available to background tasks, whilst other tasks are in need of storage I/O. This can be achieved by making use of the linux I/O scheduler CFQ, which allows setting different priorities for processes.<br />
<br />
The I/O priority of a background process can be reduced to the "Idle" level by starting it with<br />
<br />
# ionice -c 3 command<br />
<br />
See {{man|1|ionice}} and [https://www.cyberciti.biz/tips/linux-set-io-scheduling-class-priority.html] for more information.<br />
<br />
== CPU ==<br />
<br />
=== Overclocking ===<br />
<br />
[[w:Overclocking|Overclocking]] improves the computational performance of the CPU by increasing its peak clock frequency. The ability to overclock depends on the combination of CPU model and motherboard model. It is most frequently done through the BIOS. Overclocking also has disadvantages and risks. It is neither recommended nor discouraged here.<br />
<br />
Many Intel chips will not correctly report their clock frequency to acpi_cpufreq and most other utilities. This will result in excessive messages in dmesg, which can be avoided by unloading and blacklisting the kernel module {{ic|acpi_cpufreq}}.<br />
To read their clock speed use ''i7z'' from the {{Pkg|i7z}} package. To check for correct operation of an overclocked CPU, it is recommended to do [[stress testing]].<br />
<br />
=== Frequency scaling ===<br />
<br />
See [[CPU frequency scaling]].<br />
<br />
=== Alternative CPU scheduler ===<br />
<br />
{{Expansion|MuQSS is not the only alternative scheduler.}}<br />
<br />
The default CPU scheduler in the mainline Linux kernel is [[w:Completely_Fair_Scheduler|CFS]].<br />
<br />
An alternative scheduler designed to be used on desktop computers is MuQSS, developed by [http://users.tpg.com.au/ckolivas/kernel/ Con Kolivas], which is focused on desktop interactivity and responsiveness. MuQSS is available either as a stand-alone patch or as part of a wider patchset, the '''-ck''' patchset. See [[Linux-ck]] and [[Linux-pf]] for more information on the patchset.<br />
<br />
=== Real-time kernel ===<br />
<br />
It may not be obvious but some applications such as running a TV tuner card at full HD resolution (1080p), may benefit from using the real-time linux kernel. Either compiling linux-rt from aur or adding the mirror for the coderkun-aur-audio unofficial repository to pacman.conf and installing linux-rt will use a real time scheduler instead of the stock scheduler. It may prevent a bottleneck in the hardware possibly resulting in premature hardware failure. This may especially be true with poorly designed thermal processor sensors on AMD CPUs. <br />
<br />
=== Adjusting priorities of processes ===<br />
<br />
==== Ananicy ====<br />
<br />
[https://github.com/Nefelim4ag/Ananicy Ananicy] is a daemon, available in the {{AUR|ananicy-git}} package, for auto adjusting the nice levels of executables. The nice level represents the priority of the executable when allocating CPU resources.<br />
<br />
==== cgroups ====<br />
<br />
See [[cgroups]].<br />
<br />
==== Cpulimit ====<br />
<br />
[https://github.com/opsengine/cpulimit Cpulimit] is a program to limit the CPU usage percentage of a specific process. After installing {{Pkg|cpulimit}}, you may limit the CPU usage of a processes' PID using a scale of 0 to 100 times the number of CPU cores that the computer has. For example, with eight CPU cores the precentage range will be 0 to 800. Usage:<br />
<br />
$ cpulimit -l 50 -p 5081<br />
<br />
=== irqbalance ===<br />
<br />
The purpose of {{Pkg|irqbalance}} is distribute hardware interrupts across processors on a multiprocessor system in order to increase performance. It can be [[systemd#Using units|controlled]] by the provided {{ic|irqbalance.service}}.<br />
<br />
== Graphics ==<br />
<br />
As with CPUs, overclocking can directly improve performance, but is generally recommended against. There are several packages in the [[AUR]], such as {{AUR|amdoverdrivectrl}} (ATI) and {{AUR|nvclock}} (NVIDIA).<br />
<br />
=== Xorg configuration ===<br />
<br />
Graphics performance may depend on the settings in {{man|5|xorg.conf}}; see the [[NVIDIA]], [[ATI]] and [[Intel]] articles. Improper settings may stop Xorg from working, so caution is advised.<br />
<br />
=== Mesa configuration ===<br />
<br />
The performance of the Mesa drivers can be configured via [https://dri.freedesktop.org/wiki/ConfigurationInfrastructure/ drirc]. GUI configuration tools are available:<br />
* {{App|adriconf (Advanced DRI Configurator)|Tool to set options and configure applications using the standard drirc file used by the Mesa drivers.|https://github.com/jlHertel/adriconf/|{{AUR|adriconf}}}}<br />
* {{App|DRIconf|Configuration applet for the Direct Rendering Infrastructure. It allows customizing performance and visual quality settings of OpenGL drivers on a per-driver, per-screen and/or per-application level.|https://dri.freedesktop.org/wiki/DriConf/|{{Pkg|driconf}}}}<br />
<br />
=== Overclocking with amdgpu ===<br />
<br />
{{Move|AMDGPU|There is a dedicated page.}}<br />
<br />
Since Linux 4.17, it is possible to adjust clocks and voltages of the graphics card via {{Ic|1=/sys/class/drm/card0/device/pp_od_clk_voltage}}. It is however required to unlock access to it in sysfs by appending the boot parameter {{Ic|1=amdgpu.ppfeaturemask=0xffffffff}}.<br />
<br />
After this, the range of allowed values must be increased to allow higher clocks than used by default. To allow the maximum GPU clock to be increased by e.g. up to 2%, run:<br />
echo "2" > /sys/class/drm/card0/device/pp_sclk_od<br />
{{Note|Running cat {{Ic|/sys/class/drm/card0/device/pp_sclk_od}} does always return either 1 or 0, no matter the value added to it via {{Ic|echo}}.}}<br />
Unlike with previous kernel versions, this alone doesn't lead to a higher clock. The values in {{Ic|pp_od_clk_voltage}} for the pstates have to be adjusted as well. It's a good idea to get the default values as a guidance by simply reading the file. In this example, the default clock is 1196MHz and a range increase by 2% allows up to 1219MHz.<br />
<br />
To set the GPU clock for the maximum pstate 7 on a Polaris GPU to 1209MHz and 900mV voltage, run:<br />
# echo "s 7 1209 900" > /sys/class/drm/card0/device/pp_od_clk_voltage<br />
{{Warning|1=Double check the entered values, as mistakes might instantly cause fatal hardware damage!}}<br />
To apply, run<br />
# echo "c" > /sys/class/drm/card0/device/pp_od_clk_voltage<br />
To check if it worked out, read out clocks and voltage under 3D load:<br />
# watch -n 0.5 cat /sys/kernel/debug/dri/0/amdgpu_pm_info<br />
You can reset to the default values using this:<br />
# echo "r" > /sys/class/drm/card0/device/pp_od_clk_voltage<br />
<br />
To set the allowed maximum power consumption of the GPU to e.g. 50 Watts, run<br />
# echo 50000000 > /sys/class/drm/card0/device/hwmon/hwmon0/power1_cap<br />
If the video card bios doesn't provide a maximum value above the default setting, you can only decrease the power limit, but not increase.<br />
{{Note|The above procedure was tested with a Polaris RX 560 card. There may be different behavior or bugs with different GPUs.}}<br />
<br />
== RAM and swap ==<br />
<br />
=== Clock frequency and timings ===<br />
<br />
RAM can run at different clock frequencies and timings, which can be configured in the BIOS. Memory performance depends on both values. Selecting the highest preset presented by the BIOS usually improves the performance over the default setting. Note that increasing the frequency to values not supported by both motherboard and RAM vendor is overclocking, and similar risks and disadvantages apply, see [[#Overclocking]].<br />
<br />
=== Root on RAM overlay ===<br />
<br />
If running off a slow writing medium (USB, spinning HDDs) and storage requirements are low, the root may be run on a RAM overlay ontop of read only root (on disk). This can vastly improve performance at the cost of a limited writable space to root. See {{AUR|liveroot}}.<br />
<br />
=== Zram or zswap ===<br />
<br />
The [https://www.kernel.org/doc/Documentation/blockdev/zram.txt zram] kernel module (previously called '''compcache''') provides a compressed block device in RAM. If you use it as swap device, the RAM can hold much more information but uses more CPU. Still, it is much quicker than swapping to a hard drive. If a system often falls back to swap, this could improve responsiveness. Using zram is also a good way to reduce disk read/write cycles due to swap on SSDs.<br />
<br />
Similar benefits (at similar costs) can be achieved using [[zswap]] rather than zram. The two are generally similar in intent although not operation: zswap operates as a compressed RAM cache and neither requires (nor permits) extensive userspace configuration.<br />
<br />
Example: To set up one lz4 compressed zram device with 32GiB capacity and a higher-than-normal priority (only for the current session):<br />
<br />
# modprobe zram<br />
# echo lz4 > /sys/block/zram0/comp_algorithm<br />
# echo 32G > /sys/block/zram0/disksize<br />
# mkswap --label zram0 /dev/zram0<br />
# swapon --priority 100 /dev/zram0<br />
<br />
To disable it again, either reboot or run<br />
<br />
# swapoff /dev/zram0<br />
# rmmod zram<br />
<br />
A detailed explanation of all steps, options and potential problems is provided in the official documentation of the module [https://www.kernel.org/doc/Documentation/blockdev/zram.txt here].<br />
<br />
The {{Pkg|systemd-swap}} package provides a {{ic|systemd-swap.service}} unit to automatically initialize zram devices. Configuration is possible in {{ic|/etc/systemd/swap.conf}}.<br />
<br />
The package {{AUR|zramswap}} provides an automated script for setting up such swap devices with optimal settings for your system (such as RAM size and CPU core number). The script creates one zram device per CPU core with a total space equivalent to the RAM available, so you will have a compressed swap with higher priority than regular swap, which will utilize multiple CPU cores for compressing data. To do this automatically on every boot, [[enable]] {{ic|zramswap.service}}.<br />
<br />
==== Swap on zRAM using a udev rule ====<br />
<br />
The example below describes how to set up swap on zRAM automatically at boot with a single udev rule. No extra package should be needed to make this work.<br />
<br />
First, enable the module:<br />
<br />
{{hc|/etc/modules-load.d/zram.conf|<nowiki><br />
zram<br />
</nowiki>}}<br />
<br />
Configure the number of /dev/zram nodes you need.<br />
<br />
{{hc|/etc/modprobe.d/zram.conf|<nowiki><br />
options zram num_devices=2<br />
</nowiki>}}<br />
<br />
Create the udev rule as shown in the example.<br />
<br />
{{hc|/etc/udev/rules.d/99-zram.rules|<nowiki><br />
KERNEL=="zram0", ATTR{disksize}="512M" RUN="/usr/bin/mkswap /dev/zram0", TAG+="systemd"<br />
KERNEL=="zram1", ATTR{disksize}="512M" RUN="/usr/bin/mkswap /dev/zram1", TAG+="systemd"<br />
</nowiki>}}<br />
<br />
Add /dev/zram to your fstab.<br />
<br />
{{hc|/etc/fstab|<nowiki><br />
/dev/zram0 none swap defaults 0 0<br />
/dev/zram1 none swap defaults 0 0<br />
</nowiki>}}<br />
<br />
=== Using the graphic card's RAM ===<br />
<br />
In the unlikely case that you have very little RAM and a surplus of video RAM, you can use the latter as swap. See [[Swap on video ram]].<br />
<br />
== Network ==<br />
<br />
* Kernel networking: see [[Sysctl#Improving performance]]<br />
* NIC: see [[Network configuration#Set device MTU and queue length]]<br />
* DNS: consider using a caching DNS resolver, see [[Domain name resolution#Resolvers]]<br />
* Samba: see [[Samba#Improve throughput]]<br />
<br />
== Watchdogs ==<br />
According to [[wikipedia:Watchdog_timer]]:<br />
:A watchdog timer [...] is an electronic timer that is used to detect and recover from computer malfunctions. During normal operation, the computer regularly resets the watchdog timer [...]. If, [...], the computer fails to reset the watchdog, the timer will elapse and generate a timeout signal [...] used to initiate corrective [...] actions [...] typically include placing the computer system in a safe state and restoring normal system operation.<br />
<br />
Many users need this feature due to their system's mission-critical role (i.e. servers), or because of the lack of power reset (i.e. embedded devices). Thus, this feature is required for a good operation in some situations. On the other hand, normal users (i.e. desktop and laptop) do not need this feature and can disable it.<br />
<br />
To disable watchdog timers (both software and hardware), append {{ic|nowatchdog}} to your boot parameters.<br />
<br />
To check the new configuration do:<br />
# cat /proc/sys/kernel/watchdog<br />
or use:<br />
# wdctl<br />
<br />
After you disabled watchdogs, you can ''optionally'' avoid the loading of the module responsible of the hardware watchdog, too. Do it by [[blacklisting]] the related module, e.g. {{ic|iTCO_wdt}}.<br />
<br />
{{Note|1=Some users [https://bbs.archlinux.org/viewtopic.php?id=221239 reported] the {{ic|nowatchdog}} parameter does not work as expected but they have successfully disabled the watchdog (at least the hardware one) by blacklisting the above-mentioned module.}}<br />
<br />
Either action will speed up your boot and shutdown, because one less module is loaded. Additionally disabling watchdog timers increases performance and [[Power_management#Disabling_NMI_watchdog|lowers power consumption]].<br />
<br />
See [https://bbs.archlinux.org/viewtopic.php?id=163768], [https://bbs.archlinux.org/viewtopic.php?id=165834], [http://0pointer.de/blog/projects/watchdog.html], and [https://www.kernel.org/doc/Documentation/watchdog/watchdog-parameters.txt] for more information.<br />
<br />
== See also ==<br />
<br />
* [https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Performance_Tuning_Guide/index.html Red Hat Performance Tuning Guide]<br />
* [https://www.thomas-krenn.com/en/wiki/Linux_Performance_Measurements_using_vmstat Linux Performance Measurements using vmstat]</div>Holycowhttps://wiki.archlinux.org/index.php?title=Arch_Linux_on_a_VPS&diff=536063Arch Linux on a VPS2018-08-19T05:14:47Z<p>Holycow: Less obvious ArchLinux providers, mostly available on request</p>
<hr />
<div>[[Category:Getting and installing Arch]]<br />
[[Category:Virtualization]]<br />
[[ja:Arch Linux VPS]]<br />
[[zh-hans:Arch Linux VPS]]<br />
{{Related articles start}}<br />
{{Related|Server}}<br />
{{Related articles end}}<br />
From [[Wikipedia:Virtual private server]]:<br />
<br />
:Virtual private server (VPS) is a term used by Internet hosting services to refer to a virtual machine. The term is used for emphasizing that the virtual machine, although running in software on the same physical computer as other customers' virtual machines, is in many respects functionally equivalent to a separate physical computer, is dedicated to the individual customer's needs, has the privacy of a separate physical computer, and can be configured to run server software.<br />
<br />
This article discusses the use of Arch Linux on Virtual Private Servers, and includes some fixes and installation instructions specific to VPSes.<br />
<br />
{{Warning|<br />
* Since many container-based virtualization environments rely on older kernels, it may be impossible to keep an Arch Linux install up-to-date in such an environment. Linux 2.6.32, used by OpenVZ 6, is not supported by systemd since version 205 (and will not work with systemd-212 or higher). OpenVZ does sometimes backport newer kernel features into its kernel, but as of 2018-06-27, a fresh installation of Arch does not work on OpenVZ 6 kernel version 2.6.32-042stab131.1 . Arch can be installed on OpenVZ 7, with [[#Preparing the Arch build for use on an OpenVZ 7 container|a minor workaround]], as of OpenVZ 7 kernel version 3.10.0-693-21.1.vz7.48.2 .}}<br />
<br />
==Providers that offer Arch Linux==<br />
<br />
{{Warning|We cannot vouch for the honesty or quality of any provider. Please conduct due diligence before ordering.}}<br />
{{Note|This list is for providers with a convenient Arch Linux template. Using Arch on other providers is possible but requires more work. Example methods include: <br />
* Loading custom disc images (requires hardware virtualization such as in Xen or KVM), <br />
* [[Installation guide|Installing under chroot]], for example with the help of the [https://gitlab.com/drizzt/vps2arch/ vps2arch] script (it will download the latest iso; be particularly aware of the systemd 220/221 [https://github.com/systemd/systemd/issues/421 bug]), or <br />
* Following [[#Installing the latest Arch Linux on any OpenVZ container provider]] instructions, using rsync to synchronize Arch over the top of another distribution.}}<br />
<br />
{| class="wikitable"<br />
! Provider !! Arch Release !! Virtualization !! Locations !! Notes<br />
|-<br />
| [http://4smart.cz/ 4smart.cz] || 2013.08 || OpenVZ || Prague, CZ || (Czech language site only) when updating system make sure you use [tredaelli-systemd] in pacman.conf (see [[Unofficial user repositories]]<br />
|-<br />
| [https://www.affinity.net.nz/ affinity.net.nz] || 2013.08.01 || KVM || Auckland, New Zealand (NZ) || IRC channel is #affinity on ircs.kiwicon.org<br />
|-<br />
| [https://www.atlantic.net/ Atlantic.Net] || 2016.03.01 || KVM || NYC/SF/Toronto/Dallas/Orlando, US & Canada || 100% SSD 1-click Arch Linux, ready in 30 seconds. It is also easy to update Arch to the current version because the pre-provisioned Arch image is relatively current.<br />
|-<br />
| [https://buyvm.net/ BuyVM] || 2013.07.01 || KVM || LA, Buffalo NY || Must chose a different OS at sign up. Once accessible, choose to mount the latest Arch ISO and reboot to install manually. <br />
|-<br />
| [https://coinshost.com/en/vps Coinshost] || 2015.04 || Xen || Zurich, Switzerland || Bitcoin and other cryptocurrencies accepted.<br />
|-<br />
| [https://cherry.host Cherry Host] || Latest || KVM || Santee, US-CA || Must submit a support ticket to get Arch installed.<br />
|-<br />
| [https://contabo.com Contabo] || Latest || KVM || German || Only place to get 500 GB for 7€ - Decent speed. Other cheaps plans add snapshots, which is useful if you VPS runs a rolling release distro.<br />
|-<br />
| [https://www.directvps.nl/ DirectVPS] || 2014.01.xx || OpenVZ || Amsterdam, NL; Rotterdam, NL || (Dutch language site only)<br />
|-<br />
| [http://www.edis.at/en/ Edis] || [http://www.edis.at/en/support-and-service/faq/server-faq/which-distributions-are-available-with-edis-kvm-vps-plans/ 2013.03.01] || vServer, KVM, OpenVZ || [http://www.edis.at/en/server/kvm-vps/austria/ Multiple international locations]. || Also offer dedicated server options as well as an "off-shore" location at the Isle of Man (IM). Requires mounting an Arch ISO for a full manual install.<br />
|-<br />
| [https://www.gigatux.com/virtual.php GigaTux] || [https://www.gigatux.com/distro/ 2013.06.01] || Xen || Chicago, US-IL; Frankfurt, DE; London, GB; San Jose, US-CA || Currently, when changing to the US$ currency, the page breaks and it is not possible to provision a server.<br />
|-<br />
| [https://www.hostvirtual.com/ Host Virtual] || [https://www.hostvirtual.com/os/linux-vps/archlinux-vps 2014.06.01] || KVM || [http://www.vr.org/cloud-locations/ Multiple International Locations] || Appears to use KVM virtualization. Site lists "Xen based virtualization" and [http://www.vr.org/features/ features] lists ability to install from ISO. VPS plans are very expensive with an setup fee as well.<br />
|-<br />
| [https://hostigation.com/ Hostigation] || [https://hostigation.com/?page=KVM Latest] || OpenVZ, KVM || Charlotte, US-NC; Los Angeles, US-CA || Arch is '''not''' currently listed as a choice.<br />
|-<br />
| [https://www.kloud51.com Kloud51] || Unlisted || OpenVZ || US-CA, Canada || Presently, the website does not list any VPS plans.<br />
|-<br />
| [https://leapswitch.com Leapswitch Networks] || 2013.10.xx || OpenVZ/KVM || USA, India, Portugal, Spain, Ukraine, Germany || Arch Linux currently available in Control Panel for reinstall, not on order form. <br />
|-<br />
| [https://linevast.de Linevast.de] || Latest || OpenVZ, KVM || Germany || Arch Linux is possible on openvz and on KVM with the one click os installer. <br />
|-<br />
| [https://www.linode.com Linode.com] || [https://blog.linode.com/2016/06/13/arch-linux-network-configuration-update/ 2016.06.01] || Xen, KVM || [https://www.linode.com/speedtest/ Tokyo, JP; Multiple US; London, GB] || To run a custom kernel, install {{AUR|linux-linode}} ({{pkg|linux}} will break on a 32-bit Linode). When shipped, the NIC enp4s0 is renamed to eth0 and reverts back to enp4s0 on reboot --- on reboot, this may cause sshd load to fail.<br />
|-<br />
| [http://lylix.net/ LYLIX] || [http://lylix.net/archlinux 2014.01.xx] || OpenVZ || Multiple US; Europe || 32-bit and 64-bit available <br />
|-<br />
| [https://www.netcup.de/ Netcup] || 2012.11.xx || KVM || Germany (DE)|| (German language site only)<br />
|-<br />
| [https://www.medhahosting.com MedHaHosting ] || Latest || KVM || Buffalo, NY, USA; Atlanta, GA, USA; Chicago, IL, USA; Los Angeles, CA, USA || ArchLinux available on request. Many Linux and Windows hosting options. <br />
|-<br />
| [https://www.onepoundwebhosting.co.uk/ OnePoundWebHosting] || 2014.01 || Xen PV, Xen HVM || United Kingdom (UK) || They are a registrar too. Unable to verify server locations.<br />
|-<br />
| [https://www.ovh.com/us/vps/ OVH] || Latest || KVM || France, Canada ||<br />
|-<br />
| [https://pacmanvps.com/ PacmanVPS] || 2014.01 || KVM || Canada (CA), Poland (PL) || Arch image is very old and PacmanVPS repos are broken. Not possible to update Arch. Site appears unmaintained.<br />
|-<br />
| [https://www.proplay.de/ Proplay] || Latest || OpenVZ, KVM || Germany (DE) || (German language site only)<br />
|-<br />
| [https://www.rackspace.com/cloud/servers Rackspace Cloud] || 2013.6 || Xen || [https://www.rackspace.com/whyrackspace/network/datacenters/ Multiple international locations] || Billed per hour. Use their "next gen" VPSes (using the mycloud.rackspace.com panel); the Arch image on the first gen Rackspace VPSes is out of date.<br />
|-<br />
| [http://www.ramhost.us/ RamHost.us] || [http://www.ramhost.us/?page=news 2013.05.01] || OpenVZ, KVM || Los Angeles, US-CA; Great Britain (GB); Atlanta, US-GA; Germany (DE) || You can request a newer ISO on RamHost's IRC network.<br />
|-<br />
| [http://www.ramnode.com/ RamNode] || [https://clientarea.ramnode.com/knowledgebase.php?action=displayarticle&id=48 2016.01.01] || [https://clientarea.ramnode.com/knowledgebase.php?action=displayarticle&id=39 SSD and SSD Cached:] [https://clientarea.ramnode.com/knowledgebase.php?action=displayarticle&id=52 KVM] || [https://clientarea.ramnode.com/knowledgebase.php?action=displayarticle&id=50 Alblasserdam, NL; Atlanta, GA-US; Los Angeles, CA-US; New York, NY-US; Seattle, WA-US] || You can request Host/CPU passthrough with KVM service.[https://clientarea.ramnode.com/knowledgebase.php?action=displayarticle&id=66] Frequent use of discount promotions.[https://twitter.com/search?q=ramnode%20code&src=typd], Must install Arch manually from an ISO using VNC viewer.<br />
|-<br />
| [https://www.rosehosting.com/ RoseHosting] || Latest || OpenVZ, KVM || St. Louis, Missouri, USA || SSD powered hosting plans with free fully-managed 24/7 support. No unmanaged VPS offerings.<br />
|-<br />
| [https://www.seedvps.com/ SeedVPS] || Latest || OpenVZ, KVM || Amsterdam, Netherlands || Linux VPS and Windows VPS Hosting in The Netherlands (NL). Newer ISO can be requested by opening a support ticket.<br />
|-<br />
| [https://www.servercheap.net Server Cheap] || Latest || OpenVZ, KVM || Chicago, Illinois, USA || ArchLinux available on request. Windows, BSD, and many Linux distribution hosting options. <br />
|-<br />
| [https://www.tilaa.com/ Tilaa] || 2016.03.01 || [https://www.tilaa.com/pages/vps/technology KVM] || Amsterdam, NL ||<br />
|-<br />
| [https://www.transip.eu/ TransIP] || [https://www.transip.eu/vps/vps-os/ 2017.01.01] || [https://www.transip.eu/vps/vps-technology/ KVM] || Amsterdam, NL || For latest image, submit ticket. Also registrar.<br />
|-<br />
| [https://upcube.io upCUBE] || Latest || Docker || Germany || Different prepared arch linux templates available<br />
|-<br />
| [http://virpus.com/ Virpus] || [http://virpus.com/linux-vps.php 2014.11.07] || Xen || Kansas City, US-KS; Los Angeles, US-CA || Arch is '''not''' offered as a choice when creating a server (even though the Arch logo is prominently featured on the site). As of 2018, the most recent version of Ubuntu offered is 14.04, and the limited-time promo code for new sign ups is over two years old. None of this generates much trust.<br />
|-<br />
| [https://www.virtualmaster.com/ Virtual Master] || 2012-08 || ?? || Prague, CZ ||<br />
|-<br />
| [https://vps6.net/ VPS6.NET] || 2013.01.xx || OpenVZ, Xen, HVM-ISO || [http://vps6.net/network/ Multiple US]; Frankfurt, DE; Bucharest, RO; Istanbul, TR || Registrar.<br />
|-<br />
| [https://www.vpsbg.eu/ VPSBG.eu] || 2013.10 || OpenVZ || [https://vpsbg.eu/en/index.php?page=vps-datacenter Sofia, Bulgaria] || Offshore VPS in Bulgaria - anonymous registrations and Bitcoin are accepted.<br />
|-<br />
| [https://www.vpscheap.net VPSCHEAP] || Latest || NVM KVM || Dallas, TX, USA || Has one plan that allows you to select ArchLinux, but doesn't appear in any other plan, but available on request <br />
|-<br />
| [https://www.vpsserver.com/ VPSSERVER] || 2015.07 || KVM || Chicago, US-IL; Dallas, US-TX; Miami, US-FL; New York, US-NY; Silicon Valley, US-CA; Amsterdam, NL; Frankfurt, DE; London, UK || Currently the latest Archlinux OS version we are providing is 2015.07 x64 and you can't update the OS version to the new version.<br />
|-<br />
| [https://www.world4you.com/ World4You] || 2015.10.28 || OpenVZ || Austria (AT) || Internet hosting provider; quick setup; 24/7 support; shared web hosting; also CentOS, Debian, Ubuntu, Fedora and Arch OpenVZ servers; supports newest systemd (227 atm)<br />
|-<br />
| [http://www.xenvz.co.uk/ XenVZ] || 2009.12.07 || OpenVZ, Xen || United Kingdom (UK), United States (US) || [http://www.xenvz.co.uk/faq.php#use2 Hardware]<br />
|-<br />
| [https://www.1984hosting.com/ 1984hosting.com] || 2016.x || Xen || Iceland (IS) || [https://www.1984hosting.com/product/vps/ Hardware] will provide any image you request, has Arch in default image list.<br />
|-<br />
| [https://www.zeptovm.com/ ZeptoVM] || Latest || KVM || St. Petersburg, RU; Khabarovsk, RU; Seoul, KR; Ashburn, US || Also provides local Archlinux mirror in some locations.<br />
|-<br />
|}<br />
<br />
==Installation==<br />
<br />
===KVM===<br />
{{Expansion|Are there instructions specific to VPSes?}}<br />
See [[QEMU#Preparing an (Arch) Linux guest]].<br />
<br />
===OpenVZ===<br />
<br />
====Installing the latest Arch Linux on any OpenVZ container provider====<br />
<br />
{{Warning|See the [[#top|above warning]] about older kernel versions and systemd, and note the [[#Preparing the Arch build for use on an OpenVZ 7 container|workaround for OpenVZ 7 below]].}}<br />
<br />
It is possible to directly copy an installation of Arch Linux over the top of a working OpenVZ VPS. This tutorial explains how to create a basic installation of Arch Linux with {{ic|pacstrap}} (as used in a standard install) and then replace the contents of a target VPS with it using [[rsync]].<br />
<br />
This process (with minor modification) also works to migrate existing Arch installations between various environments and has been confirmed to work in migrating from OpenVZ to Xen and from Xen to OpenVZ. For an install to Xen, other hardware-virtualized platforms, or even to physical hardware, extra steps (basically running {{ic|mkinitcpio}} and [[Boot loaders|installing a bootloader]]) are needed.<br />
<br />
=====Prerequisites=====<br />
<br />
* A working Arch Linux installation<br />
** To keep things simple, it should match the architecture you want to install on your VPS (x86_64 or i686).<br />
** To build from other distributions, [[Archbootstrap|arch-bootstrap.sh]] can be used in place of {{ic|pacstrap}}.<br />
* The {{Pkg|arch-install-scripts}}, {{Pkg|rsync}}, and {{Pkg|openssh}} packages from the [[official repositories]]<br />
** SSH is not strictly required, but rsync over SSH is the method used here.<br />
* A VPS running any distribution, with {{ic|rsync}} and a working SSH server<br />
** Its architecture (x86_64 or i686) does not matter as long as the OpenVZ installation can support your target architecture.<br />
* OpenVZ's serial console feature (usually accessible via your provider's control panel)<br />
** Without this, any network configuration for the target VPS will have to be done immediately after the "Build" step below.<br />
<br />
=====Building a clean Arch Linux installation=====<br />
<br />
As root, build the installation (optionally replacing {{ic|build}} with your preferred target directory):<br />
<br />
# mkdir build<br />
# pacstrap -cd build<br />
<br />
Other tweaks for the {{ic|pacstrap}} command:<br />
<br />
*{{ic|-C custom-pacman-config.conf}} - Use a custom pacman configuration file. By default, {{ic|pacstrap}} builds according to your local pacman.conf. This determines the architecture (i686 or x86_64) of the build, the mirror list, etc.<br />
*{{ic|-G}} - Prevent {{ic|pacstrap}} from copying your system's pacman keyring to the new build. If you use this option, you will need to run {{ic|pacman-key --init}} and {{ic|pacman-key --populate archlinux}} in the [[#Configuration|Configuration]] step to set up the keyring.<br />
*{{ic|-M}} - Prevent {{ic|pacstrap}} from copying your system's pacman mirror list to the new build.<br />
*You can pass a list of packages to {{ic|pacstrap}} to add them to your install, instead of the default {{ic|base}} group. For example: {{ic|pacstrap -cd build base openssh dnsutils gnu-netcat traceroute vim}}<br />
<br />
======Preparing the Arch build for use on an OpenVZ 7 container======<br />
<br />
OpenVZ 7 will fail to start a container if some expected network configuration files don't exist. The easiest way to get around this is as follows:<br />
<br />
# Create the OpenVZ 7 container as Debian 8 (Debian 9 would probably work as well).<br />
# Create the required blank network configuration files inside the Arch build, as follows:<br />
# mkdir build/etc/network<br />
# touch build/etc/network/interfaces<br />
# mkdir -p build/etc/resolvconf/resolv.conf.d<br />
# touch build/etc/resolvconf/resolv.conf.d/base<br />
<br />
=====Replacing everything on the VPS with the Arch build=====<br />
<br />
Replace all files, directories, etc. on your target VPS with the contents of your {{ic|build}} directory (replacing "YOUR.VPS.IP.ADDRESS" below):<br />
<br />
{{Warning|Be careful with the following command. By design, {{ic|rsync}} is very destructive, especially with any of the {{ic|--delete}} options.}}<br />
<br />
# rsync -axH --numeric-ids --delete-delay -e ssh --stats -P build/ YOUR.VPS.IP.ADDRESS:/<br />
<br />
Explanation of options:<br />
<br />
* {{ic|-a}} - Required. Preserves timestamps, permissions, etc.<br />
* {{ic|--delete}} - Required. Deletes anything in the target that does not exist in the source<br />
* {{ic|-x}} - Important. Prevents the crossing of filesystem boundaries (other partitions, /dev, etc.) during the copy<br />
* {{ic|-H}} - Important. Preserves hardlinks<br />
* {{ic|--numeric-ids}} - Important. Doesn't assign user/group ownership of files based on matching user and group names and instead uses the numeric IDs directly, ensuring proper file ownership on the target system<br />
* {{ic|--delete-delay}} - Recommended. Enables alternate deletion mode which waits to delete anything until the synchronization is otherwise complete, which may reduce the risk of a slow transfer causing the target VPS to lock-up<br />
* {{ic|-e ssh}} - Recommended. Uses {{ic|rsync}} over SSH (recommended for simplicity compared to setting up an {{ic|rsync}} server)<br />
* {{ic|-P}} - Recommended. Shows partial progress information during transfer<br />
* {{ic|--stats}} - Recommended. Shows transfer statistics at the end<br />
<br />
=====Configuration=====<br />
<br />
# Reboot the VPS externally (using your provider's control panel, for example).<br />
# Using OpenVZ's serial console feature, configure the [[network]] and [[Installation_guide#Configure_the_system|basic system settings]] (ignoring fstab generation and arch-chroot steps).<br />
#* If you do not have access to the serial console feature, you will need to preconfigure your network settings before synchronizing Arch to the VPS.<br />
#* On some VPS configuration you won't have a gateway to connect to, here is an example [[netctl]] configuration for this setup. It configures static IP addresses and default routes on venet0 and uses Google Public DNS.<br />
{{hc|/etc/netctl/venet|2=<br />
Description='VPS venet connection'<br />
Interface=venet0<br />
Connection=ethernet<br />
<br />
IP=static<br />
Address=('192.0.2.42/32')<br />
Routes=('default')<br />
<br />
IP6=static<br />
Address6=('2001:db8::1234:5678/128')<br />
Routes6=('default')<br />
<br />
DNS=('2001:4860:4860::8888' '2001:4860:4860::8844' '8.8.8.8' '8.8.4.4')<br />
}}<br />
<br />
===Xen===<br />
{{Expansion|Are there instructions specific to VPSes?}}<br />
See [[Xen]].</div>Holycow