| /** @file | |
| A brief file description | |
| @section license License | |
| Licensed to the Apache Software Foundation (ASF) under one | |
| or more contributor license agreements. See the NOTICE file | |
| distributed with this work for additional information | |
| regarding copyright ownership. The ASF licenses this file | |
| to you under the Apache License, Version 2.0 (the | |
| "License"); you may not use this file except in compliance | |
| with the License. You may obtain a copy of the License at | |
| http://www.apache.org/licenses/LICENSE-2.0 | |
| Unless required by applicable law or agreed to in writing, software | |
| distributed under the License is distributed on an "AS IS" BASIS, | |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| See the License for the specific language governing permissions and | |
| limitations under the License. | |
| */ | |
| /**************************************************************************** | |
| EventSystem.cc -- | |
| ****************************************************************************/ | |
| #include "iocore/eventsystem/EventSystem.h" | |
| #include "tscore/Version.h" | |
| #include "tscore/hugepages.h" | |
| #include "records/RecCore.h" | |
| static constexpr ts::ModuleVersion EVENT_SYSTEM_MODULE_INTERNAL_VERSION{EVENT_SYSTEM_MODULE_PUBLIC_VERSION, | |
| ts::ModuleVersion::PRIVATE}; | |
| void | |
| ink_event_system_init(ts::ModuleVersion v) | |
| { | |
| ink_release_assert(v.check(EVENT_SYSTEM_MODULE_INTERNAL_VERSION)); | |
| int iobuffer_advice = 0; | |
| // For backwards compatibility make sure to allow thread_freelist_size | |
| // This needs to change in 6.0 | |
| RecEstablishStaticConfigInt32(thread_freelist_high_watermark, "proxy.config.allocator.thread_freelist_size"); | |
| RecEstablishStaticConfigInt32(thread_freelist_low_watermark, "proxy.config.allocator.thread_freelist_low_watermark"); | |
| extern int loop_time_update_probability; | |
| RecEstablishStaticConfigInt32(loop_time_update_probability, "proxy.config.exec_thread.loop_time_update_probability"); | |
| int chunk_sizes[DEFAULT_BUFFER_SIZES] = {0}; | |
| { | |
| auto chunk_sizes_string{RecGetRecordStringAlloc("proxy.config.allocator.iobuf_chunk_sizes")}; | |
| if (auto chunk_sizes_c_str{ats_as_c_str(chunk_sizes_string)}; | |
| chunk_sizes_c_str && !parse_buffer_chunk_sizes(chunk_sizes_c_str, chunk_sizes)) { | |
| // If we can't parse the string then we can't be sure of the chunk sizes so just exit | |
| Fatal("Failed to parse proxy.config.allocator.iobuf_chunk_sizes"); | |
| } | |
| } | |
| bool use_hugepages = ats_hugepage_enabled(); | |
| #ifdef MADV_DONTDUMP // This should only exist on Linux 3.4 and higher. | |
| RecBool dont_dump_enabled = true; | |
| if (auto tmp{RecGetRecordInt("proxy.config.allocator.dontdump_iobuffers", false)}; tmp) { | |
| dont_dump_enabled = tmp.value(); | |
| } | |
| if (dont_dump_enabled) { | |
| iobuffer_advice |= MADV_DONTDUMP; | |
| } | |
| #endif | |
| init_buffer_allocators(iobuffer_advice, chunk_sizes, use_hugepages); | |
| } |