CPU挖礦程式設定範例
本文以 fireice-uk/xmr-stak-cpu v1.1 作為示範如何從編譯到執行
系統為Ubuntu 16.04 LTS server,選擇的礦池為 monerohash.com
若沒有要自行編譯檔案可以直接從編輯config.txt開始 (windows系統亦同)
2017/06/17更新:
xmr-stak-cpu後來的更新版本已不需要在config裡指定cpu_thread_num
僅需設定cpu_threads_conf那個區域即可。
sudo apt-get install aptitude
sudo aptitude update
sudo aptitude install –with-recommends build-essential autotools-dev autoconf automake libcurl3 libcurl4-gnutls-dev git make cmake libssl-dev pkg-config libevent-dev libunbound-dev libminiupnpc-dev doxygen supervisor jq libboost-all-dev htop libmicrohttpd-dev
git clone https://github.com/fireice-uk/xmr-stak-cpu.git
cd xmr-stak-cpu
nano donate-level.h
(此步驟可自定給予作者的抽成後ctrl+x儲存)
cmake .
make
cp config.txt bin
cd bin
sudo sysctl -w vm.nr_hugepages=128
nano config.txt
(編輯config.txt設定裡的執行緒數量與對應的核心,礦池網址與錢包地址後ctrl+x儲存)
screen
(非桌面版Linux系統可選步驟)
sudo ./xmr-stak-cpu
(linux系統以root執行,windows以系統管理員身分執行)
以下為config.txt設定範例
/*
* Number of threads. You can configure them below. Cryptonight uses 2MB of memory, so the optimal setting
* here is the size of your L3 cache divided by 2. Intel mid-to-high end desktop processors have 2MB of L3
* cache per physical core. Low end cpus can have 1.5 or 1 MB while Xeons can have 2, 2.5 or 3MB per core.
*/
"cpu_thread_num" : 7,
/*
* Thread configuration for each thread. Make sure it matches the number above.
* low_power_mode - This mode will double the cache usage, and double the single thread performance. It will
* consume much less power (as less cores are working), but will max out at around 80-85% of
* the maximum performance.
*
* no_prefetch - This mode meant for large pages only. It will generate an error if running on slow memory
* Some sytems can gain up to extra 5% here, but sometimes it will have no difference or make
* things slower.
*
* affine_to_cpu - This can be either false (no affinity), or the CPU core number. Note that on hyperthreading
* systems it is better to assign threads to physical cores. On Windows this usually means selecting
* even or odd numbered cpu numbers. For Linux it will be usually the lower CPU numbers, so for a 4
* physical core CPU you should select cpu numbers 0-3.
*
*/
"cpu_threads_conf" : [
{ "low_power_mode" : false, "no_prefetch" : false, "affine_to_cpu" : 5 },
{ "low_power_mode" : false, "no_prefetch" : false, "affine_to_cpu" : 6 },
{ "low_power_mode" : false, "no_prefetch" : false, "affine_to_cpu" : 7 },
{ "low_power_mode" : false, "no_prefetch" : false, "affine_to_cpu" : 8 },
{ "low_power_mode" : false, "no_prefetch" : false, "affine_to_cpu" : 9 },
{ "low_power_mode" : false, "no_prefetch" : false, "affine_to_cpu" : 10 },
{ "low_power_mode" : false, "no_prefetch" : false, "affine_to_cpu" : 11 },
],
/*
* LARGE PAGE SUPPORT
* Lare pages need a properly set up OS. It can be difficult if you are not used to systems administation,
* but the performace results are worth the trouble - you will get around 20% boost. Slow memory mode is
* meant as a backup, you won't get stellar results there. If you are running into trouble, especially
* on Windows, please read the common issues in the README.
*
* By default we will try to allocate large pages. This means you need to "Run As Administrator" on Windows.
* You need to edit your system's group policies to enable locking large pages. Here are the steps from MSDN
*
* 1. On the Start menu, click Run. In the Open box, type gpedit.msc.
* 2. On the Local Group Policy Editor console, expand Computer Configuration, and then expand Windows Settings.
* 3. Expand Security Settings, and then expand Local Policies.
* 4. Select the User Rights Assignment folder.
* 5. The policies will be displayed in the details pane.
* 6. In the pane, double-click Lock pages in memory.
* 7. In the Local Security Setting – Lock pages in memory dialog box, click Add User or Group.
* 8. In the Select Users, Service Accounts, or Groups dialog box, add an account that you will run the miner on
* 9. Reboot for change to take effect.
*
* Windows also tends to fragment memory a lot. If you are running on a system with 4-8GB of RAM you might need
* to switch off all the auto-start applications and reboot to have a large enough chunk of contiguous memory.
*
* On Linux you will need to configure large page support "sudo sysctl -w vm.nr_hugepages=128" and increase your
* ulimit -l. To do do this you need to add following lines to /etc/security/limits.conf - "* soft memlock 262144"
* and "* hard memlock 262144". You can also do it Windows-style and simply run-as-root, but this is NOT
* recommended for security reasons.
*
* Memory locking means that the kernel can't swap out the page to disk - something that is unlikey to happen on a
* command line system that isn't starved of memory. I haven't observed any difference on a CLI Linux system between
* locked and unlocked memory. If that is your setup see option "no_mlck".
*/
/*
* use_slow_memory defines our behaviour with regards to large pages. There are three possible options here:
* always - Don't even try to use large pages. Always use slow memory.
* warn - We will try to use large pages, but fall back to slow memory if that fails.
* no_mlck - This option is only relevant on Linux, where we can use large pages without locking memory.
* It will never use slow memory, but it won't attempt to mlock
* never - If we fail to allocate large pages we will print an error and exit.
*/
"use_slow_memory" : "never",
/*
* pool_address - Pool address should be in the form "pool.supportxmr.com:3333". Only stratum pools are supported.
* wallet_address - Your wallet, or pool login.
* pool_password - Can be empty in most cases or "x".
*/
"pool_address" : "monerohash.com:3333",
"wallet_address" : "45RByKZ4n3qHecCcTLH9poJyPAQLuYGEDVtBEEnyhwPYBHquxPZ1kNCGMiee8iHm6yQM6u8pDZRQfDYnTz9Cdf6fCLmJSV8",
"pool_password" : "",
/*
* Network timeouts.
* Because of the way this client is written it doesn't need to constantly talk (keep-alive) to the server to make
* sure it is there. We detect a buggy / overloaded server by the call timeout. The default values will be ok for
* nearly all cases. If they aren't the pool has most likely overload issues. Low call timeout values are preferable -
* long timeouts mean that we waste hashes on potentially stale jobs. Connection report will tell you how long the
* server usually takes to process our calls.
*
* call_timeout - How long should we wait for a response from the server before we assume it is dead and drop the connection.
* retry_time - How long should we wait before another connection attempt.
* Both values are in seconds.
*/
"call_timeout" : 10,
"retry_time" : 10,
/*
* Output control.
* Since most people are used to miners printing all the time, that's what we do by default too. This is suboptimal
* really, since you cannot see errors under pages and pages of text and performance stats. Given that we have internal
* performance monitors, there is very little reason to spew out pages of text instead of concise reports.
* Press 'h' (hashrate), 'r' (results) or 'c' (connection) to print reports.
*
* verbose_level - 0 - Don't print anything.
* 1 - Print intro, connection event, disconnect event
* 2 - All of level 1, and new job (block) event if the difficulty is different from the last job
* 3 - All of level 1, and new job (block) event in all cases, result submission event.
* 4 - All of level 3, and automatic hashrate report printing
*/
"verbose_level" : 3,
/*
* Automatic hashrate report
*
* h_print_time - How often, in seconds, should we print a hashrate report if verbose_level is set to 4.
* This option has no effect if verbose_level is not 4.
*/
"h_print_time" : 60,
/*
* Built-in web server
* I like checking my hashrate on my phone. Don't you?
* Keep in mind that you will need to set up port forwarding on your router if you want to access it from
* outside of your home network. Ports lower than 1024 on Linux systems will require root.
*
* httpd_port - Port we should listen on. Default, 0, will switch off the server.
*/
"httpd_port" : 0,
/*
* prefer_ipv4 - IPv6 preference. If the host is available on both IPv4 and IPv6 net, which one should be choose?
* This setting will only be needed in 2020's. No need to worry about it now.
*/
"prefer_ipv4" : true,