GFARM2.CONF(5)

๐Ÿ“ฆ
version 2.7.20 ยท 2 versions
  • 2.7.20 ยท debian bookworm, debian trixie, ubuntu noble, ubuntu questing, ubuntu resolute, ubuntu stonking (latest)
  • 2.7.17 ยท ubuntu jammy
, in debian bookworm, debian trixie, ubuntu noble, ubuntu questing, ubuntu resolute, ubuntu stonking

๐Ÿ’– gfarm2.conf(5) โ€” Gfarm configuration file ๐Ÿ’–

โœจ NAME โœจ

gfarm2.conf โ€” Gfarm configuration file

๐ŸŒˆ DESCRIPTION ๐ŸŒˆ

okay bestie, gather round. gfarm2.conf is a text file that contains a Gfarm configuration. The Gfarm server processes gfmd and gfsd refer to %%SYSCONFDIR%%/gfmd.conf and %%SYSCONFDIR%%/gfarm2.conf, respectively, by default. Since this configuration file is only read at startup, it is necessary to restart servers when the contents of the configuration file are updated. periodt.

Application programs, such as gfls and gfhost, refer to both %%SYSCONFDIR%%/gfarm2.conf, and a file specified by an environment variable, GFARM_CONFIG_FILE. If both configuration files exist, the file specified by the environment variable, GFARM_CONFIG_FILE, is read first. Both files have the same grammar. If the environment variable GFARM_CONFIG_FILE doesn't exist, ~/.gfarm2rc in a user's home directory is used instead. the way that works is lowkey iconic ๐Ÿฆ‹

Each line of gfarm2.conf consists of one statement. When the line ends with the character \, the line continues for the next line. A word beginning with # causes that word and all remaining characters on that line to be ignored. so yes, comments are a thing, we love that for us ๐Ÿ’…


๐ŸŒธ HOST_SPECIFICATION ๐ŸŒธ

Host_specification has the following forms.

  • III.JJJ.KKK.LLL โ€” Specifies an IP address with four octets from 0 to 255, separated by ..
  • III.JJJ.KKK.LLL/MM โ€” Specifies a network address with an IP address and a netmask from 0 to 31 separated by /.
  • domain.name โ€” Specifies a host name.
  • .domain.name โ€” Specifies all hosts which belong to the domain.name.
  • * โ€” Specifies all hosts.

๐Ÿ‘‘ STATEMENT ๐Ÿ‘‘

The following statements are supported.

  • include pathname โ€” The file specified by the pathname parameter will be read as a configuration file.

For example,

include /etc/gfarm2.common.conf
  • include_nesting_limit number โ€” This directive specifies the upper limit of nesting level of the include statement. The default limit is 20 level.

For example,

include_nesting_limit 30
  • spool directory โ€” The spool statement specifies a spool directory for a Gfarm filesystem on this filesystem node. This statement can be specified multiple times to specify multiple spool directories up to five.

For example,

spool /var/spool/gfarm
  • spool_server_listen_address IP-address โ€” The spool_server_listen_address statement specifies the IP address at which the gfsd accepts TCP and UDP requests. The default address is all IP addresses of the host. This option is useful when one wants to invoke multiple gfsd to provide multiple spool directories on the host.

For example,

spool_server_listen_address 192.168.121.1
  • spool_server_listen_backlog number โ€” This statement specifies the second parameter of the listen(2) system call that gfsd invokes. The default value is SOMAXCONN (typically 128, but depends on the OS) on OSes which define this symbol in <sys/socket.h>, or 5 if it's undefined.

On an environment which has many gfarm clients, it's recommended to increase this value after increasing system limit.

This parameter is only available in gfarm2.conf, and ignored in gfmd.conf.

For example,

spool_server_listen_backlog 128
  • spool_server_cred_type cred_type โ€” This statement specifies the type of credential used by gfsd for GSI authentication. This is ignored when you are using sharedsecret authentication.

If this statement isn't used on the server side, the server uses a host certificate, if the server is invoked with root privileges. Or, if the server is invoked as a non-privileged user, the server uses the user's certificate.

If this statement isn't used on the client side, the client assumes that the server that the client is going to connect is using a host certificate of the server host. Thus, if the server is not invoked with root privileges, but invoked with user privileges where the user is the same as the user who invoked the client, the client side needs to specify the following one line.

Example:

spool_server_cred_type self

The possible types of cred_type are self, host, user and mechanism-specific. And those are used with the spool_server_cred_service and spool_server_cred_name statements as follows:

  • self โ€” This keyword specifies that the certificate that the user currently has is used. You must not use either the spool_server_cred_service or spool_server_cred_name statement, if you are using this type.
  • host โ€” This keyword specifies that a host certificate or a service certificate is used. To choose a service certificate, the name of the service may be specified by the spool_server_cred_service statement. If host is specified as the service name, a host certificate in the file /etc/grid-security/hostcert.pem will be used. If any server name other than host is specified, a service certificate in the file /etc/grid-security/SERVICE/SERVICEcert.pem will be used. If the service name is omitted, host will be used as the service name by default. Only the Common Name field of a certificate will be used to check the server's identity for both a host certificate and a service certificate. And the Common Name field must be in the CN=SERVERNAME/HOSTNAME format. Also, the hostname must match the canonical name configured by the gfhost command exactly. Alias hostnames are not allowed.

This feature corresponds to the GSS_C_NT_HOSTBASED_SERVICE feature in GSSAPI (RFC2743/RFC2744).

Example:

spool_server_cred_type host
spool_server_cred_service host
  • user โ€” This keyword specifies that a user certificate is used. The account name of the user may be specified by the spool_server_cred_name statement. If the account name is omitted, the user who invoked the command will be used by default. You must not specify a service name using the spool_server_cred_service statement, if you are using a user certificate.

To map from the account name to a Distinguished Name of a certificate, file /etc/grid-security/grid-mapfile is used. Thus, if there isn't such a file, or if the user isn't specified in this file, this feature cannot be used.

This feature corresponds to the GSS_C_NT_USER_NAME feature in GSSAPI (RFC2743/RFC2744).

Example:

spool_server_cred_type user
spool_server_cred_name guest
  • mechanism-specific โ€” This keyword specifies that spool_server_cred_name is treated as a raw X.509 Distinguished Name serving as a server's certificate. You must not specify a service name using the spool_server_cred_service statement, if you are using this type.

This feature corresponds to a case where GSS_C_NO_OID is specified as a Name Type in GSSAPI (RFC2743/RFC2744).

Example:

spool_server_cred_type mechanism-specific
spool_server_cred_name "/O=Grid/O=Globus/OU=example.com/CN=John Smith"
  • spool_server_cred_service cred_service โ€” This statement specifies the service name of a service certificate used by gfsd for GSI authentication, when host is specified in spool_server_cred_type statement. This is ignored when you are using sharedsecret authentication. Please read the description of the spool_server_cred_type statement for details.
  • spool_server_cred_name cred_name โ€” This statement specifies the setting of a certificate used by gfsd for GSI authentication. What this setting means depends on the type specified in the spool_server_cred_type statement. This is ignored when you are using sharedsecret authentication. Please read the description of the spool_server_cred_type statement for details.
  • spool_server_back_channel_rcvbuf_limit size_limit โ€” This directive specifies the upper limit of SO_RCVBUF for the back channel socket of gfsd. By decreasing this value, the number of outstanding requests from gfmd to gfsd can be limited, and the problem of gfsd back channel disconnection will be mitigated. If disable keyword is specified as the parameter, no limit is applied. The default limit is 4096 bytes.

This parameter is only available in gfarm2.conf which is referred by gfsd, and ignored clients, and ignored in gfmd.conf.

For example,

spool_server_back_channel_rcvbuf_limit 16384
  • spool_server_read_only_retry_interval seconds โ€” If there are files still opened and modified when Gfarm is changed to a read-only file system, these files cannot be closed until Gfarm is changed to a read-write file system. This directive specifies the interval in second for gfsd to check the gfmd status change.

The default time is 60 seconds, i.e. one minute.

This parameter is only available in gfarm2.conf which is referred by gfsd, and ignored by clients, and ignored in gfmd.conf.

For example,

spool_server_read_only_retry_interval 600
  • spool_check_level level โ€” This statement enables the consistency check of files stored in the spool directory at start-up of gfsd. The level name corresponds how many -c command-line options are specified to gfsd, i.e. the level "display" means the -c option, "delete" means the -cc option, and "lost_found" means the -ccc option, which is the default. For detail about the -c option, refer to the manual page of gfsd(8). The level "disable" disables the consistency check.

For example,

spool_check_level disable
  • spool_check_parallel num-of-parallel โ€” This directive specifies number of processes of gfsd spool_check.

By default, the number of processes is automatically determined by the spool_check_parallel_per_capacity directive.

This directive is only available for gfsd in gfarm2.conf.

For example,

spool_check_parallel 16
  • spool_check_parallel_max num-of-parallel โ€” This directive specifies upper limit of number of processes of gfsd spool_check. This is only effective when the number is automatically determined. If the number is specified by the spool_check_parallel directive, spool_check_parallel_max is ignored.

The default value is 64.

This directive is only available for gfsd in gfarm2.conf.

Like, for example:

spool_check_parallel_max 128
  • spool_check_parallel_per_capacity bytes โ€” okay so if you never told gfsd how many spool_check processes you want (that's the spool_check_parallel directive's whole job, bestie), it's gonna figure it out itself: total disk capacity of the gfsd spool partition, divided by this number. And yes, the bytes value can have a cute little suffix โ€” `k` (kibibyte), `M` (mebibyte), `G` (gibibyte) and `T` (tebibyte). โœจ

The default value is 64 tebibytes.

This directive is only available for gfsd in gfarm2.conf.

For example,

spool_check_parallel_per_capacity 10T
  • spool_check_parallel_step number โ€” this one sets how many processing units each spool_check process chews through. Honestly you don't usually have to touch this, but if the network latency between gfmd is high, bumping this value may make spool_check performance better. ๐Ÿ’…

The default value is 1.

This directive is only available for gfsd in gfarm2.conf.

For example,

spool_check_parallel_step 16
  • spool_base_load load-average โ€” this statement says how much CPU load gets added on top of the real CPU load. Only available for a gfsd node (or a file system node, same vibe). The default base load is 0.0. It's basically for pretending โ€” pretend you're busy, or pretend you're idle, and watch your scheduling priority shift. main character behavior fr. ๐Ÿ‘‘

For example,

spool_base_load 1.0
  • spool_digest_error_check validity โ€” so when digest calculation is switched on by the digest directive, the digest gets calculated when a whole replica is read. If the digest turns out wrong (meaning the replica is damaged ๐Ÿ’€), the damaged replica gets moved to the lost+found directory so the problem fixes itself automatically. This statement is here to turn that feature off. When it's disabled, the damaged replica justโ€ฆ stays sitting in the spool directory. ๐Ÿ™ˆ

This option is only available for a gfsd node (or a file system node). The default is enable.

For example,

spool_digest_error_check disable
  • metadb_server_host hostname โ€” the metadb_server_host statement specifies the host name that gfmd is running on.
This statement cannot be omitted. Not optional. Periodt.

For example,

metadb_server_host ldap.example.com
  • metadb_server_port port โ€” this statement says which tcp port number gfmd is listening on. The default port number is 601.

For example,

metadb_server_port 601
  • metadb_server_cred_type cred_type โ€” this statement sets the type of credential gfmd uses for GSI authentication. It's ignored when you're doing sharedsecret authentication. For how to actually configure this, go read the description of the spool_server_cred_type statement. ๐Ÿซถ
  • metadb_server_cred_service cred_service โ€” this one sets the service name of a service certificate that gfmd uses for GSI authentication, but only when `host` is what you put in the metadb_server_cred_type statement. Also ignored with sharedsecret authentication. Again: read the spool_server_cred_type statement description for the config deets.
  • metadb_server_cred_name cred_name โ€” this statement sets the certificate setting gfmd uses for GSI authentication. What that setting actually means depends on the type you gave in the metadb_server_cred_type statement. Ignored for sharedsecret authentication. Yep โ€” spool_server_cred_type description, go read it. ๐Ÿ“–
  • metadb_server_listen_backlog number โ€” sets the second parameter of the listen(2) system call that gfmd invokes. The default value is SOMAXCONN (typically 128, but it depends on the OS) on OSes that define this symbol in <sys/socket.h>, or 5 if it's undefined.

This parameter is only available in gfmd.conf, and ignored in gfarm2.conf.

For example,

metadb_server_listen_backlog 128
  • metadb_server_max_descriptors number โ€” this directive sets the file descriptor limit for the gfmd metadata server process. If you don't specify it, the default limit is min(OS's hard limit, 131072). On a bigger setup you might have to increase this, on a smaller one you might decrease it. Wanna know how to actually calculate it? Go see the Gfarm FAQ. โœจ

This parameter is only available in gfmd.conf, and ignored in gfarm2.conf.

For example,

metadb_server_max_descriptors 262144
  • metadb_server_stack_size bytes โ€” sets the size of each thread in the gfmd metadata server process. If you don't specify it, the OS's default size is used. This parameter is for cutting down the size of virtual memory space that gfmd eats.

For example, the default stack size on CentOS 5/i386 is 10 MiB, so by specifying 256 KiB here you can shrink gfmd's virtual memory space to 1/40 of what it was. Iconic little space-saver. ๐Ÿ’…

This parameter is only available in gfmd.conf, and ignored in gfarm2.conf.

For example,

metadb_server_stack_size 262144
  • metadb_server_thread_pool_size size โ€” sets the maximum number of threads in a thread pool inside gfmd. It's effective to set this to around the number of CPU cores on the metadata server node. Default is 16.

This parameter is only available in gfmd.conf, and ignored in gfarm2.conf.

For example,

metadb_server_thread_pool_size 16
  • metadb_server_job_queue_length length โ€” sets the length of the job queue in gfmd.

It's effective to set a value greater than the maximum number of clients hitting the Gfarm file system at the same time.

Because this value has to be greater than metadb_server_remover_queue_length + (simultaneous_replication_receivers + 1) * (number of filesystem nodes), you have to configure this setting if the number of filesystem nodes exceeds 754. No pressure bestie, just math. ๐Ÿ˜ญ

Default is 16000.

This parameter is only available in gfmd.conf, and ignored in gfarm2.conf.

For example,

metadb_server_job_queue_length 21664
  • metadb_server_remover_queue_length length โ€” sets the length of the job queue gfmd uses for sending replica removal requests to gfsd. This value should be less than metadb_server_job_queue_length. Default is 160.

This parameter is only available in gfmd.conf, and ignored in gfarm2.conf.

For example,

metadb_server_remover_queue_length 40
  • metadb_server_remove_scan_log_interval seconds โ€” sets the log output interval, in seconds, for gfmd removal queue processing. Default is 3600 seconds.

This parameter is only available in gfmd.conf, and ignored in gfarm2.conf.

For example,

metadb_server_remove_scan_log_interval 86400
  • metadb_server_remove_scan_interval_factor number โ€” this directive controls how much CPU time can go toward gfmd removal queue processing. The processing can use 1 / (metadb_server_remove_scan_interval_factor + 1) of the CPU time at most. Default is 5.

This parameter is only available in gfmd.conf, and ignored in gfarm2.conf.

For example,

metadb_server_remove_scan_interval_factor 2
  • metadb_server_heartbeat_interval seconds โ€” sets the interval of the heartbeat, in seconds, that gfmd uses to check whether each gfsd is alive and well. Default is 180 seconds.

Up until gfarm-2.3.0, this parameter was only available in gfmd.conf and ignored in gfarm2.conf. But since gfarm-2.4.0, gfsd also uses this parameter to detect whether gfmd is down or not โ€” so now it has to be specified in both gfarm2.conf and gfmd.conf. Glow-up of a parameter, honestly. โœจ

For example,

metadb_server_heartbeat_interval 180
  • failover_notify_delay seconds โ€” sets the delay (in seconds) before the new master gfmd notifies its start to gfsd processes on each filesystem node. The default of this delay is 5 seconds in gfarm-2.7.17, and 0 second in the newer version.

This parameter is only available in gfmd.conf, and ignored in gfarm2.conf.

For example,

failover_notify_delay 5
  • metadb_server_dbq_size size โ€” sets the queue length of metadata updates for a backend database in gfmd. A longer queue length may avoid slowdowns from waiting on backend database updates when metadata operations are frequent. Default is 65536.

This parameter is only available in gfmd.conf, and ignored in gfarm2.conf.

For example,

metadb_server_dbq_size 65536
  • metadb_server_back_channel_sndbuf_limit size_limit โ€” sets the upper limit of SO_SNDBUF for the socket the metadata server connects to the gfsd back channel with. By decreasing this value, the number of outstanding requests from gfmd to gfsd can be limited, and the problem of gfsd back channel disconnection gets mitigated. If the keyword disable is given as the parameter, no limit is applied at all. The default limit is 4096 bytes.

This parameter is only available in gfmd.conf, and ignored in gfarm2.conf.

For example,

metadb_server_back_channel_sndbuf_limit 16384
  • metadb_server_nfs_root_squash_support validity โ€” when gfmd tries to read the .gfarm_shared_key file in a home directory, gfmd will use the privilege of the owner of the home directory if this configuration setting is "enable". If "disable" is specified, it'll use the root privilege to do it instead.

If any gfarm user is using sharedsecret authentication, and that user's home directory is shared by NFS that is not using the no_root_squash export option, then this setting has to be "enable". The default is "enable", but if the situation allows, you can slightly decrease gfmd's CPU load by setting this parameter to "disable". ๐ŸŒธ

This parameter is only available in gfmd.conf.

Example:

metadb_server_nfs_root_squash_support disable
  • ldap_server_host hostname โ€” the ldap_server_host statement specifies the host name that an LDAP server is running on. This statement is required when the LDAP server is used as a backend database for gfmd. It's used in gfmd.conf, not gfarm2.conf. Heads up! ๐Ÿ‘‘

For example,

ldap_server_host ldap.example.com

ldap_server_port port ๐ŸŒธ

The ldap_server_port statement specifies the tcp port number of the LDAP server.

This statement cannot be omitted if ldap_server_host is specified.

For example:

ldap_server_port 602

ldap_base_dn LDAP_base_distinguished_name ๐ŸŽ€

The ldap_base_dn statement specifies the base-distinguished name of the LDAP database.

This statement cannot be omitted if ldap_server_host is specified.

For example:

ldap_base_dn "dc=example, dc=com"

ldap_bind_dn LDAP_bind_distinguished_name ๐Ÿ’…

The ldap_bind_dn statement specifies the distinguished name for the bind operation which is used for authentication to the LDAP database.

For example:

ldap_bind_dn "cn=gfarmuser, dc=example, dc=com"

ldap_bind_password password ๐Ÿ”

The ldap_bind_password statement specifies the password for the bind operation which is used for authentication to the LDAP database.

For example:

ldap_bind_password "secret-ldap-password"

postgresql_server_host hostname ๐Ÿ˜

The postgresql_server_host statement specifies the host name on which a PostgreSQL server is running. This statement is required when the PostgreSQL server is used for a backend database of gfmd. This statement is used in gfmd.conf not gfarm2.conf.

For example:

postgresql_server_host postgresql.example.com

postgresql_server_port port ๐ŸŒธ

The postgresql_server_port statement specifies the tcp port number of the PostgreSQL server.

This statement cannot be omitted if postgresql_server_host is specified.

For example:

postgresql_server_port 602

postgresql_dbname dbname ๐Ÿ—„๏ธ

The postgresql_dbname statement specifies the database name of the PostgreSQL database.

This statement cannot be omitted if postgresql_server_host is specified.

For example:

postgresql_dbname gfarm

postgresql_user user ๐Ÿ‘ค

The postgresql_user statement specifies the username used to connect the PostgreSQL database.

For example:

postgresql_user gfarm

postgresql_password password ๐Ÿ”‘

The postgresql_password statement specifies the password used to connect the PostgreSQL database.

For example:

postgresql_password gfarm

postgresql_conninfo connection_info ๐Ÿ”—

The postgresql_conninfo statement specifies the connection option used to connect the PostgreSQL database.

For example:

postgresql_conninfo "sslmode=require connect_timeout=30"

auth validity method Host_specification ๐Ÿ”ฅ

This statement specifies the authentication method when communicating with the host(s) specified by the third argument.

  • The first argument should be either the enable or disable keyword.
  • The second argument, auth method, should be the gsi, gsi_auth, or sharedsecret keyword.
  • The third argument specifies the host(s) by using Host specification.

The auth statement may be specified any number of times. For each authentication method, it becomes a candidate when the first entry whose host_specification matches the target host has the enable keyword. When there is no corresponding entry, or when the first corresponding entry has the disable keyword, the authentication method does not become a candidate.

This process takes place on both client and server sides. Candidates for authentication method on both sides will be tried.

The order of statements with different authentication methods is not relevant. When there are several candidates for the authentication method for the host, the order of the authentication trial is sharedsecret, gsi_auth, and then gsi.

The GSI methods are available if and only if the --with-globus option is specified at configuration. When the methods are not available, an auth statement with gsi or gsi_auth will be ignored.

This statement cannot be omitted.

For example:

auth disable sharedsecret 192.168.0.100
auth disable sharedsecret 192.168.0.101
auth enable sharedsecret 192.168.0.0/24
auth enable gsi_auth 10.0.0.0/8
auth enable gsi *

In this example, all hosts which belong to the network address 192.168.0.0/24, except for two hosts, 192.168.0.100 and 192.168.0.101, will be tested for authenticated by both sharedsecret and gsi; all hosts which belong to the network address 10.0.0.0/8 will be tested for authentication by both gsi_auth and gsi; and all other hosts will be authenticated by gsi. Note that two hosts, 192.168.0.100 and 192.168.0.101, will be tested for authentication by gsi only.

shared_key_file pathname ๐Ÿ—๏ธ

The shared_key_file statement specifies a pathname of the shared secret key file in sharedsecret authentication.

digest digest_type ๐Ÿงฌ

The digest statement enables the checksum calculation, and specifies the digest type of the checksum. The digest_type parameter is a lower-case name which is supported by the OpenSSL library on the filesystem nodes. For example, "md5", "sha256". Or, if client_digest_check is enabled, the digest_type has to be supported on clients as well.

Specifying "disable" as digest_type disables the checksum calculation.

This directive is only available in gfmd.conf, and ignored in gfarm2.conf.

NOTE: Even if checksum calculation is enabled by this directive, the digest checksum is not calculated when a client accesses a file replica which is managed by a local gfsd. This is because only gfsd calculates the checksum by default, but the client directly reads/writes the file replica in the local access case. To calculate the checksum of local files, You have to either disable the direct access feature by the direct_local_access statement, or enable the client-side checksum calculation feature by the client_digest_check statement.

For example:

digest md5

directory_quota_count_per_user_limit number ๐Ÿ“

The directory_quota_count_per_user_limit statement limits maximum number of dirset per user.

The default limit is 100.

This directive is only available in gfmd.conf, and ignored in gfarm2.conf.

For example:

directory_quota_count_per_user_limit 1000

directory_quota_check_start_delay seconds โณ

The directory_quota_check_start_delay statement specifies the delay until starting re-calculation of directory quota, when such re-calculation becomes necessary. This parameter is to reduce number of multiple re-calculation to once during the delay period.

The default value is 60 seconds.

This directive is only available in gfmd.conf, and ignored in gfarm2.conf.

For example:

directory_quota_check_start_delay 120

directory_quota_check_retry_interval seconds ๐Ÿ”

The directory_quota_check_retry_interval statement specifies interval until restarting directory quota re-calculation which was interrupted by a metadata update.

Because metadata updates usually occur continuously, restarting without interval will make re-calculation interrupted immediately, thus the re-calculation will be wasted. In addition, the wasted re-calculation makes replia_check processing too slow. This parameter mitigates the problem by leaving an interval before restart.

The default value is 60 seconds.

This directive is only available in gfmd.conf, and ignored in gfarm2.conf.

For example:

directory_quota_check_retry_interval 120

quota_check_retry_interval seconds ๐Ÿ”„

The quota_check_retry_interval statement specifies interval until restarting quota re-calculation which was interrupted by a metadata update.

Because metadata updates usually occur continuously, restarting without interval will make re-calculation interrupted immediately, thus the re-calculation will be wasted. In addition, the wasted re-calculation makes replia_check processing too slow. This parameter mitigates the problem by leaving an interval before restart.

The default value is 60 seconds.

This directive is only available in gfmd.conf, and ignored in gfarm2.conf.

For example:

quota_check_retry_interval 120

max_directory_depth number ๐ŸŒฒ

The max_directory_depth statement specifies the maximum depth of directories. Note that this setting is not always strict, and some processing allows deeper than this setting.

The default value is 100.

This directive is only available in gfmd.conf, and ignored in gfarm2.conf.

For example:

max_directory_depth 500

sockopt option[=value] [LISTENER | Host_specification] ๐Ÿงฆ

The sockopt parameter specifies the socket option option via the setsockopt(2) system call.

When LISTENER (all capital letters) is specified by the second argument, the socket option is applied to any socket on the server side (accepting side).

When the host_specification is specified by the second argument, the socket option is applied to sockets that connect to the specified host(s). If the second argument is "*", the socket option is applied to any hosts on the client side (connecting side).

If the second argument is omitted, the socket option is applied to every socket.

The following socket options can be specified.

  • debug. The SO_DEBUG socket option is specified. A value is not necessary.
  • keepalive. The SO_KEEPALIVE socket option is specified. A value is not necessary.
  • sndbuf. The SO_SNDBUF socket option is specified with a value.
  • rcvbuf. The SO_RCVBUF socket option is specified with a value.
  • tcp_nodelay. The TCP_NODELAY socket option is specified. A value is not necessary.

For example:

sockopt tcp_nodelay 192.168.0.0/24
sockopt sndbuf=1048576 10.0.0.0/8
sockopt sndbuf=1048576 LISTENER
sockopt rcvbuf=1048576 10.0.0.0/8
sockopt rcvbuf=1048576 LISTENER

known_network Host_specification ๐ŸŒ

The known_network statement specifies a network address for file system nodes. It is used to group file system nodes at file system node scheduling. File system nodes that are not specified in this directive are assumed to be in an IPv4 class C network.

Multiple networks can be specified as follows, bestie โ€” just stack 'em up like this and you're golden:

known_network 192.168.0.0/25
known_network 192.168.0.128/25

  • network_receive_timeout seconds โ€” how long (in seconds) we're willing to just sit there waiting for data to arrive over the network ๐Ÿ’…

The default is 60 seconds. This directive is effective in both gfarm2.conf and gfmd.conf, so it's showing up everywhere, iconic.

Here's the tea โ˜• โ€” when a Gfarm application program receives no data from a gfsd filesystem server during that timeout period, it aborts the communication with the server, and then it tries to communicate with another server to continue the operation. And when a gfmd metadata server receives no data from a gfsd filesystem server during the timeout period, it aborts the communication with the gfsd server, and gfmd considers the gfsd server down. ๐Ÿ’€

  • network_send_timeout seconds โ€” how long we wait until data is ready to send over the network โœจ

The default is 0 seconds, which means no timeout at all, fr fr. This directive is effective in both gfarm2.conf and gfmd.conf.

When data cannot be sent for more than the send timeout, the network connection is disconnected, and it's tried to be re-connected. ๐Ÿ”

  • admin_user user โ€” specifies an administrator user name. This one gets specified in gfmd.conf. ๐Ÿ‘‘
  • admin_user_gsi_dn user_gsi_dn โ€” specifies a subject DN of an administrator, and yes, it's specified in gfmd.conf too. ๐ŸŽ€
  • local_user_map user-map-file [hostname:[port]] โ€” specifies a file name user-map-file for mapping local user names to global user names ๐ŸŒธ

Heads up: this map file is used only for sharedsecret authentication. When this file is not specified, a global user name is assumed to be the same as the local user name.

user-map-file is needed when you have to use the sharedsecret authentication method in the case where you have different unix account names on different filesystem nodes. In such a case, the user-map-file on each filesystem node should have an entry from each local user name to a unique global user name.

Example:

local_user_map /etc/gfarm/gfarm-usermap

Each line of the user-map-file consists of two fields separated by spaces; the first field is a global user name, and the second field is a local user name.

Example of the user mapping file:

foobar foo
quux baz

According to the first line of this mapping file, a global user name, foobar, is mapped to a local user name, foo, on this node. ๐Ÿซถ

When hostname/port of the meta data server is specified, user mapping files different in each server are applied. When the port is omitted, default port (601) is used. local_user_map can be specified two or more times. When the same definitions of local user name exist, the first definition is selected.

Example of multiple user mapping file:

local_user_map /etc/gfarm/gfarm-usermap1-1
local_user_map /etc/gfarm/gfarm-usermap1-2
local_user_map /etc/gfarm/gfarm-usermap2-1 server2
local_user_map /etc/gfarm/gfarm-usermap2-2 server2

In this example, when connecting to server2, it applies in order of gfarm-usermap2-1 and gfarm-usermap2-2. When connecting to excluding server2, it applies in order of gfarm-usermap1-1 and gfarm-usermap1-2. ๐Ÿฆ‹

  • local_group_map group-map-file [hostname:[port]] โ€” specifies a file name group-map-file for mapping global group names to local group names ๐Ÿ’œ

This map file is used by legacy clients that use local group id such as gfarm2fs and gfarm dsi for Globus GridFTP to display mapped local groups. When this file is not specified, a local group name is assumed to be the same as the global group name.

Example:

local_group_map /etc/gfarm/gfarm-groupmap

Each line of the group-map-file consists of two fields separated by spaces; the first field is a global group name, and the second field is a local group name.

When hostname/port of the meta data server is specified, group mapping files different in each server are applied. The specification method is similar to local_user_map. ๐ŸŒˆ

  • schedule_cache_timeout seconds โ€” the time (in seconds) until the cache used for filesystem node scheduling expires โณ

That cache holds information on each filesystem node, e.g. load average, disk free space, and whether authentication succeeds or not. The default time is 600 seconds, i.e. ten minutes.

For example,

schedule_cache_timeout 60
  • schedule_rpc_timeout seconds โ€” the timeout value (in seconds) of RPCs for filesystem node scheduling ๐Ÿ”ฅ

Bump this value up if some files cannot be accessed due to high load average of filesystem nodes.

This value is also used for the timeout value of the gfhost command when it accesses filesystem nodes concurrently.

The default time is 35 seconds.

For example,

schedule_rpc_timeout 60
  • schedule_concurrency number โ€” how many filesystem nodes will be searched concurrently at filesystem scheduling ๐Ÿƒโ€โ™€๏ธ

If this parameter is increased, the scheduling will finish quicker, but the load to filesystem nodes will increase. The default number is 10 nodes.

For example,

schedule_concurrency 10
  • schedule_concurrency_per_net number โ€” how many filesystem nodes will be used in the same network at measuring network latency for each network of filesystem nodes ๐Ÿ“ถ

It may be better to increase this parameter if many filesystem nodes are stopping, or many filesystem nodes are under higher load. And if this parameter is increased, it's recommened to increase the schedule_concurrency parameter too. The default number is 3.

For example,

schedule_concurrency_per_net 3
  • schedule_idle_load_thresh load-average โ€” the threshold of CPU load average to be considered idle ๐Ÿ˜Œ

The file system nodes whose CPU load average is equal to or below the specified CPU load average are to be scheduled at first. The default load average is 0.1.

For example,

schedule_idle_load_thresh 0.1
  • schedule_busy_load_thresh load-average โ€” the threshold of CPU load average to be considered busy ๐Ÿ˜ฎโ€๐Ÿ’จ

The file system nodes whose CPU load average is above the specified CPU load average are to be scheduled lastly. The default load average is 0.5.

This directive is available for clients and gfmd.

For example,

schedule_busy_load_thresh 0.5
  • schedule_virtual_load load-average โ€” the virtual CPU load average ๐ŸŽญ

The virtual CPU load is added when the host is scheduled, to avoid scheduling the same host multiple times. The default load average is 0.3.

For example,

schedule_virtual_load 0.3
  • schedule_candidates_ratio ratio โ€” the threshold ratio of number of filesystem nodes from number of scheduling nodes, used to decide to discontinue searching more filesystem nodes whose load averages are less or equal to the schedule_busy_load_thresh parameter ๐ŸŽฏ

If this parameter is increased, the accuracy of scheduling will be increased, but the scheduling process will become slower. The default ratio is 4.0.

For example,

schedule_candidates_ratio 4.0
  • schedule_rtt_thresh_diff microseconds โ€” the threshold time of network latency which divides the domains of scheduling priority โšก

If a network latency difference from a nearer network is larger than this value, the network's scheduling priority is lowered. There's a similar parameter schedule_rtt_thresh_ratio, and the scheduling priority is lowered if the network latency exceeds one of the parameters. The default is 1000 microseconds, i.e. 1 millisecond.

For example,

schedule_rtt_thresh_diff 1000
  • schedule_rtt_thresh_ratio ratio โ€” the threshold ratio of network latency which divides the domains of scheduling priority โšก

If a network latency is larger than this ratio from a nearer network, the network's scheduling priority is lowered. There's a similar parameter schedule_rtt_thresh_diff, and the scheduling priority is lowered if the network latency exceeds one of the parameters. The default ratio is 4.0.

For example,

schedule_rtt_thresh_ratio 4.0
  • schedule_rtt_thresh ratio โ€” bestie, this one is just an alias of the schedule_rtt_thresh_ratio directive since gfarm-2.5.8 ๐Ÿ™ˆ Please use that directive instead. This directive remains for compatibility with older versions. The default ratio is 4.0.

For example,

schedule_rtt_thresh 4.0
  • write_local_priority validity โ€” Gfarm nearly always chooses localhost when it selects a filesystem node to write a file ๐Ÿ 

By specifyng the disable keyword in this directive, Gfarm handles localhost the same as other filesystem nodes. The default is enable.

For example,

write_local_priority disable
  • write_target_domain domain โ€” Gfarm tries to choose a filesystem node in the domain specified by this directive when it selects a node to write a file ๐Ÿ—บ๏ธ

If there is no suitable node for writing in this domain, or if this directive is not specified, the filesystem node will be chosen from among all nodes. Note that if you specify this directive more than once, only the first one will be used and the others are ignored.

For example,

write_target_domain example.org
  • minimum_free_disk_space bytes โ€” the free disk space (in bytes) which is required on filesystem nodes ๐Ÿ’พ

The Gfarm scheduler excludes filesystem nodes which have less free space than this parameter when it schedules nodes for jobs which may write files. The free space value may have a suffix like k (kibibyte), M (mebibyte), G (gibibyte) and T (tebibyte). The default size is 512 MiB.

โš ๏ธ This directive has to be specified in both gfarm2.conf and gfmd.conf. After restarting the gfmd and the Gfarm client, it is effective.

For example,

minimum_free_disk_space 1G

๐ŸŒธ direct_local_access validity

Okay so picture this, bestie: a Gfarm client wants a file replica that's literally sitting right there on the local gfsd. Instead of doing the whole song and dance through the gfsd, it bypasses it and directly accesses that file replica to read/write the file contents โ€” way less overhead, it's giving efficiency ๐Ÿ’…. This directive is how you turn that off. Why would you ever? Because then the local gfsd actually has to get up and calculate the checksum of the local file replica. Peep the digest directive for the full tea. โœจ

Default is enable.

Heads up: this directive is only available for clients in gfarm2.conf. Both gfsd and gfmd literally ignore this setting in gfarm2.conf and gfmd.conf. Not their business, not their problem.

For example,

direct_local_access disable

๐Ÿฆ‹ replication_at_write_open validity

If all the file replicas of a file are stored on read-only filesystem nodes, that file cannot be updated. Tragic. But when this directive is enabled, the file gets replicated to a read-write filesystem node before it's opened in the write mode, which makes it possible to open in the write mode at all. Default is enable.

This directive is only available for clients in gfarm2.conf.

For example,

replication_at_write_open enable

๐Ÿ”’ read_only validity

This one makes the whole Gfarm file system read only. Periodt. Default is disable.

This directive is only available in gfmd configuration files.

For example,

read_only enable

๐Ÿ’ซ simultaneous_replication_receivers number

Specifies the maximum number of simultaneous gfmd-initiated replications to the same host. Default is 20.

For example,

simultaneous_replication_receivers 40

๐Ÿซถ replication_busy_host validity

This directive says whether the destination of gfmd-initiated replication includes busy hosts or not. When it's disabled, a file replica is not created to busy hosts โ€” they're booked and busy, leave them alone. Default is enabled.

For example,

replication_busy_host disable

๐ŸŽ€ gfsd_connection_cache number

Specifies the maximum number of cached gfsd connections. Default is 16.

For example,

gfsd_connection_cache 32

โญ xmlattr_size_limit bytes

Specifies the maximum size of XML extended attributes. The default is 786432, and numbers greater than 983040 are not allowed.

This parameter is only available in gfmd.conf, and ignored in gfarm2.conf.

For example,

xmlattr_size_limit 786432

๐ŸŒˆ xattr_size_limit bytes

Specifies the maximum size of extended attributes. The default is 65536, and numbers greater than 983040 are not allowed.

This parameter is only available in gfmd.conf, and ignored in gfarm2.conf.

For example,

xattr_size_limit 65536

๐Ÿ“ attr_cache_limit number

Specifies the maximum number of cached attributes in the gfarm library. Default is 40000.

For example,

attr_cache_limit 100000

โณ attr_cache_timeout milliseconds

Specifies the maximum time until cached attributes expire, in milliseconds. The default is 1000, i.e. 1 second.

For example,

attr_cache_timeout 3600000

๐Ÿงš page_cache_timeout milliseconds

Specifies the maximum time until cached pages expire, in milliseconds, only related to the linux kernel driver. The default is 1000, i.e. 1 second.

For example,

page_cache_timeout 3600000

๐Ÿ“ log_file pathname

This directive specifies a log file. That's it, that's the whole vibe.

๐Ÿ’œ log_level priority_level

Specifies a level of log priority. Any log output whose priority is inferior to this level will not be sent to syslog or standard error โ€” it's getting left on read. The priority levels are emerg, alert, crit, err, warning, notice, info and debug, in highest first order. The default level is info. It's not recommended to specify a level higher or equal to crit.

For example,

log_level debug

๐Ÿ” log_message_verbose_level level

Specifies how verbose the log message is. The default value is 0, which outputs the log message id. Level 1 additionally outputs the file name and the line of source code. Level 2 additionally outputs the function name. More lore, more chaos.

For example,

log_message_verbose_level 1

๐Ÿ” log_auth_verbose validity

When enable is specified, verbose messages about authentication are logged. iykyk, sometimes you just need the receipts.

Example:

log_auth_verbose enable

๐Ÿ‘‘ file_trace validity

When enable is specified, an audit log feature for file creation, modification and removal is enabled. Your files' whole character development arc, logged.

This directive is available in both gfarm2.conf and gfmd.conf.

Here is an example:

file_trace enable

๐Ÿ’€ fatal_action action_name

This parameter specifies the behavior at a fatal error. The default action is backtrace_and_abort.

For example,

fatal_action backtrace_and_abort

The following actions are supported:

  • backtrace_and_abort โ€” Print a backtrace, and then call abort(3).
  • backtrace_and_exit โ€” Print a backtrace, and then call exit(3).
  • abort โ€” Call abort(3).
  • exit โ€” Call exit(3).

๐Ÿ› debug_command command_line

When a Gfarm application program crashes (received SIGSEGV, SIGBUG, etc.), a debug command specified in this directive is executed. Like, automatic damage control.

For example,

debug_command env DISPLAY=:0.0 xterm -e gdb %e %p

%e and %p are expanded to an actual program name and a process ID, respectively. If you'd like to use the % character itself in the command line, type %%.

This directive is available in both gfarm2.conf and gfmd.conf. If this directive is omitted, no debug command is executed.

๐Ÿฆ‹ no_file_system_node_timeout seconds

If there is no file system node available, the Gfarm client library periodically tries to find a file system node. This directive specifies the timeout to try, in seconds. The default is 30 seconds.

For example,

no_file_system_node_timeout 30

โฐ gfmd_authentication_timeout seconds

After the connection to the metadata server is established, the Gfarm client library starts an authentication procedure, but gives up the procedure if this timeout period is passed without any response from the metadata server. The unit of this directive is second, and the default value is 35.

For example,

gfmd_authentication_timeout 45

๐Ÿ”„ gfmd_reconnection_timeout seconds

If the connection to the metadata server is disconnected, the Gfarm client library periodically tries to reconnect. This directive specifies the timeout to try, in seconds. The default is 30 seconds.

For example,

gfmd_reconnection_timeout 30

๐Ÿ”Œ gfsd_connection_timeout seconds

Specifies the timeout to connect to a gfsd. The default is 30 seconds.

For example,

gfsd_connection_timeout 30

๐ŸŒธ atime type

  • When disable is specified, atime (access time) is not updated.
  • When relative is specified, atime is only updated if the previous atime is earlier than the current mtime (modify time) or ctime (change time), or if the previous atime is more than 1 day old.
  • When strict is specified, atime is always updated.

The default setting is relative.

This parameter is only available in gfmd.conf.

For example,

atime disable

๐Ÿ“‚ max_open_files num-of-files

Specifies the maximum number of open files. The default is 1024.

This parameter is only available in gfmd.conf.

For example,

max_open_files 1024

โœ… client_digest_check validity

When enable is specified, the Gfarm client library (libgfarm) calculates a checksum while accessing a whole file sequentially, and verifies the result against a value which is set in the metadata of the file. Also, libgfarm sets the calculated checksum to the metadata, if a checksum isn't set in the metadata, and the file is opened for writing. Not me doing integrity checks for free ๐Ÿ’….

The default value is disable.

This directive is only available for clients in gfarm2.conf. Both gfsd and gfmd ignore this setting in gfarm2.conf and gfmd.conf.

For example,

client_digest_check enable

๐Ÿงบ client_file_bufsize bytes

Specifies the file buffer size in bytes used in the Gfarm client library (libgfarm). The default size is 1048576 bytes (= 1MiB). The file buffer size should be less than the default value not for deterioration of remote access performance.

This directive is only available for clients in gfarm2.conf. Both gfsd and gfmd ignore this setting in gfarm2.conf and gfmd.conf.

For example,

client_file_bufsize 65536

๐Ÿƒ client_parallel_copy num-of-parallel

Specifies the number of parallel for gfprep and gfpcopy to work in parallel. When this number is not specified, the default number of parallel is 4.

For example,

client_palallel_copy 10
Not me typing out the example exactly as it is, typo and all ๐Ÿ˜ญ copying it character for character because that's the assignment.

๐Ÿƒโ€โ™€๏ธ client_parallel_max num-of-parallel

Specifies the maximum number of parallel for gfprep and gfpcopy to work in parallel. When this number is not specified, the default maximum number of parallel is 16.

For example,

client_palallel_max 8
Same energy: the example below is spelled exactly like the original. No edits, no cap.

๐Ÿ“Š profile validity

When enable is specified, Gfarm outputs the profile information.

Example:

profile enable

๐Ÿ—‚๏ธ metadb_server_list gfmd-hostname[:port] ...

This parameter specifies connection destinations of redundant metadata servers, delimited by space. If port is not specified, the port will be 601, which is the default value.

This parameter is only available in gfarm2.conf, and ignored in gfmd.conf.

Example:

metadb_server_list mds1 mds2:701

๐ŸŒŸ metadb_replication validity

When enable is specified, the redundant metadata feature is enabled. The default value is disable.

This parameter is only available in gfmd.conf.

Example:

metadb_replication enable

โฑ๏ธ synchronous_replication_timeout seconds

This parameter specifies the timeout for executing synchronous replication, in seconds. If the timeout period passes, the connection to the slave gfmd where it replicates to will disconnect. The replication process in the master gfmd for the disconnected slave gfmd stops until the slave gfmd connects. The default is 10.

  • synchronous_replication_timeout โ€” gfmd.conf-exclusive, bestie</p>, she does not live in gfarm2.conf ๐Ÿ’…
synchronous_replication_timeout 30
  • synchronous_journaling validity โ€” when you set her to "enable", fdatasync gets called right after the update info is saved to the journal file. When does that fdatasync actually fire? After writing the records from transaction-begin to transaction-end within one single transaction. Default is "enable".

This one is gfmd.conf-only.

Example:

synchronous_journaling disable
  • metadb_server_force_slave validity โ€” set her to "enable" and even if the gfmd is configured as the default master, she'll run as a slave gfmd anyway, forced ๐Ÿ˜ค. Default is "disable".

gfmd.conf only, periodt.

Example:

metadb_server_force_slave enable
  • metadb_server_slave_max_size number โ€” the max number of slave gfmds you're allowed to have. Default is "32".

Only available in gfmd.conf.

Example:

metadb_server_slave_max_size 40
  • metadb_server_slave_replication_timeout seconds โ€” the timeout, in seconds, to wait for metadata replication to finish at gfmd shutdown triggered by a SIGTERM signal ๐Ÿ›‘. If that timeout period goes by, the master gfmd just <em>gives up</em> on replicating metadata to the slave gfmd. Default is 120 seconds.

Only available in gfmd.conf.

Example:

metadb_server_slave_replication_timeout 180
  • metadb_journal_dir directory โ€” where the journal file lives. This value gets set when you run config-gfarm. If you don't specify this one, gfmd does not start at all ๐Ÿ˜ญ so like, don't forget her.

Only available in gfmd.conf.

Example:

metadb_journal_dir /var/gfarm-metadata/journal
  • metadb_journal_max_size file_size โ€” the max size of the journal file, in bytes. Fair warning: the bigger this is, the longer gfmd takes to finish starting up. Default is 33554432 (32 MiB).

Only available in gfmd.conf.

Example:

metadb_journal_max_size 8388608
  • metadb_journal_recvq_size size โ€” the max number of on-memory journal-data records that the slave gfmd receives from the master gfmd. If it hits this value, the slave gfmd gives up and exits, because gfmd decides it's being too slow at applying the journal data to the backend database ๐Ÿ’€. Default is 100000.

Only available in gfmd.conf.

Example:

metadb_journal_recvq_size 100000
  • metadb_replica_remover_by_host_sleep_time nanoseconds โ€” the sleep time of the replica remover (which gets invoked when a filesystem node is removed), in nanoseconds, for when gfmd is busy. Bump this value up and the processing runs slower ๐Ÿข. Default is 20000000 nanoseconds (20 milliseconds). Max value is 1000000000 nanoseconds (1 second).

Only available in gfmd.conf.

Example:

metadb_replica_remover_by_host_sleep_time 20000000
  • metadb_replica_remover_by_host_inode_step number โ€” how many i-nodes the replica remover (invoked by a removal of a filesystem node) processes in each step. Lower this value and the remover runs slower ๐ŸŒ. Default is 1024.

Only available in gfmd.conf.

Example:

metadb_replica_remover_by_host_inode_step 1024
  • replica_check validity โ€” a replica check patrols the file system whenever it's necessary and creates any missing file replicas โœจ. Default is enable. You can flip this on and off dynamically with the gfrepcheck command.

Only available in gfmd.conf.

Example:

replica_check disable
  • replica_check_remove validity โ€” this directive only does anything when replica_check is enabled. When replica_check_remove is on, the replica check removes unnecessary file replicas, unless a file has two or more link counts. It leaves file replicas alone for files that have no replica info, like gfarm.ncopy and gfarm.replicainfo ๐Ÿซถ. Default is enable. You can flip this on and off dynamically with the gfrepcheck remove command.

Only available in gfmd.conf.

Example:

replica_check_remove disable
  • replica_check_remove_grace_used_space_ratio percentage โ€” only does anything when replica_check_remove is enabled. Unnecessary file replicas get removed only when the percentage of used capacity is more than the percent value you set here. Give her an integer between 0 and 100. When you specify 100, unnecessary file replicas are not removed at all. Default is 0.

You can change that percentage dynamically with the gfrepcheck command. This example switches it to 50%:

% gfrepcheck remove_grace_used_space_ratio 50

Only available in gfmd.conf.

Example:

replica_check_remove_grace_used_space_ratio 70
  • replica_check_remove_grace_time seconds โ€” only does anything when replica_check_remove is enabled. Unnecessary file replicas get removed only when they haven't been accessed for more than the seconds you set here. Default is 0.

You can change the grace time dynamically with the gfrepcheck command. This example switches it to 1 week (= 604800 seconds):

% gfrepcheck remove_grace_time 604800

Only available in gfmd.conf.

Example:

replica_check_remove_grace_time 604800
  • replica_check_reduced_log validity โ€” set her to "enable" and the log messages coming from the replica_check may get reduced ๐Ÿคซ. Default value is "enable". You can change this behavior dynamically with the gfrepcheck reduced_log command.

Only available in gfmd.conf.

Example:

replica_check_reduced_log disable
  • replica_check_host_down_thresh seconds โ€” the interval before starting a replica check after a gfsd goes down. Default is 10800 seconds (3 hours). You can change this behavior dynamically with the gfrepcheck host_down_thresh command.

Only available in gfmd.conf.

Example:

replica_check_host_down_thresh 3600
  • replica_check_sleep_time nanoseconds โ€” the sleep time in nanoseconds during the replica check for when gfmd is busy. Default is 100000 nanoseconds (0.1 millisecond). Max value is 1000000000 nanoseconds (1 second). You can change this behavior dynamically with the gfrepcheck sleep_time command.

Only available in gfmd.conf.

Example:

replica_check_sleep_time 0
  • replica_check_minimum_interval seconds โ€” the minimum interval, in seconds, before the next replica check can start. Default is 10 seconds. You can change this behavior dynamically with the gfrepcheck minimum_interval command.

Only available in gfmd.conf.

Example:

replica_check_minimum_interval 5
  • replicainfo validity โ€” set her to "enable" and the extended attribute gfarm.replicainfo gets used in automatic file replication. Set her to "disable" and the hostgroups inside gfarm.replicainfo are not used โ€” but the total number of replicas in gfarm.replicainfo still is, if that total is larger than gfarm.ncopy. For the deets on the gfarm.replicainfo extended attribute, go check the manual page of gfncopy. Default is enable.

Heads up: gfstatus -Mm 'replicainfo disable' can disable this temporarily.

Only available in gfmd.conf.

Example:

replicainfo disable
  • write_verify validity โ€” this one turns on gfsd's write_verify feature, which compares the file data checksum by re-reading the contents of the file sometime after the file was written ๐Ÿ‘€. Default is disable.

Important: this parameter is only available in gfmd.conf, and it's ignored in gfarm2.conf. gfsd picks up this setting at its startup by asking gfmd.

For example,

write_verify enable
  • write_verify_interval seconds โ€” how long to wait before kicking off the write_verify feature after a file is written. Default value is 21600 seconds (6 hours).

Real talk: the write_verify feature uses direct I/O on OSes that have the O_DIRECT flag. But it does <em>not</em> flush caches on disk controllers or kernel metadata. So it's recommended to specify a long enough period in this parameter.

Only available in gfmd.conf, and ignored in gfarm2.conf. gfsd uses this setting at its startup by asking gfmd.

For example,

write_verify_interval 21600
  • write_verify_retry_interval seconds โ€” how long to wait until retrying the write_verify feature, if the previous try got postponed because the file was opened for writing at that moment.

It's recommended to keep this value small enough compared to the write_verify_interval setting. Default value is 600 seconds (10 minutes).

Only available in gfmd.conf, and ignored in gfarm2.conf. gfsd uses this setting at its startup by asking gfmd.

For example,

write_verify_retry_interval 600
  • write_verify_log_interval seconds โ€” the interval for recording write_verify statistics in the log. Once this interval passes and then a file gets updated on a filesystem node, the statistics info gets recorded in the log on that filesystem node ๐Ÿ“.

Default value is 3600 seconds (1 hour).

Only available in gfmd.conf, and ignored in gfarm2.conf. gfsd uses this setting at its startup by asking gfmd.

For example,

write_verify_log_interval 3600
  • ib_rdma validity โ€” use this to disable the RDMA data transfer between client and gfsd.

She's only valid when --with-infiniband was specified at configure time. Default value is enable.

If the environment variable GFARM_RDMA_DISABLE is set, RDMA gets disabled.

For example,

ib_rdma disable
  • rdma_device device name โ€” picks which device gets to carry the RDMA data transfer between client and gfsd. the default is the first found valid device on ibv_get_device_list() โœจ
rdma_device mlx4_1
  • rdma_port port โ€” the port number of the device used for the RDMA data transfer between client and gfsd. no port picked? it defaults to the first found valid port on the device ๐ŸŽ€
rdma_port 2
  • rdma_gid_index gid index โ€” says the rdma transfer should be performed using GRH, and then tells it which gid index to use. default is -1, which means RDMA transfers with lid. heads up bestie: this parameter is only available in gfsd.conf ๐Ÿ’…
rdma_gid_index 0
  • rdma_min_size size โ€” the minimum data size before it'll reach for the RDMA data transfer. default is 65536 bytes ๐ŸŒธ
rdma_min_size 4096
  • rdma_mr_reg_mode mode โ€” how the client registers its RDMA transfer buffer. okay so there's two modes and they're giving very different energy:
    • static mode registers one transfer buffer for every connection with a gfsd.
    • dynamic mode repeats registration and deregistration at every transfer.

static is faster than dynamic, but memory load becomes higher and may fail in registration because the memories are locked through the connections โ€” so it's a tradeoff, not a free lunch ๐Ÿ˜ญ

the default mode is static ๐Ÿ‘‘

rdma_mr_reg_mode static
rdma_mr_reg_mode static dynamic
  • rdma_mr_reg_static_min_size size โ€” the initial buffer size when static mode is the one selected with rdma_mr_reg_mode. default is 1 MiB ๐Ÿฆ‹
rdma_mr_reg_static_min_size 1048576
  • rdma_mr_reg_static_max_size size โ€” the maximum expansion buffer size when static mode is selected with rdma_mr_reg_mode. default is 16 MiB โญ
rdma_mr_reg_static_max_size 16777216

๐Ÿงš GRAMMAR ๐Ÿงš

okay so this is the grammar of gfarm2.conf, written out in the BNF notation. yes it's long. yes it's iconic. let's go ๐Ÿ’–

<statement> ::=

             <include_statement> |
             <include_nesting_limit_statement> |
             <spool_statement> |
             <spool_server_listen_address_statement> |
             <spool_server_listen_backlog_statement> |
             <spool_server_cred_type_statement> |
             <spool_server_cred_service_statement> |
             <spool_server_cred_name_statement> |
             <spool_server_back_channel_rcvbuf_limit_statement> |
             <spool_server_read_only_retry_interval_statement> |
             <spool_check_level_statement> |
             <spool_check_parallel_statement> |
             <spool_check_parallel_max_statement> |
             <spool_check_parallel_per_capacity_statement> |
             <spool_check_parallel_step_statement> |
             <spool_base_load_statement> |
             <spool_digest_error_check_statement> |
             <metadb_server_host_statement> |
             <metadb_server_port_statement> |
             <metadb_server_cred_type_statement> |
             <metadb_server_cred_service_statement> |
             <metadb_server_cred_name_statement> |
             <metadb_server_listen_backlog_statement> |
             <metadb_server_max_descriptors_statement> |
             <metadb_server_stack_size_statement> |
             <metadb_server_thread_pool_size_statement> |
             <metadb_server_job_queue_length_statement> |
             <metadb_server_remover_queue_length_statement> |
             <metadb_server_remove_scan_log_interval_statement> |
             <metadb_server_remove_scan_interval_factor_statement> |
             <metadb_server_heartbeat_interval_statement> |
             <metadb_server_failover_notify_delay_statement> |
             <metadb_server_dbq_size_statement> |
             <metadb_server_back_channel_sndbuf_limit_statement> |
             <metadb_server_nfs_root_squash_support_statement> |
             <ldap_server_host_statement> |
             <ldap_server_port_statement> |
             <ldap_base_dn_statement> |
             <ldap_bind_dn_statement> |
             <ldap_bind_password_statement> |
             <postgresql_server_host_statement> |
             <postgresql_server_port_statement> |
             <postgresql_dbname_statement> |
             <postgresql_user_statement> |
             <postgresql_password_statement> |
             <postgresql_conninfo_statement> |
             <auth_statement> |
             <shared_key_file_statement> |
             <digest_statement> |
             <directory_quota_count_per_user_limit_statement> |
             <directory_quota_check_start_delay_statement> |
             <directory_quota_check_retry_interval_statement> |
             <quota_check_retry_interval_statement> |
             <max_directory_depth_statement> |

             <sockopt_statement> |

             <known_network_statement> |
             <network_receive_timeout_statement> |
             <network_send_timeout_statement> |
             <admin_user_statement> |
             <admin_user_gsi_dn_statement> |
             <local_user_map_statement> |
             <local_group_map_statement> |
             <schedule_cache_timeout_statement> |
             <schedule_rpc_timeout_statement> |
             <schedule_concurrency_statement> |
             <schedule_concurrency_per_net_statement> |
             <schedule_idle_load_thresh_statement> |
             <schedule_busy_load_thresh_statement> |
             <schedule_virtual_load_statement> |
             <schedule_candidates_ratio_statement> |
             <schedule_rtt_thresh_diff_statement> |
             <schedule_rtt_thresh_ratio_statement> |
             <schedule_rtt_thresh_statement> |
             <write_local_priority_statement> |
             <write_target_domain_statement> |
             <minimum_free_disk_space_statement> |
             <direct_local_access_statement> |
             <replication_at_write_open_statement> |
             <read_only_statement> |
             <simultaneous_replication_receivers_statement> |
             <replication_busy_host_statement> |
             <gfsd_connection_cache_statement> |
             <xmlattr_size_limit_statement> |
             <xattr_size_limit_statement> |
             <attr_cache_limit_statement> |
             <attr_cache_timeout_statement> |
             <page_cache_timeout_statement> |
             <log_file_statement> |
             <log_level_statement> |
             <log_message_verbose_level_statement> |
             <log_auth_verbose_statement> |
             <file_trace_statement> |
             <fatal_action_statement> |
             <debug_command_statement> |
             <no_file_system_node_timeout_statement> |
             <gfmd_authentication_timeout_statement> |
             <gfmd_reconnection_timeout_statement> |
             <gfsd_connection_timeout_statement> |

             <atime_statement> |
             <max_open_files_statement> |
             <client_digest_check_statement> |
             <client_file_bufsize_statement> |
             <client_parallel_copy_statement> |
             <profile_statement> |
             <metadb_server_list_statement> |
             <metadb_replication_statement> |
             <synchronous_replication_timeout_statement> |
             <synchronous_journaling_statement> |
             <metadb_server_force_slave_statement> |
             <metadb_server_slave_max_size_statement> |
             <metadb_server_slave_replication_timeout_statement> |
             <metadb_journal_dir_statement> |
             <metadb_journal_max_size_statement> |
             <metadb_journal_recvq_size_statement> |
             <metadb_replica_remover_by_host_sleep_time_statement> |
             <metadb_replica_remover_by_host_inode_step_statement> |
             <replica_check_statement> |
             <replica_check_remove_statement> |
             <replica_check_remove_grace_used_space_ratio_statement> |
             <replica_check_remove_grace_time_statement> |
             <replica_check_reduced_log_statement> |
             <replica_check_host_down_thresh_statement> |
             <replica_check_sleep_time_statement> |
             <replica_check_minimum_interval_statement> |
             <ib_rdma_statement> |
             <rdma_device_statement> |
             <rdma_port_statement> |
             <rdma_gid_index_statement> |
             <rdma_min_size_statement> |
             <rdma_mr_reg_mode_statement> |
             <rdma_mr_reg_static_min_size_statement> |
             <rdma_mr_reg_static_max_size_statement> |
             <replicainfo_statement> |
             <write_verify_statement> |
             <write_verify_interval_statement> |
             <write_verify_retry_interval_statement> |
             <write_verify_log_interval_statement>

<include_statement> ::=

        "include" <pathname>

<include_nesting_limit_statement> ::=

        "include_nesting_limit" <number>

<spool_statement> ::=

        "spool" <pathname>

<spool_server_listen_address_statement> ::=

        "spool_server_listen_address" <ipv4_address>

<spool_server_listen_backlog_statement> ::=

        "spool_server_listen_backlog" <number>

<spool_server_cred_type_statement> ::=

        "spool_server_cred_type" <cred_type>

<spool_server_cred_service_statement> ::=

        "spool_server_cred_service" <cred_service>

<spool_server_cred_name_statement> ::=

        "spool_server_cred_name" <cred_name>

<spool_server_back_channel_rcvbuf_limit_statement> ::=

        "spool_server_back_channel_rcvbuf_limit" <size_limit>

<spool_server_read_only_retry_interval_statement> ::=

        "spool_server_read_only_retry_interval" <number>

<spool_check_level_statement> ::=

        "spool_check_level" <spck_level>

<spool_check_parallel_statement> ::=

        "spool_check_parallel" <number>

<spool_check_parallel_max_statement> ::=

        "spool_check_parallel_max" <number>

<spool_check_parallel_per_capacity_statement> ::=

        "spool_check_parallel_per_capacity" <size>

<spool_check_parallel_step_statement> ::=

        "spool_check_parallel_step" <number>

<spool_base_load_statement> ::=

        "spool_base_load" <load>

<spool_digest_error_check_statement> ::=

        "spool_digest_error_check" <validity>

<metadb_server_host_statement> ::=

okay so we're still in the grammar section, and bestie, it's giving "BNF but make it fashion" ๐Ÿ’…. next up, the metadb_server_* family. they're the main character energy of the config file, fr fr.

               "metadb_server_host" <hostname>

       <metadb_server_port_statement> ::=

               "metadb_server_port" <portnumber>

       <metadb_server_cred_type_statement> ::=

               "metadb_server_cred_type" <cred_type>

       <metadb_server_cred_service_statement> ::=

               "metadb_server_cred_service" <cred_service>

       <metadb_server_cred_name_statement> ::=

               "metadb_server_cred_name" <cred_name>

       <metadb_server_listen_backlog_statement> ::=

               "metadb_server_listen_backlog" <number>

       <metadb_server_max_descriptors_statement> ::=

               "metadb_server_max_descriptors" <number>

       <metadb_server_stack_size_statement> ::=

               "metadb_server_stack_size" <number>

       <metadb_server_thread_pool_size_statement> ::=

               "metadb_server_thread_pool_size" <number>

       <metadb_server_job_queue_length_statement> ::=

               "metadb_server_job_queue_length" <number>

       <metadb_server_remover_queue_length_statement> ::=

               "metadb_server_remover_queue_length" <number>

       <metadb_server_remove_scan_log_interval_statement> ::=

               "metadb_server_remove_scan_log_interval" <number>

       <metadb_server_remove_scan_interval_factor_statement> ::=

               "metadb_server_remove_scan_interval_factor" <number>

       <metadb_server_heartbeat_interval_statement> ::=

               "metadb_server_heartbeat_interval" <number>

       <metadb_server_failover_notify_delay_statement> ::=

               "failover_notify_delay" <number>

       <metadb_server_dbq_size_statement> ::=

               "metadb_server_dbq_size" <number>

       <metadb_server_back_channel_sndbuf_limit_statement> ::=

               "metadb_server_back_channel_sndbuf_limit" <size_limit>

       <metadb_server_nfs_root_squash_support_statement> ::=

               "metadb_server_nfs_root_squash_support" <validity>

and then LDAP and PostgreSQL rolled up like "we got your back for auth and storage" ๐Ÿซถ

       <ldap_server_host_statement> ::=

               "ldap_server_host" <hostname>

       <ldap_server_port_statement> ::=

               "ldap_server_port" <portnumber>

       <ldap_base_dn_statement> ::=

               "ldap_base_dn" <string>

       <ldap_bind_dn_statement> ::=

               "ldap_bind_dn" <string>

       <ldap_bind_password_statement> ::=

               "ldap_bind_password" <string>

       <postgresql_server_host_statement> ::=

               "postgresql_server_host" <hostname>

       <postgresql_server_port_statement> ::=

               "postgresql_server_port" <portnumber>

       <postgresql_dbname_statement> ::=

               "postgresql_dbname" <string>

       <postgresql_user_statement> ::=

               "postgresql_user" <string>

       <postgresql_password_statement> ::=

               "postgresql_password" <string>

       <postgresql_conninfo_statement> ::=

               "postgresql_conninfo" <string>

auth stuff, because security is sexy ๐Ÿ’…๐Ÿ”

       <auth_statement> ::=

               "auth" <validity> <auth_method> <hostspec>

       <auth_command> ::=

               "enable" | "disable"

       <auth_method> ::=

               "gsi" | "gsi_auth" | "sharedsecret"

       <shared_key_file_statement> ::=

               "shared_key_file" <pathname>

       <digest_statement> ::=

               "digest" <digest_type>

quota and directory depth and sockopt, oh my! ๐ŸŒธ

       <directory_quota_count_per_user_limit_statement> ::=

               "directory_quota_count_per_user_limit" <number>

       <directory_quota_check_start_delay_statement> ::=

               "directory_quota_check_start_delay" <number>

       <directory_quota_check_retry_interval_statement> ::=

               "directory_quota_check_retry_interval" <number>

       <quota_check_retry_interval_statement> ::=

               "quota_check_retry_interval" <number>

       <max_directory_depth_statement> ::=

               "max_directory_depth" <number>

       <sockopt_statement> ::=

               "sockopt" <socket_option>[=<number>] [""LISTENER" | <hostspec>]

       <socket_option> ::=

               "debug" | "keepalive" | "sndbuf" | "rcvbuf" |
                    "tcp_nodelay"

       <known_network_statement> ::=

               "known_network" <hostspec>

       <network_receive_timeout_statement> ::=

               "network_receive_timeout" <number>

       <network_send_timeout_statement> ::=

               "network_send_timeout" <number>

       <admin_user_statement> ::=

               "admin_user" <string>

       <admin_user_gsi_dn_statement> ::=

               "admin_user_gsi_dn" <string>

       <local_user_map_statement> ::=

               "local_user_map" <local_user_and_group_map_spec>

       <local_group_map_statement> ::=

               "local_group_map" <local_user_and_group_map_spec>

       <local_user_and_group_map_spec> ::=

               <pathname> |
                         <pathname> <hostname>|
                         <pathname> <hostname> ":" <portnumber>

scheduling, the art of not being messy ๐ŸŽ€

       <schedule_cache_timeout_statement> ::=

               "schedule_cache_timeout" <number>

       <schedule_rpc_timeout_statement> ::=

               "schedule_rpc_timeout" <number>

       <schedule_concurrency_statement> ::=

               "schedule_concurrency" <number>

       <schedule_concurrency_per_net_statement> ::=

               "schedule_concurrency_per_net" <number>

       <schedule_idle_load_thresh_statement> ::=

               "schedule_idle_load_thresh" <load>

       <schedule_busy_load_thresh_statement> ::=

               "schedule_busy_load_thresh" <load>

       <schedule_virtual_load_statement> ::=

               "schedule_virtual_load" <load>

       <schedule_candidates_ratio_statement> ::=

               "schedule_candidates_ratio" <floating_point_number>

       <schedule_rtt_thresh_diff_statement> ::=

               "schedule_rtt_thresh_diff" <number>

       <schedule_rtt_thresh_ratio_statement> ::=

               "schedule_rtt_thresh_ratio" <floating_point_number>

       <schedule_rtt_thresh_statement> ::=

               "schedule_rtt_thresh" <floating_point_number>

write priorities, disk space, replication, read-only... the whole vibe ๐Ÿ’–

       <write_local_priority_statement> ::=

               "write_local_priority" <validity>

       <write_target_domain_statement> ::=

               "write_target_domain" <string>

       <minimum_free_disk_space_statement> ::=

               "minimum_free_disk_space" <size>

       <direct_local_access_statement> ::=

               "direct_local_access" <validity>

       <replication_at_write_open_statement> ::=

               "replication_at_write_open" <validity>

       <read_only_statement> ::=

               "read_only" <validity>

       <simultaneous_replication_receivers_statement> ::=

               "simultaneous_replication_receivers" <number>

       <replication_busy_host_statement> ::=

               "replication_busy_host" <validity>

       <gfsd_connection_cache_statement> ::=

               "gfsd_connection_cache" <number>

       <xmlattr_size_limit_statement> ::=

               "xmlattr_size_limit" <size>

       <xattr_size_limit_statement> ::=

               "xattr_size_limit" <size>

       <attr_cache_limit_statement> ::=

               "attr_cache_limit" <number>

       <attr_cache_timeout_statement> ::=

               "attr_cache_timeout" <number>

       <page_cache_timeout_statement> ::=

               "page_cache_timeout" <number>

logging and debugging, because you gotta know what's happening ๐Ÿ‘€

       <log_file_statement> ::=

               "log_file" <pathname>

       <log_level_statement> ::=

               "log_level" <log_priority>

       <log_message_verbose_level_statement> ::=

               "log_message_verbose_level" <number>

       <log_auth_verbose_statement> ::=

               "log_auth_verbose" <validity>

       <file_trace_statement> ::=

               "file_trace" <validity>

       <fatal_action_statement> ::=

               "fatal_action" <fatal_action_name>

       <debug_command_statement> ::=

               "debug_command" <string_list>

       <no_file_system_node_timeout_statement> ::=

               "no_file_system_node_timeout" <number>

       <gfmd_authentication_timeout_statement> ::=

               "gfmd_authentication_timeout" <number>

       <gfmd_reconnection_timeout_statement> ::=

               "gfmd_reconnection_timeout" <number>

       <gfsd_connection_timeout_statement> ::=

               "gfsd_connection_timeout" <number>

       <atime_statement> ::=

               "atime" <atime_type>

       <max_open_files_statement> ::=

               "max_open_files" <number>

       <client_digest_check_statement> ::=

               "client_digest_check" <validity>

       <client_file_bufsize_statement> ::=

               "client_file_bufsize" <size>

       <client_parallel_copy_statement> ::=

               "client_parallel_copy" <number>

profile and metadb replication, the sequel ๐Ÿฆ‹

       <profile_statement> ::=

               "profile" <validity>

       <metadb_server_list_statement> ::=

               "metadb_server_list" <metadb_server_list_spec>

       <metadb_server_list_spec> ::=

               <hostname_port_spec> |
                    <hostname_port_spec> <metadb_server_list_spec>

       <metadb_replication_statement> ::=

               "metadb_replication" <validity>

synchronous replication and journaling, because consistency is key ๐Ÿ”‘

       <synchronous_replication_timeout_statement> ::=

               "synchronous_replication_timeout" <number>

       <synchronous_journaling_statement> ::=

               "synchronous_journaling" <validity>

       <metadb_server_force_slave_statement> ::=

               "metadb_server_force_slave" <validity>

       <metadb_server_slave_max_size_statement> ::=

               "metadb_server_slave_max_size" <number>

       <metadb_server_slave_replication_timeout_statement> ::=

               "metadb_server_slave_replication_timeout" <number>

       <metadb_journal_dir_statement> ::=

               "metadb_journal_dir" <pathname>

       <metadb_journal_max_size_statement> ::=

               "metadb_journal_max_size" <number>

       <metadb_journal_recvq_size_statement> ::=

               "metadb_journal_recvq_size" <number>

replica remover and replica check, keeping things tidy โœจ

       <metadb_replica_remover_by_host_sleep_time_statement> ::=

               "metadb_replica_remover_by_host_sleep_time" <number>

       <metadb_replica_remover_by_host_inode_step_statement> ::=

               "metadb_replica_remover_by_host_inode_step" <number>

       <replica_check_statement> ::=

               "replica_check" <validity>

       <replica_check_remove_statement> ::=

               "replica_check_remove" <validity>

       <replica_check_remove_grace_used_space_ratio_statement> ::=

               "replica_check_remove_grace_used_space_ratio" <number>

       <replica_check_remove_grace_time> ::=

               "replica_check_remove_grace_time" <number>

       <replica_check_reduced_log_statement> ::=

               "replica_check_reduced_log" <validity>

       <replica_check_host_down_thresh_statement> ::=

               "replica_check_host_down_thresh" <number>

       <replica_check_sleep_time_statement> ::=

               "replica_check_sleep_time" <number>

       <replica_check_minimum_interval_statement> ::=

               "replica_check_minimum_interval" <number>

and finally, the fundamental building blocks: string_list, hostspec, pathname, and friends ๐Ÿงš

       <string_list> ::=

               <string> |
                    <string> <string_list>

       <hostspec> ::=

               <ipv4_address> | <ipv4_address> "/" <address_mask> |
                    <hostname> | "." <domain_name> | "*"

       <pathname> ::=

               <pathname_character> <pathname_character>*

       <pathname_character> ::=

               <hostname_character> | "," | "/" | "_"

       <hostname_port_spec> ::=

               <hostname>|
                    <hostname> ":" <portnumber>

       <hostname> ::=

               <hostname_character> <hostname_character>*

       <hostname_character> ::=

               <alphabet> | <digit> | "-" | "."

       <portnumber> ::=

               <number>

       <size> ::=

and the size production is just hanging there, waiting for the next part like ๐Ÿ‘€ bestie, we're not done yet.

               <number> [ "k" | "M" | "G" | "T" ]

okay so a <number> is just digits, and you can slap a "k", "M", "G" or "T" suffix on the end of it bestie, that's the whole vibe ๐ŸŽ€

       <number> ::=

               <digit> [<digit>*]
       <digit> ::=

               "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"

a digit is literally just 0 through 9, no surprises, no drama ๐Ÿ’…

       <size_limit> ::=

               <number> | "disable"
       <string> ::=

               """ <double_quoted_character>* """
       <double_quoted_character> ::=

               <any_character_except_backslash_and_double_quotation> |
                    "\\" | "\""

so a <string> is wrapped in double quotes, and inside it you can have basically anything except a backslash or a double quote โ€” unless you escape them as \\ or \" โœจ

       <validity> ::=

               "enable" | "disable"
       <spck_level> ::=

               "disable" | "display" | "delete" | "lost_found"
       <atime_type> ::=

               "disable" | "relative" | "strict"
       <log_priority> ::=

               "emerg" | "alert" | "crit" | "err" | "warning" |
                    "notice" | "info" | "debug"

the log priority ladder, in order of how loud it's screaming: "emerg", "alert", "crit", "err", "warning", "notice", "info", "debug" ๐Ÿ˜ญ

       <fatal_action_name> ::=

               "backtrace_and_abort" | "backtrace_and_exit" |
                    "abort" | "exit"
       <ib_rdma_statement> ::=

               "ib_rdma" <validity>
       <rdma_device_statement> ::=

               "rdma_device" <string>
       <rdma_port_statement> ::=

               "rdma_port" <number>
       <rdma_gid_index_statement> ::=

               "rdma_gid_index" <number>
       <rdma_min_size_statement> ::=

               "rdma_min_size" <number>
       <rdma_mr_reg_mode_statement> ::=

               "rdma_mr_reg_mode" <mr_reg_mode>
       <mr_reg_mode> ::=

               "static" | "dynamic" | "static" "dynamic"

mr reg mode can be "static", "dynamic", or even "static" "dynamic" together, iconic ๐ŸŒˆ

       <rdma_mr_reg_static_min_size_statement> ::=

               "rdma_mr_reg_static_min_size" <number>
       <rdma_mr_reg_static_max_size_statement> ::=

               "rdma_mr_reg_static_max_size" <number>
       <replicainfo_statement> ::=

               "replicainfo" <validity>
       <write_verify_statement> ::=

               "write_verify" <validity>
       <write_verify_interval_statement> ::=

               "write_verify_interval" <number>
       <write_verify_retry_interval_statement> ::=

               "write_verify_retry_interval" <number>
       <write_verify_log_interval_statement> ::=

               "write_verify_log_interval" <number>

๐ŸŒธ EXAMPLES ๐ŸŒธ

bestie. real config files. let's go ๐Ÿซถ

Here's one for gfarm2.conf that uses sharedsecret authentication:

metadb_server_host metadb.example.org
metadb_server_port 601
auth enable sharedsecret *
sockopt keepalive

And here's a gfmd.conf that uses PostgreSQL to store the metadata, and lets filesystem nodes and clients at IP address 192.168.0.0/24 in, via sharedsecret authentication:

metadb_server_host metadb.example.org
metadb_server_port 601
postgresql_server_host metadb.example.org
postgresql_server_port 5432
postgresql_dbname gfarm
postgresql_user gfarm
postgresql_password "secret-postgresql-password"
auth enable sharedsecret 192.168.0.0/24
admin_user john
sockopt keepalive

And this one is a gfmd.conf that uses LDAP to store the metadata, and lets filesystem nodes and clients from any IP address in, via GSI authentication:

metadb_server_host metadb.example.com
metadb_server_port 601
ldap_server_host metadb.example.com
ldap_server_port 602
ldap_base_dn "dc=example, dc=com"
ldap_bind_dn "cn=gfarmuser, dc=example, dc=com"
ldap_bind_password "secret-ldap-password"
auth enable gsi *
spool_server_cred_type host
spool_server_cred_service gfsd
admin_user john
admin_user_gsi_dn "/C=JP/ST=Tokyo/L=Chuo-ku/O=Example, Inc./OU=Example Division/CN=John Doe"
sockopt keepalive
lowkey obsessed with how ldap_base_dn "dc=example, dc=com" has that little space in it and nobody's mad about it ๐Ÿ’–

๐ŸŽ€ FILES ๐ŸŽ€

  • %%SYSCONFDIR%%/gfarm2.conf
  • $HOME/.gfarm2rc

๐Ÿ’œ SEE ALSO ๐Ÿ’œ

gfmd(8), gfsd(8), setsockopt(2)


and that's the whole page bestie, you ate it fr fr ๐Ÿ’…

this one's from the Gfarm manual, dated 17 Sep 2020, and it lives under the name GFARM2.CONF(5) โ€” so when you cite it, cite it cute โœจ

mwah, go configure something gorgeous ๐Ÿฆ‹

๐Ÿ“ฆ where this page comes from