Skip to content

Commit

Permalink
Merge branch 'main' into noalign_alloc
Browse files Browse the repository at this point in the history
  • Loading branch information
DmitriyMusatkin authored Oct 26, 2023
2 parents f9731d5 + e381a7b commit 314596b
Show file tree
Hide file tree
Showing 8 changed files with 125 additions and 4 deletions.
5 changes: 4 additions & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,10 @@ if (WIN32)
endif ()

list(APPEND PLATFORM_DEFINES WINDOWS_KERNEL_LIB=${WINDOWS_KERNEL_LIB})
list(APPEND PLATFORM_LIBS BCrypt ${WINDOWS_KERNEL_LIB} Ws2_32 Shlwapi)
# PSAPI_VERSION=1 is needed to support GetProcessMemoryInfo on both pre and
# post Win7 OS's.
list(APPEND PLATFORM_DEFINES PSAPI_VERSION=1)
list(APPEND PLATFORM_LIBS BCrypt ${WINDOWS_KERNEL_LIB} Ws2_32 Shlwapi Psapi)
else ()
file(GLOB AWS_COMMON_OS_HEADERS
"include/aws/common/posix/*"
Expand Down
1 change: 1 addition & 0 deletions include/aws/common/hash_table.h
Original file line number Diff line number Diff line change
Expand Up @@ -276,6 +276,7 @@ int aws_hash_table_create(
*
* Returns AWS_OP_SUCCESS if an item was found or created.
* Raises AWS_ERROR_OOM if hash table expansion was required and memory
* allocation failed.
*/
AWS_COMMON_API
int aws_hash_table_put(struct aws_hash_table *map, const void *key, void *value, int *was_created);
Expand Down
30 changes: 30 additions & 0 deletions include/aws/common/system_resource_util.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
#ifndef AWS_COMMON_SYSTEM_RESOURCE_UTIL_H
#define AWS_COMMON_SYSTEM_RESOURCE_UTIL_H

/**
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
* SPDX-License-Identifier: Apache-2.0.
*/
#include <aws/common/common.h>

AWS_PUSH_SANE_WARNING_LEVEL

AWS_EXTERN_C_BEGIN

struct aws_memory_usage_stats {
size_t maxrss; /* max resident set size in kilobytes since program start */
size_t page_faults; /* num of page faults since program start */

size_t _reserved[8];
};

/*
* Get memory usage for current process.
* Raises AWS_ERROR_SYS_CALL_FAILURE on failure.
*/
AWS_COMMON_API int aws_init_memory_usage_for_current_process(struct aws_memory_usage_stats *memory_usage);

AWS_EXTERN_C_END
AWS_POP_SANE_WARNING_LEVEL

#endif /* AWS_COMMON_SYSTEM_RESOURCE_UTIL_H */
6 changes: 3 additions & 3 deletions source/common.c
Original file line number Diff line number Diff line change
Expand Up @@ -323,15 +323,15 @@ void aws_common_library_init(struct aws_allocator *allocator) {
assumptions due to the way loaders and dlload are often implemented and those symbols are defined by things
like libpthread.so on some unix distros. Sorry about the memory usage here, but it's our only safe choice.
Also, please don't do numa configurations if memory is your economic bottleneck. */
g_libnuma_handle = dlopen("libnuma.so", RTLD_LOCAL);
g_libnuma_handle = dlopen("libnuma.so", RTLD_LAZY | RTLD_LOCAL);

/* turns out so versioning is really inconsistent these days */
if (!g_libnuma_handle) {
g_libnuma_handle = dlopen("libnuma.so.1", RTLD_LOCAL);
g_libnuma_handle = dlopen("libnuma.so.1", RTLD_LAZY | RTLD_LOCAL);
}

if (!g_libnuma_handle) {
g_libnuma_handle = dlopen("libnuma.so.2", RTLD_LOCAL);
g_libnuma_handle = dlopen("libnuma.so.2", RTLD_LAZY | RTLD_LOCAL);
}

if (g_libnuma_handle) {
Expand Down
32 changes: 32 additions & 0 deletions source/posix/system_resource_utils.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
/**
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
* SPDX-License-Identifier: Apache-2.0.
*/

#include <aws/common/system_resource_util.h>

#include <sys/resource.h>

int aws_init_memory_usage_for_current_process(struct aws_memory_usage_stats *memory_usage) {
AWS_PRECONDITION(memory_usage);

AWS_ZERO_STRUCT(*memory_usage);
struct rusage usage;

if (getrusage(RUSAGE_SELF, &usage)) {
return aws_raise_error(AWS_ERROR_SYS_CALL_FAILURE);
}

#if defined(AWS_OS_APPLE)
/*
* For some reason Apple switched to reporting this in bytes instead of KB
* around MacOS 10.6.
* Make it back to KB. Result might be slightly off due to rounding.
*/
memory_usage->maxrss = usage.ru_maxrss / 1024;
#else
memory_usage->maxrss = usage.ru_maxrss;
#endif
memory_usage->page_faults = usage.ru_majflt;
return AWS_OP_SUCCESS;
}
31 changes: 31 additions & 0 deletions source/windows/system_resource_utils.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
/**
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
* SPDX-License-Identifier: Apache-2.0.
*/

#include <aws/common/system_resource_util.h>

#include <windows.h>

#include <psapi.h>

int aws_init_memory_usage_for_current_process(struct aws_memory_usage_stats *memory_usage) {
AWS_PRECONDITION(memory_usage);

AWS_ZERO_STRUCT(*memory_usage);
HANDLE hProcess = GetCurrentProcess();

PROCESS_MEMORY_COUNTERS pmc;

BOOL ret = GetProcessMemoryInfo(hProcess, &pmc, sizeof(pmc));
CloseHandle(hProcess);

if (!ret) {
return aws_raise_error(AWS_ERROR_SYS_CALL_FAILURE);
}

memory_usage->maxrss = pmc.PeakWorkingSetSize;
memory_usage->page_faults = pmc.PageFaultCount;

return AWS_OP_SUCCESS;
}
2 changes: 2 additions & 0 deletions tests/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -404,6 +404,8 @@ add_test_case(ring_buffer_acquire_up_to_multi_threaded_test)
add_test_case(string_to_log_level_success_test)
add_test_case(string_to_log_level_failure_test)

add_test_case(test_memory_usage_maxrss)

if(NOT ANDROID)
add_test_case(test_logging_filter_at_AWS_LL_NONE_s_logf_all_levels)
add_test_case(test_logging_filter_at_AWS_LL_FATAL_s_logf_all_levels)
Expand Down
22 changes: 22 additions & 0 deletions tests/system_resource_util_test.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
/**
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
* SPDX-License-Identifier: Apache-2.0.
*/

#include <aws/common/system_resource_util.h>

#include <aws/testing/aws_test_harness.h>

static int s_test_memory_usage_maxrss(struct aws_allocator *allocator, void *ctx) {
(void)allocator;
(void)ctx;

struct aws_memory_usage_stats mu;
ASSERT_SUCCESS(aws_init_memory_usage_for_current_process(&mu));

ASSERT_TRUE(mu.maxrss > 0);

return 0;
}

AWS_TEST_CASE(test_memory_usage_maxrss, s_test_memory_usage_maxrss)

0 comments on commit 314596b

Please sign in to comment.