日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

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

發布時間:2023/12/13 综合教程 39 生活家
生活随笔 收集整理的這篇文章主要介紹了 优化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 的部分輸出:

安裝程序 Ramdisk 選項
---------------------
標識符 {ramdiskoptions}
ramdisksdidevice boot
ramdisksdipath BOOTBOOT.SDI
ramdisktftpblocksize 40960
ramdisktftpwindowsize 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(注:這個包的blksize設為40k,對于有些機器來說過大了,存在兼容性問題。在將blksize調整為16k之后,經測試速度幾乎沒有降低,而兼容性好了很多------手頭可測試的設備都通過了,但有網友反饋仍有問題。 新的下載地址是這個 http://download.csdn.net/detail/whoo/5150778)

補充下就是:我的各種測試中,pxelinux.0 是沒問題的的。 但是gpxelinux.0在vmware中就報錯。 經過一段時間的嘗試后,我已經放棄gpxe這個東東了,所以未做進一步的測試,不清楚這一問題到底是gpxe在vmware中的兼容問題,還是修改后的傳輸參數造成的。
---------------------
作者:whoo
來源:CSDN
原文:https://blog.csdn.net/whoo/article/details/8571550
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!

總結

以上是生活随笔為你收集整理的优化pxe网启动时tftp的传输速度 --- 针对pxelinux和bootmgr的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。