无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 24141|回复: 61
打印 上一主题 下一主题

[分享] 优化pxe启动过程中tftp的传输速度

  [复制链接]
跳转到指定楼层
1#
发表于 2013-2-21 19:00:30 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
一般的pxe启动过程中,tftp的传输速度非常之蛋疼。 不堪其陋,一番捉摸后,找到了有效的改进方法。 虽然不能用完整个网卡的百兆带宽,但有个50,60,跟原来相比也是天壤之别了。

原文较长,发在这儿了。
http://blog.csdn.net/whoo/article/details/8571550

可惜在csdn无人关注,于是跑这儿来特地注册个账号,跟同好分享下。
推荐
发表于 2013-2-21 20:31:21 | 只看该作者
飘过
.飘过
..飘过
...飘过
....飘过
.....飘过
......飘过
.......飘过
........飘过
........飘过
........飘过
.......飘过
......飘过
.....飘过
....飘过
...飘过
..飘过
.飘过
.飘过
.飘过
..飘过
...飘过
....飘过
.....飘过
......飘过
.......飘过
........飘过
........飘过
........飘过
.......飘过
......飘过
.....飘过
....飘过
...飘过
..飘过
.飘过
.飘过
.飘过
..飘过
...飘过
....飘过
.....飘过
......飘过
.......飘过
........飘过
........飘过
........飘过
.......飘过
......飘过
.....飘过
....飘过
...飘过
...飘过
..飘过
.飘过
.飘过
.飘过
..飘过
...飘过
....飘过
.....飘过
......飘过
.......飘过
........飘过
........飘过
........飘过
.......飘过
......飘过
.....飘过
....飘过
...飘过
..飘过
.飘过
.飘过
.飘过
..飘过
...飘过
....飘过
.....飘过
......飘过
.......飘过
........飘过
........飘过
........飘过
.......飘过
......飘过
.....飘过
....飘过
...飘过
..飘过
.飘过
.飘过
.飘过
..飘过
...飘过
....飘过
.....飘过
......飘过
.......飘过
........飘过
........飘过
........飘过
.......飘过
......飘过
.....飘过
....飘过
...飘过内容
回复

使用道具 举报

推荐
 楼主| 发表于 2013-2-21 20:09:51 | 只看该作者
如楼上所愿:

        优化pxe网启动时tftp的传输速度 --- 针对pxelinux和bootmgr               
    作为一名IT人士,一般的计算机维护当然不好意思找别人。 于是自己用pxelinux搭了个网络启动环境,可以启动各种WinPE,以供折腾电脑系统,刷新固件的需要。

    只是一般的网络启动都是基于tftp协议的,传输文件那叫一个慢。启动时光是加载映像文件就得几分钟,简直就像活在史前一样。 找了一圈方法,没辙。 好在这东西也就救急时用用,凑活凑活也行。

   于是就这么凑错了几年。。。

   最近升级到win8了,为了维护环境,加了几个win7,win8的PE。 winxp的pe就在启动菜单上无比折腾(要到二进制文件里去改),win7也没好到哪儿去。但是新的bootmgr本身 提供了启动菜单,   为了简单起见,干脆放弃了在pxelinux里集成多个winpe的菜单了,直接单弄一个目录直接启动bootmgr。需要的时候切换下目录就行了,比强行改二进制文件,然后弄到pxelinux菜单上不知道轻松多少倍。

   好了,那就从bootmgr的菜单折腾起。过程比较无趣繁琐,一带而过:随便找个例子教程照着改;结果似乎有时好使有时不好使,原因不明;一怒之下把BCD的规范定义翻了个遍; 问题解决了,原因也搞明白了;顺带着还有个意外的收获。

   这个意外的收获就是发现在BCD的定义中,有两个涉及到TFTP的参数,分别是 windows size 和 block size。当时一看到这两个参数就眼前一亮,要知道TFTP的传输性能弱,关隘全在这俩参数上。
   赶紧把这俩参数仔仔细细的查清楚了,立刻加到bootmgr的bcd里面。
   启动一试, 效果非常显著!!
   默认的网络启动过程,网卡的使用率始终在10mbps以下徘徊,大部分情况下更低,一个3M大小的字体文件,都要拷贝好一会儿。加上参数后,网卡的利用率立刻飙升到40mbps上下,一般都不低于20Mbps。 网络加载速度一下子快乐好几倍,再也不用傻等了,非常之爽。

下面是我的 bcdedit /store bcd /enum all 的部分输出:

[plain] view plaincopyprint?

  • 安装程序 Ramdisk 选项
  • ---------------------
  • 标识符                  {ramdiskoptions}
  • ramdisksdidevice        boot
  • ramdisksdipath          \BOOT\BOOT.SDI
  • ramdisktftpblocksize    40960
  • ramdisktftpwindowsize   100

安装程序 Ramdisk 选项---------------------标识符                  {ramdiskoptions}ramdisksdidevice        bootramdisksdipath          \BOOT\BOOT.SDIramdisktftpblocksize    40960ramdisktftpwindowsize   100
其中可以看到 block size 设成了 40K。window size 设成了 100。
block size 设成 40k 是为了配合udp封包的优化,虽然理论上可以到63k左右(64k - 包头结构),稍微留点余量还是比较稳妥的。 实际使用时,block size其实可以更大更随意,比如到1M大小,只是这是程序层的逻辑,到了UDP层还是自动拆分了。 这个地方选40k纯属经验,并没有对比过其他的数值并优化。

windows size 这个值其实比较随意,但只在较小的数值范围时,才满足正比关系(越大效率越高);超过一定的数值后,再大也没多大的意义了,而且效率有可能更低,甚至伴随更多的稳定性问题。
我一开始设置的是10,效果就很好了;后来为了对比下,就调成了100,发现100的效率跟10的效率,几乎没有啥区别,即便有提升,估计也就 百分之几顶多十几的提升。 其实这个地方10就足够了,我这儿是因为没啥区别,所以测试后没有改回来。


原谅我懒于编排文章结构,就这样吧:  以上是bootmgr的部分
------------------------------------------------ 分割线 ------------------------------------------------
以下是pxelinux的部分



上文说到bootmgr里面有两个很隐秘的参数,解决了网络传输性能的大问题。 但是这仅仅针对bootmgr才起作用;对于 基于 pxelinux 启动的部分,还是老样子。
但是有了上文的成功案例的鼓励,就更加有了改造pxelinux的信心。

过程同样是无趣且冗长波折的,这里直接跳转到结果:
结果就是下载syslinux的源码,修改后重新编译---听起来有点麻烦,其实非常简单,尤其是Linux环境下,直接打make就行(其实还需要安装个uuid-dev的包,我没看README,结果找这个uuid.h找了半天,找到了才发现人README里写的很清楚)。

修改的地方有两处,都在 core/fs/pxe目录下:
对于 pxe.c, 找到 1408 这个字符串,改成 40960. 这是定义blocksize。
对于 pxe.h,找到  PKTBUF_SIZE 的定义,把 2048 改成 (1024*64)。 这里定义的是接受缓冲区的大小。

然后
make
sudo make netinstall
就行了。

其实光make就行了,只是他的makefile写的不怎样,编译出来的文件都分散在各个目录里了,找起来很麻烦。 make netinstall 会把这些编译出来的文件,都拷贝到 /tftpdroot里,找起来就方便多了。由于是在根目录下创建/tftpdroot目录,所以需要sudo,如有已有目录且有权限,是不必sudo的。


说下效果吧:
  一句话,非常棒!!
  pxelinux 的这个部分实现得非常精简,只支持一个 block size参数,不支持window机制。但即便如此,他的效率仍高过了具备window机制的bootmgr。网卡利用率最高可以到60Mbps上下,最低也有20Mbps左右。相对于原来,简直是飞一般的速度!


再多啰嗦句:
  syslinux这里的默认值真的是很诡异 ,1408??这是数字一眼就让人想起modem的MTU。 问题是这个东东大部分是局域网用的,跟MTU有个毛关系啊。
  pxelinux在他的说明里,一再强调 所设置的 TFTPD服务器一定要支持 tsize 选项,不兼容没有tsize选项的tftpd。言下之意是pxelinux是比较新的,支持比较高级功能的。
但是他所设定的1408的block size,仅仅比最初始的恐龙时代的设定------512,多了一倍多而已,根本就是聊胜于无。
  还是赶紧改了吧。






最后,对于实在不想自己编译的同学,我把我的编译结果放在这儿了。
http://download.csdn.net/detail/whoo/5054668 (40k包大小,兼容性问题较多,留此备注)
http://download.csdn.net/detail/whoo/5150778 (16k包大小,兼容性好些,性能几乎无差异。)


补充下就是:我的各种测试中,pxelinux.0 是没问题的的。  但是gpxelinux.0在vmware中就报错。 经过一段时间的尝试后,我已经放弃gpxe这个东东了,所以未做进一步的测试,不清楚这一问题到底是gpxe在vmware中的兼容问题,还是修改后的传输参数造成的。

[ 本帖最后由 2013whoo 于 2013-3-17 14:59 编辑 ]

点评

感谢您的分享,复读一遍。  详情 回复 发表于 2018-10-21 10:22
回复

使用道具 举报

推荐
发表于 2013-2-21 19:43:00 | 只看该作者
那何不直接传上来,省得再跳转一次 CSDN
回复

使用道具 举报

62#
发表于 2025-3-17 09:44:47 | 只看该作者
这么好的贴不能沉mark
回复

使用道具 举报

61#
发表于 2022-4-29 02:24:52 | 只看该作者
2013whoo 发表于 2013-2-21 20:09
如楼上所愿:

        优化pxe网启动时tftp的传输速度 --- 针对pxelinux和bootmgr               

修改的地方有两处,都在 core/fs/pxe目录下:
对于 pxe.c, 找到 1408 这个字符串
应该是:
对于 tftp.c, 找到 1408 这个字符串

回复

使用道具 举报

60#
发表于 2018-12-2 13:32:55 | 只看该作者
挖坟啊,不过这个帖现在还是有价值的,开安全启动,efi环境,照样高速pxe
回复

使用道具 举报

59#
发表于 2018-12-2 13:20:16 | 只看该作者
最新的pxelinux已经不能这么修改了,lz要不要再研究一下。
回复

使用道具 举报

58#
发表于 2018-10-22 11:09:12 | 只看该作者
哈哈 可惜在csdn无人关注,于是跑这儿来特地注册个账号 来对地方了!!
回复

使用道具 举报

57#
发表于 2018-10-21 17:28:25 | 只看该作者
buypro 发表于 2013-3-7 12:03
Starting Vista Winpe Image from Linux PXE ServerHere come my small guide on how to do it:
1. Create ...

学习一下,不是太懂。
回复

使用道具 举报

56#
发表于 2018-10-21 10:22:14 | 只看该作者
2013whoo 发表于 2013-2-21 20:09
如楼上所愿:

        优化pxe网启动时tftp的传输速度 --- 针对pxelinux和bootmgr               

感谢您的分享,复读一遍。
回复

使用道具 举报

55#
发表于 2014-4-22 16:18:18 | 只看该作者
pseudo 发表于 2013-2-22 00:35
有网友反馈tftp+http快于tftp
http://bbs.wuyou.net/forum.php?mod=viewthread&tid=270705&extra=page%3D1

老大,我有个16M的BIOS文件, 想通过网络刷。网吧尽百台机器用U盘刷太麻烦,能帮我做一个网络刷的工具吗?有工具我加一下bios文件就行了。
回复

使用道具 举报

54#
发表于 2013-6-8 17:51:03 | 只看该作者
在百光环境下,WIN XP,Hane dhcp server,测试的最大速度是 1456,不管是PXELINUX,还是GRUB4DOS,最高速度就是1456了. 比默认值1408高了一点点. 再高,pxelinux 会卡在那儿.
回复

使用道具 举报

53#
发表于 2013-6-8 17:03:36 | 只看该作者
经过多次测试,跨网段ramdisktftpblocksize的大小为2800~2900这个值比较稳定。
跨网段的问题就算解决!
回复

使用道具 举报

52#
发表于 2013-5-27 22:42:16 | 只看该作者
本帖最后由 pseudo 于 2013-5-27 22:44 编辑
taiji 发表于 2013-5-27 06:14
0pe为什么在有些比较新的笔记本网启启动不了,在加载完文件后,提示内存不够


你可能遇到变态的pxe-rom:
http://bbs.wuyou.net/forum.php?m ... =pxe%2B%C4%DA%B4%E6

出现提示时,回车一下还有一线希望继续启动。
回复

使用道具 举报

51#
发表于 2013-5-27 06:14:45 | 只看该作者
pseudo 发表于 2013-2-22 00:35
有网友反馈tftp+http快于tftp
http://bbs.wuyou.net/forum.php?mod=viewthread&tid=270705&extra=page%3D1

0pe为什么在有些比较新的笔记本网启启动不了,在加载完文件后,提示内存不够

点评

你可能遇到变态的pxe-rom: http://bbs.wuyou.com/forum.php?mod=viewthread&tid=209497&highlight=pxe%2B%C4%DA%B4%E6  详情 回复 发表于 2013-5-27 22:42
回复

使用道具 举报

50#
发表于 2013-5-26 23:02:15 | 只看该作者
10K内足够了,维护用不差那几秒,稳定兼容很重要。
回复

使用道具 举报

49#
发表于 2013-5-26 16:59:53 | 只看该作者
zhaohj 发表于 2013-5-20 15:06
vlan下有人测试过吗?

没有vlan环境测试。
不过我隐约记得pxelinux好像不支持vlan吧?跨网段好像只有gpxe支持?
回复

使用道具 举报

48#
发表于 2013-5-25 13:04:22 | 只看该作者
这个主题要 @hhh33 啊!
回复

使用道具 举报

47#
发表于 2013-5-25 09:29:43 | 只看该作者
启动时卡在menu.c32是怎么回事
回复

使用道具 举报

46#
发表于 2013-5-20 20:34:41 | 只看该作者
再搞个2K、4K、8K的,一般百兆网速2K为好,千兆网速8K可以了。
回复

使用道具 举报

45#
发表于 2013-5-20 16:47:07 | 只看该作者
http://download.csdn.net/detail/whoo/5054668 (40k包大小,兼容性问题较多,留此备注)

另一个的

syslinux5.zip (845.56 KB, 下载次数: 33)
回复

使用道具 举报

44#
发表于 2013-5-20 16:43:00 | 只看该作者
这是16k的,下载好麻烦

http://download.csdn.net/detail/whoo/5150778 (16k包大小,兼容性好些,性能几乎无差异。)

syslinux5w16384.zip (845.55 KB, 下载次数: 73)
回复

使用道具 举报

43#
发表于 2013-5-20 16:29:24 | 只看该作者
2013whoo 发表于 2013-2-21 20:09
如楼上所愿:

        优化pxe网启动时tftp的传输速度 --- 针对pxelinux和bootmgr               

看起来不错
回复

使用道具 举报

42#
发表于 2013-5-20 15:06:36 | 只看该作者
vlan下有人测试过吗?
回复

使用道具 举报

41#
发表于 2013-5-19 14:51:55 | 只看该作者
把文件传下吧...CSDN不好下载
1449597375@qq.com
回复

使用道具 举报

40#
发表于 2013-5-18 16:06:56 | 只看该作者
我在vlan下竟然卡住,一直没解决这个问题。
回复

使用道具 举报

39#
发表于 2013-5-4 17:07:27 | 只看该作者
2013whoo 发表于 2013-3-17 14:44
我用hanewin tftp 和 hanewin dhcp都测试了下,没出现问题(都是官网下的最新版)。

而且发现hane ...

看到这个后,我改了下hanewin dhcp的设置. 用G4D引导的时候,果然速度变快了.
回复

使用道具 举报

38#
发表于 2013-5-4 09:57:40 | 只看该作者
本帖最后由 notepad 于 2013-7-27 23:51 编辑

原来楼主在这里发帖了,感谢楼主带来这么好的东西!

我在CSDN下载了您的资源,用这还真不错。
一开始我用法上有错误(kernel /BOOT/03WinPE.0),速度在2.3M左右。
后来改成kernel /PXELinux.CFG/MEMDISK raw iso initrd=/WinPE/WinPE03.ISO,问题迎刃而解,速度达到8.3M。
回复

使用道具 举报

37#
发表于 2013-3-19 12:04:52 | 只看该作者
hfs记录的性能 Fully downloaded - 269.19 M @ 60846 KB/s - /epub/Acronis-Media-11.5-64bit.iso

ipxe@trunk. native driver
pxelinux 4.06
千兆桌面小交换
用的memdisk initrd=http://


tftp ? 弱爆了 >.<
回复

使用道具 举报

36#
发表于 2013-3-17 20:04:12 | 只看该作者
这个支持啊,网启PE的传输速度一直不太理想,明天试试
回复

使用道具 举报

35#
发表于 2013-3-17 17:34:13 | 只看该作者
这两台机器都是虚机,当时是克隆的,配置都一样。出现这个问题,只能怀疑是网络方面的问题了。
在正常的机器上面加入了测试的那个网段,发现还是下载不正常,到一半没有相应。
看来就是网络的问题,等有空找网管看看。
回复

使用道具 举报

34#
发表于 2013-3-17 16:14:32 | 只看该作者
今天在另一台server上面试了一下,发现没有问题,可以正常运,hanewin 的速度比tftpd32快的多得多。
如果用tftpd32的话,那台不正常的机器没有问题,就是速度较慢,文件修改后看不出来效果。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2025-5-5 18:34

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表