f-stack/doc/F-Stack_Nginx_APP_Guide.md

3.4 KiB

F-Stack Nginx APP Guide

F-Stack is an open source network framework based on DPDK. F-Stack supports standard Nginx as HTTP framework which means all web application based on HTTP can easily use F-Stack.

How does Nginx use F-Stack?

Nginx APP is in app/nginx-1.11.10 directory.


                                                    +--------+
                                                    |
+------------------------+                          |
   channel: socketpair                              |  signal(reload, quit..)
+------------------------+                          |
                                                    |
                                          +---------v--------+
                                          |                  |
                         +----------------+  master process  +---------------+
                         |                |                  |               |
                         |  channel       +----------+-------+               |
                         |                           |              channel  |
                         |                  channel  |                       |
                         |                           |                       |
               +---------+----------+     +----------+--------+    +---------+--------+
               |                    |     |                   |    |                  |
               | ff primary process |     |  worker process   |    |  worker process  |
               |                    |     |                   |    |                  |
               +--------------------+     +-------------------+    +------------------+
                ff_init(primary)          +--------+  +-------+
                loop:                     |        |  |       |
                 handle channel event     | fstack |  |channel|
                                          |  main  |  | event |
                                          |  loop  |  |thread |
                                          | thread |  |       |
                                          |        |  |       |
                                          +--------+  +-------+
                                           woker       loop:
                                          process      handle
                                           cycle      channel
                                                       event

  • spawn an extra process ff primary: ff_init(primary);loop(handle channel event).This process doesn't handle SIGQUIT.

  • worker process has 2 threads. main thread: ff_init(secondary);ff_run(worker_process_cycle), channel thread: loop(handle channel event).

Note that:

  • supported nginx signals: reload(HUP)/reopen(USR1)/stop(TERM).

  • unsupported nginx signals: NGX_CHANGEBIN_SIGNAL(USR2).

  • when use nginx -s reload, you should make sure that woker_processes in nginx.conf and f-stack.conf haven't be modified.

  • necessary modifies in nginx.conf:

    user  root; # root account is necessary.
    fstack_conf f-stack.conf;  # path of f-stack configuration file, default: $NGX_PREFIX/conf/f-stack.conf.
	worker_processes  1; # should be equal to the lcore count of `dpdk.lcore_mask` in f-stack.conf.

	events {
		worker_connections  102400; # increase
		use kqueue; # use kqueue
	}

	sendfile off; # sendfile off

Nginx compiling

./configure --prefix=/usr/local/nginx_fstack --with-ff_module
make
make install