eecheng87 / esca Goto Github PK
View Code? Open in Web Editor NEWEffective System Call Aggregation
Home Page: https://eecheng87.github.io/ESCA/
License: MIT License
Effective System Call Aggregation
Home Page: https://eecheng87.github.io/ESCA/
License: MIT License
We need to support batch_start()
to prevent unintended batching.
It would be like:
write(...);
batch_start();
write(...);
...
batch_flush();
make config TARGET=lighttpd
make lighttpd
./autogen.sh: 20: autoreconf: not found
make: *** [Makefile:62: lighttpd] Error 127
autoconf
toolssudo apt install autoconf automake libtool
ESCA was just a hack at the very beginning. However, it has been public for evaluation purpose, and we should enforce source code consistency. Here are the general rules:
static
modifier for inner symbols. In addition, we might make use of GCC Visibility to hide unintended symbols.README.md
.lwan is a high-performance and scalable web server implemented with coroutine technique. There is a potential to extend the applicability of ESCA to adapt lwan after this patch was merged.
Following is proposed changes:
lwan
will spawn threads as many as the number of host cores. Since ESCA is for single thread applications, lwan
should be configured with a single thread.In current ESCA, it is only available in single-thread application. It is time to extend ESCA to support multi-thread applications. The expected implementation would be similar with SAIO. Following is proposed changes:
init_esca
should allocate a table and pin to a proper physical page by customized system call. (refer to init_worker in SAIO)To verify the correctness, a unit test program is also needed. The proposed testing program would like (simplified):
void worker() {
batch_start();
write(1, "foo", 3);
write(1, "bar", 3);
batch_flush();
}
int main() {
...
pthread_create(..., &worker, ...);
...
return 0;
}
As stated in #21 , multi-worker lighttpd is not available. We should extend the applicability by changing the patch file. (option server.max-worker
in config file determine the number of workers)
In the current version, we just provide html
files in repo.
This is not good, we need to propose another method to download them.
lighttpd v1.4.64 was released on Jan 19, 2022. It is time to migrate the new codebase for evaluation purpose.
We can follow LKMPG, which activates GitHub Actions to automate the CI. Therefore, we can ensure that source code is always buildable and ready for general use.
malloc
might decrease performance for copying string into cpybuf
.
It's necessary to implement memory pool for copying string.
Since kTLS might be considered in ESCA later, it is time to upgrade the version of Nginx that support kTLS feature.
Nginx should be upgrade to v1.21.4 or later.
The current build system will attempt to build lighttpd and nginx from source. However, it will soon override the existing files by previous nginx/lighttpd installations. Since we tend to demonstrate the ability of ESCA, it is not necessary to override the files in /usr/local
. In addition, sudo
should be avoided while building from source.
File esca.c
should follow kernel-doc comments, which allows the generation of API documentation extracted from the comments.
The current implementation doesn't consider TLS processing. However, SSL/TLS have been employed (typically in the form
of HTTPS) by 64.3% of the 137,502 most popular websites on the Internet as reported in November 2018.
Expected modifications:
--with-http_ssl_module
).sendfile
is replaced with write
. Thus, wrapper of write
should be added in ngx.c
.Similar changes can be referenced in SAIO in the coming weeks.
As stated in #21 , multi-worker Nginx is not available. We should extend the applicability by changing the patch file. (option worker_processes
in config file determine the number of workers)
Currently, variable curindex
is shared by threads. We need to make several curindex
s used by each thread to prevent contention.
At present, the source files of both Linux kernel module and wrapper contain several dead code, which would reflect the prototyping. However, we should clean up and make the source more consistent.
Expected results:
Current implementation didn't check if it's necessary to execute batch_flush
.
In some case, this will be performance bottleneck.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.