使用gprof工具,可以测出dhcp的性能瓶颈在mdb.c中的lease_enqueue函数。该函数的功能就是维护地址池内部的不同状态下的地址链表,这些链表都必须根据时间排序的。目的是每次遍历都从最老的lease开始。

排序代码:

/* Insertion sort the lease onto the appropriate queue. */
for (; lp ; lp = lp->next) {if (lp -> sort_time >= comp -> sort_time)break;prev = lp;
}

假设,我们配置了一个有几十万个IP的地址池,并且这些地址都是可分配的地址。那么它们都会被放到pool->free的链表中,每次维护链表进行排序的时候就会耗费很长时间。

很可惜,很多人发现这个问题,并且也反应给isc-dhcp官方,但是貌似没有得到什么好的解决办法。我也折腾了一段时间,偶然想到这些状态的地址链表都是被地址池包含的,如果控制每个地址池内部的地址个数,是不是会有情况?

传统的dhcpd.conf文件:

subnet 192.0.0.0 mask 192.255.255.255 {option routers 192.0.0.1;default-lease-time 600;max-lease-time 7200;pool {range 192.0.0.1 192.4.255.255}
}

如果这样配置,分配地址的并发性能只能十几个每秒。

我把这个大地址池拆分成小地址池,每个小地址池内部包含1024个地址,配置文件改为:

subnet 192.0.0.0 mask 192.255.255.255 {option routers 192.0.0.1;default-lease-time 600;max-lease-time 7200;pool {range 192.0.0.1 192.0.3.255}pool {range 192.0.4.0 192.0.7.255}pool {range 192.0.8.0 192.0.11.255}……
}

果然,并发性能提高了很多,能达到每秒500个左右。

另外,把lease文件放到共享内存中也能提高不少性能,毕竟对内存的读写比硬盘快多了。

(同时也依赖服务器的硬件配置,不过这个影响不是致命的。呵呵……)

转载于:https://blog.51cto.com/cizyzhang/1366766

isc-dhcp性能优化的一种方法相关推荐

  1. golang string 加号连接性能慢_面试必备:浅析C#性能优化的若干种方法

    浅析C#性能优化的若干种方法 1.1 垃圾回收 垃圾回收解放了手工管理对象的工作,提高了程序的健壮性,但副作用就是程序代码可能对于对象创建变得随意. 1.1.1 避免不必要的对象创建 由于垃圾回收的代 ...

  2. MySQL性能优化的9种方法

    MySQL性能优化的9种方法 1.选择最合适的字段属性 Mysql是一种关系型数据库,可以很好地支持大数据量的存储,但是一般来说,数据库中的表越小,在它上面执行的查询也就越快.因此,在创建表的时候,为 ...

  3. Java中性能优化的35种方法汇总

    原文地址:http://www.jb51.net/article/102831.htm 前言 对程序员们来说,代码优化是一个很重要的课题.可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于 ...

  4. 前端性能优化的七种方法

    前端性能优化主要有七种方法,包括减少请求数量.减少资源大小.优化网络连接.优化资源加载.减少重绘回流.使用性能更好的API和webpack优化 1.减少请求数量 1.1 图片处理 1.1.1 雪碧图 ...

  5. PHP程序性能优化的50种方法

    用单引号代替双引号来包含字符串,这样做会更快一些.因为 PHP 会在双引号包围的 字符串中搜寻变量,单引号则不会,注意:只有 echo 能这么做,它是一种可以把多个字符 串当作参数的"函数& ...

  6. MySQL 性能优化:8 种常见 SQL 错误用法!

    声明:转载自 MySQL 性能优化:8 种常见 SQL 错误用法! 1.LIMIT 语句 分页查询是最常用的场景之一,但也通常也是最容易出问题的地方.比如对于下面简单的语句,一般 DBA 想到的办法是 ...

  7. php性能优化的几个方法

    核心提示:本文主要讲述php性能优化的几个方法相关内容:PHP是一种在服务器端执行的脚本语言,它开发了世界上许多知名的网站,包括雅虎和Facebook等.下面介绍的几条PHP代码.性能优化的技巧供读者 ...

  8. 【FPGA——时序篇】时序优化的几种方法

    参考博文:https://www.cnblogs.com/sepeng/p/5578402.html 参考书目:英文版:<advanced FPGA design>    中文版:< ...

  9. DB2设计与性能优化:原理、方法与实践

    DB2设计与性能优化:原理.方法与实践 王飞鹏  陈辉  张广舟  成孜论  编著 ISBN 978-7-121-13094-6 2011年4月出版 定价:89.80元(含光盘1张) 16开 416 ...

最新文章

  1. 2018-8-22-粒子滤波
  2. mysql基础认识1
  3. python爬虫接单经历_一个Python小白5个小时爬虫经历
  4. mxnet DepthwiseConv2D
  5. php blocklog_SQLSERVER中的logblock校验(译)
  6. DayDayUp:《P2P行业最高端的玩法》源于网友网络收集
  7. mysql 删除重复数据_MySQL查找和删除重复数据
  8. C# VS本地Sqlserver 操作笔记
  9. 信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言—— 1050:骑车与走路
  10. c++ 模板教程(c语言中文网) 自己运行实例
  11. wps多人协作后怎么保存_蜂蜜开封后能放多久?蜂蜜开封后怎么保存?蜂蜜存放要注意事项...
  12. vxworks 调式
  13. java query包,有没有Java的http_build_query函数的Java等价物?
  14. 第二个情人节表白网页源码
  15. 记录——《C Primer Plus (第五版)》第七章编程练习第八题
  16. Laravel框架——增删改查
  17. idea 配置maven插件
  18. C++ UE4 将凹多边形拆分为多个凸多边形
  19. 修复Windows 7升级Windows 10后Japanese输入法无法使用的Bug
  20. codeforces gym 100827A Runes

热门文章

  1. 动与静--软件的雕塑艺术
  2. 大数据_Flink_数据处理_运行时架构3_yarn上作业提交流程---Flink工作笔记0018
  3. 大数据之-Hadoop3.x_Yarn_生产环境核心参数配置案例---大数据之hadoop3.x工作笔记0150
  4. 大数据之_亿级分布式日志管理ELK_工作笔记001_ELK认识介绍
  5. 杭电2122Ice_cream’s world III
  6. 杭电1286找新朋友
  7. C#动态生成Word文档并填充数据(一)
  8. 群晖安装pdo_mysql_使用docker方式部署禅道
  9. 用汇编的眼光看C++(之class构造、析构)
  10. 搭建centos在线yum源镜像服务器,搭建CentOS在线yum源镜像服务器(上)