From 45c99331161a20b401bd8e7d4cd26e58fc99e5a5 Mon Sep 17 00:00:00 2001 From: zhaohonghao Date: Thu, 21 Nov 2024 20:20:41 +0800 Subject: [PATCH] proxy: speed up writing and reading of large files speed up writing and reading of large files by increase rpmsg buffer size Signed-off-by: zhaohonghao --- src/component/mica/rpmsg_backend.h | 6 +- src/component/proxy/rpc_internal_model.h | 2 +- .../conformance/interfaces/proxy/1-1.c | 97 +++++++++++++++++++ 3 files changed, 102 insertions(+), 3 deletions(-) diff --git a/src/component/mica/rpmsg_backend.h b/src/component/mica/rpmsg_backend.h index a92e2223..f4836859 100644 --- a/src/component/mica/rpmsg_backend.h +++ b/src/component/mica/rpmsg_backend.h @@ -19,10 +19,12 @@ extern "C" { #endif +#define RPMSG_CONSOLE_BUFFER_SIZE 2048 + #define RPMSG_VIRTIO_CONSOLE_CONFIG \ (&(const struct rpmsg_virtio_config) { \ - .h2r_buf_size = 512, \ - .r2h_buf_size = 512, \ + .h2r_buf_size = RPMSG_CONSOLE_BUFFER_SIZE, \ + .r2h_buf_size = RPMSG_CONSOLE_BUFFER_SIZE, \ .split_shpool = false,\ }) diff --git a/src/component/proxy/rpc_internal_model.h b/src/component/proxy/rpc_internal_model.h index 280642cd..180aa1e5 100644 --- a/src/component/proxy/rpc_internal_model.h +++ b/src/component/proxy/rpc_internal_model.h @@ -112,7 +112,7 @@ #define MIN_ID OPEN_ID #define MAX_ID PRINTF_ID -#define MAX_SBUF_LEN 432 /* max socket buf len*/ +#define MAX_SBUF_LEN 1968 /* max socket buf len*/ #define MAX_CBUF_LEN 416 #define MAX_SADDR_SIZE 8 #define MAX_STRING_LEN MAX_SBUF_LEN diff --git a/testsuites/posixtestsuite/conformance/interfaces/proxy/1-1.c b/testsuites/posixtestsuite/conformance/interfaces/proxy/1-1.c index 5d831a4d..ee5bbcc5 100644 --- a/testsuites/posixtestsuite/conformance/interfaces/proxy/1-1.c +++ b/testsuites/posixtestsuite/conformance/interfaces/proxy/1-1.c @@ -149,6 +149,101 @@ close_file: return ret >= 0 ? 0 : -1; } +#define BUFF_SIZE 1968 +#define LARGE_FILE_SIZE 3 * 1024 *1024 +#define LARGE_FILE_NAME "/tmp/large.file" + +static char g_write_buff[BUFF_SIZE]; +static char g_read_buff[BUFF_SIZE]; + +static int test_fs_large_write() +{ + struct timespec start; + struct timespec end; + int fd = 0; + int ret = 0; + int sum = 0; + memset(g_write_buff, 'a', sizeof(g_write_buff)); + printf("\nUP>Creating a file on host and writing to it..\r\n"); + fd = open(LARGE_FILE_NAME, REDEF_O_CREAT | REDEF_O_RDWR | REDEF_O_APPEND, + S_IRUSR | S_IWUSR); + if (fd < 0) { + printf("\nUP>Open file '%s' fail, ret: %d\r\n", LARGE_FILE_NAME, fd); + return -1; + } + + printf("\nUP>Opened file '%s' with fd = %d\r\n", LARGE_FILE_NAME, fd); + clock_gettime(CLOCK_REALTIME, &start); + for (int i = 0; i < LARGE_FILE_SIZE / sizeof(g_write_buff); ++i) { + ret = write(fd, g_write_buff, sizeof(g_write_buff)); + sum += ret; + if (ret < 0) { + printf("\nUP>Write fail, ret: %d\r\n", ret); + goto close_file; + } + } + + if (sum < LARGE_FILE_SIZE) { + ret = write(fd, g_write_buff, LARGE_FILE_SIZE - sum); + sum += ret; + if (ret < 0) { + printf("\nUP>Write fail, ret: %d\r\n", ret); + goto close_file; + } + } + + clock_gettime(CLOCK_REALTIME, &end); + printf("\nUP>Wrote to fd = %d, size = %d, sum size = %d\r\n", fd, ret, sum); + float diff = end.tv_sec - start.tv_sec; + diff += (end.tv_nsec - start.tv_nsec) / 1000000000.0; + printf("\nUP>Write large file time = %.2fs\r\n", diff); + +close_file: + close(fd); + printf("\nUP>Closed fd = %d\r\n", fd); + return ret >= 0 ? 0 : -1; +} + +static int test_fs_large_read() +{ + struct timespec start; + struct timespec end; + int fd = 0; + int ret = 0; + int sum = 0; + fd = open(LARGE_FILE_NAME, REDEF_O_RDONLY); + if (fd < 0) { + printf("\nUP>Open file '%s' fail, ret: %d\r\n", LARGE_FILE_NAME, fd); + return -1; + } + + printf("\nUP>Opened file '%s' with fd = %d\r\n", LARGE_FILE_NAME, fd); + clock_gettime(CLOCK_REALTIME, &start); + while ((ret = read(fd, g_read_buff, sizeof(g_read_buff))) > 0) { + sum += ret; + } + + clock_gettime(CLOCK_REALTIME, &end); + if (ret < 0) { + printf("\nUP>Read fail, ret: %d\r\n", ret); + goto close_file; + } + + printf("\nUP>Read from fd = %d, size = %d, sum size = %d\r\n", fd, ret, sum); + if (sum != LARGE_FILE_SIZE) { + printf("\nUP>Read large file not finished\r\n"); + } + + float diff = end.tv_sec - start.tv_sec; + diff += (end.tv_nsec - start.tv_nsec) / 1000000000.0; + printf("\nUP>Read large file time = %.2fs\r\n", diff); + +close_file: + close(fd); + printf("\nUP>Closed fd = %d\r\n", fd); + return ret >= 0 ? 0 : -1; +} + #define BACKLOG 5 #define SV_SOCK_PATH "/tmp/us_xfr" #define BUF_SIZE 100 @@ -1836,6 +1931,8 @@ static test_case_t g_cases[] = { TEST_CASE_Y(test_fs_posix1), TEST_CASE_Y(test_fs_posix2), TEST_CASE_Y(test_fs_posix3), + TEST_CASE_Y(test_fs_large_write), + TEST_CASE_Y(test_fs_large_read), TEST_CASE_N(test_domain_server), TEST_CASE_N(test_domain_client), TEST_CASE_Y(test_getaddrinfo), -- Gitee