niamtokik / arweave

The Arweave server and App Developer Toolkit.
https://www.arweave.org
GNU General Public License v2.0
0 stars 0 forks source link

benchmark-vdf does not run on FreeBSD #3

Open niamtokik opened 2 weeks ago

niamtokik commented 2 weeks ago
Arweave launch script: ./bin/benchmark-vdf
Arweave launch script: /home/user/arweave/_build/prod/rel/arweave/bin/arweave
Arweave launch options: +Ktrue +A1024 +SDio1024     +MBsbct 103424 +MBsmbcs 10240 +MBlmbcs 410629 +MBmmmbc 1024 +MBas aobf     +sbwtvery_long +sbwtdcpuvery_long +sbwtdiovery_long     +swtvery_low +swtdcpuvery_low +swtdiovery_low +Bi
Exec: /home/user/arweave/_build/prod/rel/arweave/erts-12.3.2.17/bin/erlexec -noinput +Bd -boot /home/user/arweave/_build/prod/rel/arweave/releases/2.7.4/start -mode embedded -boot_var SYSTEM_LIB_DIR /home/user/arweave/_build/prod/rel/arweave/lib -config /home/user/arweave/_build/prod/rel/arweave/releases/2.7.4/sys.config -args_file /home/user/arweave/_build/prod/rel/arweave/releases/2.7.4/vm.args -- foreground +Ktrue +A1024 +SDio1024 +MBsbct 103424 +MBsmbcs 10240 +MBlmbcs 410629 +MBmmmbc 1024 +MBas aobf +sbwtvery_long +sbwtdcpuvery_long +sbwtdiovery_long +swtvery_low +swtdcpuvery_low +swtdiovery_low +Bi -run ar benchmark_vdf
Root: /home/user/arweave/_build/prod/rel/arweave
/home/user/arweave/_build/prod/rel/arweave
Failed to create dirty io scheduler thread 457, error = 35
./bin/benchmark-vdf: line 10:  9828 Abort trap              (core dumped) $ARWEAVE foreground $ARWEAVE_OPTS -run ar benchmark_vdf
niamtokik commented 2 weeks ago

+SDio1024 Erlang Flag crashes Arweave on FreeBSD. +SDio431 is working though (just tried to decrement the value until it was not crashing).

+SDio DirtyIOSchedulers - Sets the number of dirty I/O scheduler threads to create. Valid range is 1-1024. By default, the number of dirty I/O scheduler threads created is 10.

The amount of dirty IO schedulers is not limited by the amount of normal schedulers like the amount of dirty CPU schedulers. This since only I/O bound work is expected to execute on dirty I/O schedulers. If the user should schedule CPU bound jobs on dirty I/O schedulers, these jobs might starve ordinary jobs executing on ordinary schedulers.

Typical users of the dirty IO schedulers are reading and writing to files.

You can use msacc in order to see the current load of the dirty IO schedulers threads and adjust the number used accordingly.

-- https://www.erlang.org/doc/apps/erts/erl_cmd#+SDio

see: https://www.erlang.org/doc/apps/runtime_tools/msacc