2018年5月12日

TED: メモ

2018年5月8日

ツイートメモ

2018年5月2日

nginx メモ

メモ: worker process は,基本的にコア数分だけ生成されるらしい.この worker process が non-blocking で複数の接続を回し続けていると思われる.


worker process はこのあたりから?
for (n = 1; n < ccf->worker_processes; n++) {


nginx/src/os/unix/ngx_process_cycle.c
74: void ngx_master_process_cycle(ngx_cycle_t *cycle) {
  -> worker process を起動している.
141:
      if (delay) {
            if (ngx_sigalrm) {
                sigio = 0;
                delay *= 2;
                ngx_sigalrm = 0;
            }
            itv.it_interval.tv_sec = 0;
            itv.it_interval.tv_usec = 0;
            itv.it_value.tv_sec = delay / 1000;
            itv.it_value.tv_usec = (delay % 1000 ) * 1000;
            if (setitimer(ITIMER_REAL, &itv, NULL) == -1) {

  -> 実行間隔の調整
728: static void ngx_worker_process_cycle(ngx_cycle_t *cycle, void *data) {
  -> worker process cycle というくらいだから,かなりメインのサイクルだんだろう.たぶん.
750: ngx_process_events_and_timers(cycle);
  -> 他の箇所は,終了処理や,再読み込み処理?.実際の処理とウェイトを行っているのは,名前の通りこの関数だと推測される.

nginx/src/event/ngx_event.c
194: void ngx_process_events_and_timers(ngx_cycle_t *cycle) {
  -> 上記の実体.


ngx_inet.c
1131: if (getaddrinfo((char *) host, NULL, &hints, &res) != 0) {
1239: freeaddrinfo(res);


nginx/src/os/unix/ngx_udp_recv.c
23: n = recv(c->fd, buf, size, 0);

nginx/src/core/ngx_connection.c
542: if (bind(s, ls[i].sockaddr, ls[i].socklen) == -1) {
595: if (listen(s, ls[i].backlog) == -1) {
798: if (listen(ls[i].fd, ls[i].backlog) == -1) {


nginx/src/event/modules/ngx_select_module.c
370: if (getsockopt(s, SOL_SOCKET, SO_TYPE, &n, &len) == -1) {
388: if (getsockopt(s, SOL_SOCKET, SO_TYPE, &n, &len) == -1) {


nginx/src/os/unix/ngx_process_cycle.c
210: if (ngx_close_socket(ls[n].fd) == -1) {
  -> nginx/src/os/unix/ngx_socket.h
  19: #define ngx_socket socket
  33: #define ngx_nonblocking(s) fcntl(s, F_SETFL, fcntl(s, F_GETFL) | O_NONBLOCK)
  36: #define ngx_blocking(s) fcntl(s, F_SETFL, fcntl(s, F_GETFL) & ~O_NONBLOCK)
  60: #define ngx_close_socket close


nginx/src/event/ngx_event_timer.c
54: void ngx_event_expire_timers(void) {
  -> 無限ループしているところ (for(;;) {}) 回りでよく見かける.wait time を調節していると思われる.