123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274 |
- // This file is part of BOINC.
- // http://boinc.berkeley.edu
- // Copyright (C) 2018 University of California
- //
- // BOINC is free software; you can redistribute it and/or modify it
- // under the terms of the GNU Lesser General Public License
- // as published by the Free Software Foundation,
- // either version 3 of the License, or (at your option) any later version.
- //
- // BOINC is distributed in the hope that it will be useful,
- // but WITHOUT ANY WARRANTY; without even the implied warranty of
- // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- // See the GNU Lesser General Public License for more details.
- //
- // You should have received a copy of the GNU Lesser General Public License
- // along with BOINC. If not, see <http://www.gnu.org/licenses/>.
- // flags determining what is written to standard out.
- // (errors go to stderr)
- //
- // NOTE: all writes to stdout should have an if (log_flags.*) {} around them.
- //
- #ifndef BOINC_CC_CONFIG_H
- #define BOINC_CC_CONFIG_H
- #include <vector>
- #include <string>
- #include "proxy_info.h"
- #include "coproc.h"
- #define DEFAULT_MAX_EVENT_LOG_LINES 2000
- struct XML_PARSER;
- struct PROJECT;
- struct RESULT;
- #define MAX_FILE_XFERS_PER_PROJECT 2
- #define MAX_FILE_XFERS 8
- // kind of arbitrary
- struct LOG_FLAGS {
- // If you add anything, you must add it to parse() and write()
- // on by default; intended for all users
- //
- bool file_xfer;
- // file transfer start and finish
- bool sched_ops;
- // interactions with schedulers
- bool task;
- // task start and finish, and suspend/resume
- // off by default; intended for developers and testers
- //
- bool android_debug;
- // show Android-specific info (battery etc.)
- bool app_msg_receive;
- // show shared-mem message from apps
- bool app_msg_send;
- // show shared-mem message to apps
- bool async_file_debug;
- // show asynchronous file operations (copy, MD5, decompress)
- bool benchmark_debug;
- // debug CPU benchmarks
- bool checkpoint_debug;
- bool coproc_debug;
- // show coproc reserve/free and startup msgs
- bool cpu_sched;
- // preemption and resumption
- bool cpu_sched_debug;
- // explain scheduler decisions
- bool cpu_sched_status;
- // show what's running
- bool dcf_debug;
- // show changes to duration correction factors
- bool disk_usage_debug;
- // disk usage and project share info
- bool priority_debug;
- // info related to REC and scheduling priority
- bool file_xfer_debug;
- // show completion of FILE_XFER
- bool gui_rpc_debug;
- bool heartbeat_debug;
- bool http_debug;
- bool http_xfer_debug;
- bool idle_detection_debug;
- // show details leading to idle/not-idle determinations.
- bool mem_usage_debug;
- // memory usage
- bool network_status_debug;
- bool notice_debug;
- bool poll_debug;
- // show what polls are responding
- bool proxy_debug;
- bool rr_simulation;
- // results of RR sim
- bool rrsim_detail;
- // details of RR sim
- bool sched_op_debug;
- bool scrsave_debug;
- bool slot_debug;
- // allocation of slots
- bool state_debug;
- // print textual summary of CLIENT_STATE initially
- // and after each scheduler RPC and garbage collect
- // also show actions of garbage collector
- bool statefile_debug;
- // show when and why state file is written
- bool suspend_debug;
- // details of processing and network suspend/resume
- bool task_debug;
- // task start and control details, and when apps checkpoint
- bool time_debug;
- // changes in on_frac, active_frac, connected_frac
- bool trickle_debug;
- // show trickle messages
- bool unparsed_xml;
- // show unparsed XML lines
- bool work_fetch_debug;
- // work fetch policy
- LOG_FLAGS() {
- task = true;
- file_xfer = true;
- sched_ops = true;
- }
- void init();
- int parse(XML_PARSER&);
- void show();
- int write(MIOFILE& out);
- };
- struct EXCLUDE_GPU {
- std::string url;
- std::string type; // empty means all types
- std::string appname; // empty means all apps
- int device_num; // -1 means all instances
- int parse(XML_PARSER&);
- void write(MIOFILE&);
- };
- // if you add anything here, add it to
- // defaults(), parse_options(), parse_options_client(), write(),
- // and possibly show()
- //
- struct CC_CONFIG {
- bool abort_jobs_on_exit;
- bool allow_gui_rpc_get;
- bool allow_multiple_clients;
- bool allow_remote_gui_rpc;
- std::vector<std::string> alt_platforms;
- COPROCS config_coprocs;
- bool disallow_attach;
- bool dont_check_file_sizes;
- bool dont_contact_ref_site;
- bool dont_suspend_nci;
- bool dont_use_vbox;
- bool dont_use_wsl;
- std::vector<EXCLUDE_GPU> exclude_gpus;
- std::vector<std::string> exclusive_apps;
- std::vector<std::string> exclusive_gpu_apps;
- bool exit_after_finish;
- bool exit_before_start;
- bool exit_when_idle;
- bool fetch_minimal_work;
- bool fetch_on_update;
- std::string force_auth;
- bool http_1_0;
- int http_transfer_timeout_bps;
- int http_transfer_timeout;
- std::vector<int> ignore_gpu_instance[NPROC_TYPES];
- bool lower_client_priority;
- int max_event_log_lines;
- int max_file_xfers;
- int max_file_xfers_per_project;
- double max_stderr_file_size;
- double max_stdout_file_size;
- int max_tasks_reported;
- int ncpus;
- bool no_alt_platform;
- bool no_gpus;
- bool no_info_fetch;
- bool no_opencl;
- bool no_priority_change;
- bool os_random_only;
- int process_priority;
- int process_priority_special;
- PROXY_INFO proxy_info;
- double rec_half_life;
- bool report_results_immediately;
- bool run_apps_manually;
- int save_stats_days;
- bool skip_cpu_benchmarks;
- bool simple_gui_only;
- double start_delay;
- bool stderr_head;
- bool suppress_net_info;
- bool unsigned_apps_ok;
- bool use_all_gpus;
- bool use_certs;
- bool use_certs_only;
- // overrides use_certs
- bool vbox_window;
- std::vector<std::string> ignore_tty;
- std::string device_name;
- CC_CONFIG();
- void defaults();
- int parse(FILE*);
- int parse(XML_PARSER&, LOG_FLAGS&);
- int parse_client(FILE*);
- int parse_options(XML_PARSER&);
- int parse_options_client(XML_PARSER&);
- int write(MIOFILE&, LOG_FLAGS&);
- void show();
- };
- // Stuff related to app_config.xml
- typedef std::vector<std::string> MSG_VEC;
- struct APP_CONFIG {
- char name[256];
- int max_concurrent;
- double gpu_gpu_usage;
- double gpu_cpu_usage;
- bool fraction_done_exact;
- bool report_results_immediately;
- APP_CONFIG(){}
- int parse(XML_PARSER&, MSG_VEC&, LOG_FLAGS&);
- int parse_gpu_versions(XML_PARSER&, MSG_VEC&, LOG_FLAGS&);
- };
- struct APP_VERSION_CONFIG {
- char app_name[256];
- char plan_class[256];
- char cmdline[256];
- double avg_ncpus;
- double ngpus;
- APP_VERSION_CONFIG(){}
- int parse(XML_PARSER&, MSG_VEC&, LOG_FLAGS&);
- };
- struct APP_CONFIGS {
- std::vector<APP_CONFIG> app_configs;
- std::vector<APP_VERSION_CONFIG> app_version_configs;
- int project_max_concurrent;
- bool project_has_mc;
- // have app- or project-level max concurrent restriction
- int project_min_mc;
- // the min of these restrictions
- bool report_results_immediately;
- int parse(XML_PARSER&, MSG_VEC&, LOG_FLAGS&);
- int parse_file(FILE*, MSG_VEC&, LOG_FLAGS&);
- int config_app_versions(PROJECT*, bool show_warnings);
- void write(MIOFILE&);
- void clear() {
- app_configs.clear();
- app_version_configs.clear();
- project_max_concurrent = 0;
- project_has_mc = false;
- project_min_mc = 0;
- report_results_immediately = false;
- }
- };
- #endif
|