做爲一名IT人士,通常的計算機維護固然很差意思找別人。 因而本身用pxelinux搭了個網絡啓動環境,能夠啓動各類WinPE,以供折騰電腦系統,刷新固件的須要。linux
只是通常的網絡啓動都是基於tftp協議的,傳輸文件那叫一個慢。啓動時光是加載映像文件就得幾分鐘,簡直就像活在史前同樣。 找了一圈方法,沒轍。 好在這東西也就救急時用用,湊活湊活也行。windows
因而就這麼湊錯了幾年。。。服務器
最近升級到win8了,爲了維護環境,加了幾個win7,win8的PE。 winxp的pe就在啓動菜單上無比折騰(要到二進制文件裏去改),win7也沒好到哪兒去。可是新的bootmgr自己 提供了啓動菜單, 爲了簡單起見,乾脆放棄了在pxelinux裏集成多個winpe的菜單了,直接單弄一個目錄直接啓動bootmgr。須要的時候切換下目錄就好了,比強行改二進制文件,而後弄到pxelinux菜單上不知道輕鬆多少倍。網絡
好了,那就從bootmgr的菜單折騰起。過程比較無趣繁瑣,一帶而過:隨便找個例子教程照着改;結果彷佛有時好使有時很差使,緣由不明;一怒之下把BCD的規範定義翻了個遍; 問題解決了,緣由也搞明白了;順帶着還有個意外的收穫。ide
這個意外的收穫就是發如今BCD的定義中,有兩個涉及到TFTP的參數,分別是 windows size 和 block size。當時一看到這兩個參數就眼前一亮,要知道TFTP的傳輸性能弱,關隘全在這倆參數上。性能
趕忙把這倆參數仔仔細細的查清楚了,馬上加到bootmgr的bcd裏面。測試
啓動一試, 效果很是顯著!!字體
默認的網絡啓動過程,網卡的使用率始終在10mbps如下徘徊,大部分狀況下更低,一個3M大小的字體文件,都要拷貝好一下子。加上參數後,網卡的利用率馬上飆升到40mbps上下,通常都不低於20Mbps。 網絡加載速度一會兒快樂好幾倍,不再用傻等了,很是之爽。優化
下面是個人 bcdedit /store bcd /enum all 的部分輸出:ui
安裝程序 Ramdisk 選項
---------------------
標識符 {ramdiskoptions}
ramdisksdidevice boot
ramdisksdipath \BOOT\BOOT.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 版權聲明:本文爲博主原創文章,轉載請附上博文連接!