# Configuration Piston provides many different configuration options to tweak Piston to meet your needs. Configuration is specified through environment variables, prefixed with `PISTON_`. ## Log Level ```yaml key: PISTON_LOG_LEVEL default: INFO ``` Level of log output to provide. One of `DEBUG`, `INFO`, `WARN`, `ERROR` or `NONE` ## Bind Address ```yaml key: PISTON_BIND_ADDRESS default: 0.0.0.0:2000 ``` Port and IP address to bind the Piston API to. !!! warning Changing this value is not recommended. This changes the bind address inside the container, and thus serves no purpose when running in a container ## Data Directory ```yaml key: PISTON_DATA_DIRECTORY default: /piston ``` Absolute path to piston related data, including packages and job contexts. !!! warning Changing this value is not recommended. Some packages require absolute paths on disk at build time. Due to this, some packages may break when changing this parameter. ## Runner GID/UID range ```yaml key: - PISTON_RUNNER_UID_MIN - PISTON_RUNNER_UID_MAX - PISTON_RUNNER_GID_MIN - PISTON_RUNNER_GID_MAX default: - 1001 - 1500 - 1001 - 1500 ``` UID and GID ranges to use when executing jobs. !!! warning Changing this value is not recommended. The piston container creates 500 users and groups by default, and reserves user/group 1000 for running the API. Any processes run by these users will be killed when cleaning up a job. ## Disable Networking ```yaml key: PISTON_DISABLE_NETWORKING default: true ``` Disallows access to `socket` syscalls, effectively disabling networking for jobs run by piston. ## Max Process Count ```yaml key: PISTON_MAX_PROCESS_COUNT default: 64 ``` Maximum number of processes allowed to to have open for a job. Resists against exhausting the process table, causing a full system lockup. ## Output Max Size ```yaml key: PISTON_OUTPUT_MAX_SIZE default: 1024 ``` Maximum size of stdio buffers for each job. Resist against run-away output which could lead to memory exhaustion. ## Max Open Files ```yaml key: PISTON_MAX_OPEN_FILES default: 64 ``` Maximum number of open files at a given time by a job. Resists against writing many smaller files to exhaust inodes. ## Max File Size ```yaml key: PISTON_MAX_FILE_SIZE default: 10000000 #10MB ``` Maximum size for a singular file written to disk. Resists against large file writes to exhaust disk space. ## Compile/Run timeouts ```yaml key: - PISTON_COMPILE_TIMEOUT default: 10000 key: - PISTON_RUN_TIMEOUT default: 3000 ``` The maximum time that is allowed to be taken by a stage in milliseconds. This is the wall-time of the stage. The time that the CPU does not spend working on the stage (e.g, due to context switches or IO) is counted. ## Compile/Run CPU-Time ```yaml key: - PISTON_COMPILE_CPU_TIME default: 10000 key: - PISTON_RUN_CPU_TIME default: 3000 ``` The maximum CPU-time that is allowed to be consumed by a stage in milliseconds. The time that the CPU does not spend working on the stage (e.g, IO and context switches) is not counted. This option is typically used in algorithm contests. ## Compile/Run memory limits ```yaml key: - PISTON_COMPILE_MEMORY_LIMIT - PISTON_RUN_MEMORY_LIMIT default: -1 ``` Maximum memory allowed by a stage in bytes. Use -1 for unlimited memory usage. Useful for running memory-limited contests. ## Repository URL ```yaml key: PISTON_REPO_URL default: https://github.com/engineer-man/piston/releases/download/pkgs/index ``` URL for repository index, where packages will be downloaded from. ## Maximum Concurrent Jobs ```yaml key: PISTON_MAX_CONCURRENT_JOBS default: 64 ``` Maximum number of jobs to run concurrently. ## Limit overrides ```yaml key: PISTON_LIMIT_OVERRIDES default: {} ``` Per-language overrides/exceptions for the each of `max_process_count`, `max_open_files`, `max_file_size`, `compile_memory_limit`, `run_memory_limit`, `compile_timeout`, `run_timeout`, `compile_cpu_time`, `run_cpu_time`, `output_max_size`. Defined as follows: ``` PISTON_LIMIT_OVERRIDES={"c++":{"max_process_count":128}} ``` This will give `c++` a max_process_count of 128 regardless of the configuration.