zoukankan      html  css  js  c++  java
  • Projects: Linux scalability: Accept() scalability on Linux 惊群效应

    小结:

    1、不必要的唤醒

    惊群效应

    https://github.com/benoitc/gunicorn/issues/792#issuecomment-46718939

    https://www.citi.umich.edu/u/cel/linux-scalability/reports/accept.html

    http://stackoverflow.com/questions/12494914/how-does-the-operating-system-load-balance-between-multiple-processes-accepting/12502808#12502808
    https://www.citi.umich.edu/u/cel/linux-scalability/reports/accept.html

    Introduction

    Network servers that use TCP/IP to communicate with their clients are rapidly increasing their offered loads. A service may elect to create multiple threads or processes to wait for increasing numbers of concurrent incoming connections. By pre-creating these multiple threads, a network server can handle connections and requests at a faster rate than with a single thread.

    In Linux, when multiple threads call accept() on the same TCP socket, they get put on the same wait queue, waiting for an incoming connection to wake them up. In the Linux 2.2.9 kernel (and earlier), when an incoming TCP connection is accepted, the wake_up_interruptible() function is invoked to awaken waiting threads. This function walks the socket's wait queue and awakens everybody. All but one of the threads, however, will put themselves back on the wait queue to wait for the next connection. This unnecessary awakening is commonly referred to as a "thundering herd" problem and creates scalability problems for network server applications.

    This report explores the effects of the "thundering herd" problem associated with theaccept() system call as implemented in the Linux kernel. In the rest of this paper, we discuss the nature of the problem and how it affects the scalability of network server applications running on Linux. Finally, we will benchmark the solutions and give the results and description of the benchmark. All benchmarks and patches are against the Linux 2.2.9 kernel.

    Conclusion

    By thoroughly studying this "thundering herd" problem, we have shown that it is indeed a bottleneck in high-load server performance, and that either patch significantly improves the performance of a high-load server. Even though both patches performed well in the testing, the "wake one" patch is cleaner and easier to incorporate into new or existing code. It also has the advantage of not committing a task to "exclusive" status before it is awakened, so extra code doesn't have to be incorporated for special cases to completely empty the wait-queue. The "wake one" patch can also solve any "thundering herd" problems locally, while the "task exclusive" method may require changes in multiple places where the programmer is responsible for making sure that all adjustments are made. This makes the "wake one" solution easily extensible to all parts of the kernel.

  • 相关阅读:
    [轉]mysql命令大全
    [轉]常用MYSQL管理工具收集windows
    [轉]Oracle 数据类型及存储方式
    [轉]mysql函数集
    [轉]Mysqldump备份还原和mysqldump导入导出语句大全详解
    JavaScript定义类的几种方式
    [轉]NoSQL数据库探讨之一 - 为什么要用非关系数据库?
    FLV文件介绍
    XAMPP维基百科,自由的百科全书
    [轉]dom table
  • 原文地址:https://www.cnblogs.com/rsapaper/p/10836032.html
Copyright © 2011-2022 走看看