劉 松,盧澤新,張曉哲,馬世聰
國防科學技術大學 計算機學院,長沙 410073
面向用戶態Click的I/O優化框架的設計與實現*
劉 松+,盧澤新,張曉哲,馬世聰
國防科學技術大學 計算機學院,長沙 410073
LIU Song,LU Zexin,ZHANG Xiaozhe,et al.Design and implementation of optimization I/O framework for Click modular router in user level.Journal of Frontiers of Computer Science and Technology,2016,10(12):1693-1700.
軟件路由器在現代網絡的發展中發揮著越來越重要的作用,而Click是具有良好模塊化設計的軟件路由器,為開發和驗證新的路由協議等應用提供了很好的軟件平臺。由于實現機制問題,用戶態Click的I/O性能嚴重限制報文處理能力,影響以Click軟件路由器為平臺的系統的整體性能。針對現有Click用戶態I/O機制的不足,提出了一種面向用戶態Click的I/O優化框架,通過采用輪詢技術、零拷貝技術和報文預取技術提升了I/O性能。實驗結果表明:優化后的用戶態Click的I/O性能提升了121倍。
軟件路由器;Click;I/O;輪詢;零拷貝;報文預取
隨著新的網絡協議以及新的網絡業務的誕生,需要對現有的路由器進行升級或更換。作為網絡服務提供商而言,更換路由器無疑代表成本的增加,因此希望通過升級原有的設備來滿足日益增長的需求。這就要求路由器能提供靈活定制、可編程的能力。傳統的硬件路由器的功能是由設備廠商定制,不允許第三方進行任何修改;而軟件路由器可以提供快速開發出新的功能和需求的包處理,降低了開發周期和運營成本。
在典型的軟件路由器中,Click[1]Click modular router)以其良好的可擴展性得到了廣泛的應用,為新協議的開發和驗證以及軟件路由器的快速搭建提供了一個優秀的軟件平臺。Click是一個模塊化的軟件路由器,采用了面向對象的設計方式,把IP分組轉發過程抽象為一系列組件。Click提供了一種靈活的可擴展的數據平面軟件開發架構,只需要添加組件即可對軟件路由器的功能進行擴展,即通過將路由器功能劃分為不同的功能組件,然后通過實現新的組件或組合已有的組件就可以快速地實現新的網絡功能,為軟件路由器的開發提供了非常好的可擴展的數據平面的軟件開發架構。Click的高度可擴展性等優良特性也使得它受到越來越廣泛關注,并實現了許多優秀的應用原型,比如未來互聯網架構[2]、冗余流量消除系統[3]、可擴展的中間盒平臺[4]和集群式高性能軟件路由器[5]等。
盡管Click的靈活設計能滿足不同網絡業務的設計需求,但是它的較低轉發性能無法滿足大多數業務的性能指標。相關研究工作指出,用戶態的Click的I/O(Input/Output)框架是限制其性能的關鍵因素。如何結合Click的I/O框架與現有的硬件平臺來進一步提升它的報文處理能力是當前研究的熱點和難點。通過分析Click的實現機制,制約I/O性能的因素主要有3個:(1)采用系統中斷方式接收/發送報文;(2)報文在內核態與用戶態間的多次拷貝開銷;(3)緩存競爭和緩存缺失。
本文提出了一種面向用戶態Click的I/O優化框架,用于解決Click轉發性能較低的問題。本文I/O優化框架采用了輪詢技術、零拷貝技術和預取技術3類技術:輪詢技術避免了原生態Click以中斷方式接收/發送報文,極大地提升了它的報文處理能力;零拷貝技術和預取技術優化了報文處理路徑的I/O開銷,降低了報文的拷貝次數以及訪存的次數。通過實驗結果證明:優化I/O框架后的Click的轉發性能為11 400 Kp/s,為原生用戶態Click的121倍。
目前,針對Click的I/O框架限制其報文處理能力的問題已普遍引起研究人員的重視,并提出了一系列的解決方案。比如,文獻[6]利用批處理方式優化I/O框架,需要對報文處理業務進行重設計,并且報文的處理路徑不同也影響到批處理方式帶來的性能提升。RouteBriceks[5]主要采用輪詢方式代替傳統硬件的中斷方式,以及采用批處理方式提升數據處理的并行性,但其主要解決內核態Click的I/O框架問題。PacketShader[7]通過修改內核使Linux系統更好地支持批處理方式,采用GPU(graphic processing unit)加速報文的處理能力,因此它在移植性方面存在不足。此外,一些方案[8-11]采用硬件加速的方式來解決Click的I/O問題。
近年來針對用戶態的高性能報文I/O的優化框架也存在較多研究,比如Packet_mmap[12]、Netmap[13]、PF_RING[14]、DPDK(date plane development kit)[15]等,文獻[16-17]對于多種框架進行了性能的測試和分析,其中PF_RING與DPDK的用戶態I/O性能表現較好,但PF_RING中報文存儲在內核態中,與本文的設計理念有所不同,因此最終采用DPDK實現并驗證本文的設計思想。
雖然已有Click的I/O優化方案能有效地提升報文處理能力,但采用批處理方式和內核態的Click優化方式降低了系統的可移植性。本文主要研究如何在X86服務器上優化用戶態Click的I/O框架。
現有工作表明,造成Click用戶態I/O性能降低的原因主要包括三方面:
(1)采用系統中斷方式收發報文。在標準的Linux內核協議棧中,協議棧使用中斷的方式發送或者接收報文,原生用戶態Click使用libpcap從協議棧中獲取報文,當報文到達速率較高時,系統中斷的處理頻率會遠低于報文到達速率,引發丟包,影響包處理性能。
(2)內核態與用戶態之間的內存拷貝開銷。由于內核和用戶內存空間的隔離,原生態的Click至少需要兩次報文拷貝才能完成一次的報文處理流程,由此而產生的開銷會大幅降低用戶態Click的性能。
(3)緩存競爭和緩存缺失已經成為影響通用服務器上運行軟件路由器性能的重要因素[18-19]。原生態的用戶態Click并不支持緩存的預取操作,給其I/O性能的提升造成了一定的瓶頸。
針對上述問題,本文給出了用戶態Click的I/O優化框架,如圖1所示,主要從以下三方面改進用戶態Click的I/O性能:

Fig.1 Comparison of userlevel Click I/O two framework and optimzed framwork圖1 用戶態Click I/O框架與優化框架對比
(1)使用輪詢模式的驅動取代中斷模式的網卡驅動,網卡可以在不通知進程的情況下直接通過DMA(direct memory access)將報文送到內存中,Click則使用輪詢CPU隊列的方式輪詢收發隊列中的報文,從而避免了頻繁的系統中斷。
(2)使用零拷貝技術,通過創建內核態與用戶態之間的共享報文緩沖區,將報文直接送入共享緩沖區,避免了報文收發過程中的多次內存拷貝,實現了報文零拷貝的收發。
(3)通過報文預取技術,將需要發送的報文提前讀取到Cache中,減少了內存訪問造成的I/O損失。
3.1 設備輪詢技術

Fig.2 Comparison of interruption and poll mode圖2 中斷方式和輪詢方式的對比
用戶態的Click采用了系統中斷的方式收發報文,嚴重影響了系統整體的轉發性能。如圖2(a)所示,用戶態的Click收取報文的工作流程為:首先,網絡協議棧從網卡中以中斷的方式獲取報文;然后,Click組件再從網絡協議棧中使用Pcap等方式獲取原始報文。在高速報文處理過程中,頻繁地收發報文特別是小報文引起的大量中斷會嚴重影響I/O的速度,從而給整個系統帶來性能瓶頸。調研發現,輪詢驅動收取報文可以解決大量中斷造成的轉發性能低下的缺陷。工作在內核態的Click通過修改系統內核驅動可以支持輪詢模式收發報文,但內核態工作的輪詢驅動收發報文需要頻繁的上下文切換且修改內核驅動,會給系統的部屬帶來不必要的時間成本開銷。因此,將輪詢驅動技術引入到用戶層,既消除了頻繁中斷帶來的不必要開銷,也減少了內核態和用戶態上下文切換造成的性能損失。
根據Click軟件路由器本身的特點,設備輪詢分為兩層輪詢結構:第一層,在底層采用Intel DPDK做驅動支持,輪詢各個網卡的多隊列將報文直接獲取到用戶態形成DPDK隊列。第二層,采用輪詢CPU隊列的方式,從DPDK隊列中輪詢收發報文。如圖2(b)所示,在用戶態使用DPDK庫,借助UIO驅動將網卡驅動放到用戶態工作,通過DPDK按照一定的時間周期按次序輪詢訪問每個網卡接口的隊列,將報文放入DPDK隊列中;在Click組件中采用輪詢CPU隊列技術訪問每個DPDK接收隊列,將報文獲取到用戶態內存中;經過Click組件的要求處理后,再通過相反的過程將報文送到網卡隊列中完成發送過程,從而消除了高速收發報文中因為中斷所引起的性能瓶頸。本節所提出的設備輪詢技術是基于CPU隊列的輪詢,查詢的對象是DPDK的收發隊列。DPDK庫在本設計中充當了底層的驅動庫,完成從網卡到用戶態報文的收發工作。
3.2 零拷貝技術
由于內核和用戶內存空間的隔離,原生態的Click至少需要兩次報文拷貝才能完成一次的報文處理流程,由此而產生的開銷會大幅降低用戶態Click的性能。如圖1(a)所示,在原生態的Click接收報文的過程中,報文從網卡到內存的傳輸需要經歷兩次拷貝工作,即報文從網卡隊列到網絡協議棧的拷貝和從網絡協議棧再到內存的拷貝。報文傳輸過程中的兩次報文拷貝工作從網卡收發報文操作是不可避免的,但可以通過減少從網卡隊列中已經收取報文的情況下操作系統內部進行多余的內存拷貝工作,即從網卡直接獲取報文內容到用戶態內存,交給Click組件進行零拷貝的報文處理,減少Click用戶態原生方案中二次拷貝所帶來的I/O損失。由此,采用了如圖1(b)所示的設計方案,通過DMA技術直接從網卡中獲取報文到用戶態的內存,然后在Click組件中使用零拷貝技術進行報文的操作處理。在實現過程中,借助于Intel DPDK進行實現,在此開發套件中使用的報文存儲結構與Click中原生的報文結構有一定的差異,因此對必要的報文頭部信息進行提取,轉化為Click組件需要處理的報文結構,在保持必要信息量的情況下,避免了大量報文數據的拷貝,進而提高收發報文的I/O性能。
3.3 報文預取技術
緩存競爭和緩存缺失已經成為影響通用服務器上運行軟件路由器性能的主要因素,原生態的Click用戶態并沒有相應的解決方案。如果能夠在處理報文之前將其預取到Cache中,那么可以大大減少緩存競爭和緩存缺失所帶來的I/O性能的損失。為此,本文使用報文預取技術解決緩存競爭和緩存缺失的問題。在報文加入接收隊列時,做報文預取操作,提前將報文讀取到Cache中,在后續的報文處理過程中可以直接從緩存中獲取到報文的內容,從而大幅度提高Cache的命中率,進而提高Click收發報文的I/O性能。為了提高報文預取的效率,對于報文的存儲方式也做了相應的改進,使用大頁內存技術進行內存的存儲管理:首先大頁內存不受虛擬內存的管理影響,不會被替換出內存,而普通的4 KB內存頁,如果內存不足可能會被虛擬內存管理模塊替換;其次,對于同樣的內存大小,大頁內存產生的表項數目遠遠小于普通內存頁。較少的表項一方面可以大大減少表項開銷,并且可以明顯減少沖突率,極大減少表項缺失導致的開銷,而表項缺失會嚴重影響訪存性能。對于共享內存的管理一般會使用鎖來實現,但是使用鎖不可避免地因為順序化的數據訪問和報文頭開銷增加而降低系統的性能。因此本設計采用無鎖環進行內存的管理。
本文所提出的用戶態Click軟件優化框架如圖3所示。該框架不依賴于諸如SR-IOV(single-root I/O virtualization)的硬件優化方案,完全采用軟件方式實現,既避免了原有的系統開銷,提高了系統性能,又可以充分利用用戶態Click的穩定性高、易于擴展的優勢,在可編程性和高性能方面取得了良好的平衡。

Fig.3 Click I/O optimized framework in user level圖3 用戶態Click I/O優化實現框架
輪詢方式收發報文技術的實現:在用戶態使用Intel DPDK數據層面開發套件中的輪詢驅動,從網卡中直接獲取報文到用戶層并形成報文的接收隊列,通過創建新的Click組件,在Click中使用輪詢CPU隊列的方式訪問DPDK中的報文接收隊列收取報文,并將報文存儲在用戶態的使用無鎖環管理的大頁內存中。待Click處理完報文之后,Click組件再以輪詢CPU隊列的方式將報文按照必要的信息提交給指定的發送隊列,輪詢模式的驅動庫則會通過定時輪詢發送隊列的方式將報文發送到指定的網卡并釋放內存空間,完成整個報文的收發操作。
零拷貝技術的實現:報文從網卡收取到用戶層之后,提取一定量的必要信息,比如數據長度、報文頭指針等,通過緩沖區管理庫的操作,生成Click內部處理報文格式,以文件描述符的形式交給Click組件進行后續處理。完成指定的報文操作后,再通過緩沖區管理庫,根據報文的文件描述符及必要的附加信息將Click報文還原成DPDK中的內部報文結構,并提交給發送隊列進行發送。整個報文的操作過程只進行了文件描述符的傳遞,實際報文數據沒有進行多余的拷貝工作。
報文預取技術的實現:Click組件進行報文處理主要通過任務隊列對報文進行操作,在處理一個報文的時候提前將下一個需要處理的報文的文件描述符以及對應的數據從內存中預取到Cache中,且在內存管理中采用大頁內存和無鎖環,可以有效提高訪存能力,提高從內存到Cache中的讀取速度。
5.1 實驗環境
本文的測試平臺采用了IBM的通用服務器進行測試,服務器配置:CPU為Intel?Xeon?CPU E5-2680V2@2.80 GHz;內存為1 333 MHz,64 GB DDR3;網卡信息為Intel82599 10GbE網卡。服務器安裝并運行的操作系統為Centos6.3,系統內核版本為Linuxkernel 2.6.32-358.el6.x86_64,采用的基礎代碼版本為Click 2.0.1和dpdk 1.6。測試儀器中采用了IXIAXM2網絡數據通信分析儀進行測試。
5.2 實驗結果和分析
實驗中,主要對單核、單線程、單接口的吞吐率、包轉發速率等報文轉發處理的I/O性能指標進行了測試。分別使用從64 Byte到1 514 Byte等不同長度的報文,通過網絡數據通信分析儀測試系統對本文所設計并實現的用戶態Click軟件路由器的I/O優化框架進行了驗證。數據分析如下:
(1)轉發能力結果與分析
經過實驗測試發現,如圖4(a)所示,其中Native Click表示原生用戶態的Click,Click PollMode表示使用輪詢技術優化后的用戶態Click,Click Optimization表示使用輪詢、零拷貝和緩存預取3種技術優化后的用戶態Click,即本文所提出的優化框架。結合表1中給出的不同報文下的包轉發速率可以看出,在用戶態運行Click的轉發能力非常低,對64 Byte轉發報文速度為94 Kp/s,在用戶態采用輪詢技術直接從網卡中收報文性能達到5 880 Kp/s,性能提升大約62倍;使用本文提出的面向用戶態Click的I/O優化框架,同時采用報文零拷貝、輪詢、緩存預取等技術的情況下,對64 Byte報文的轉發性能為11 400 Kp/s,性能提升大約121倍。通過簡單計算可知,使用報文零拷貝和緩存預取技術可以將包轉發能力提高將近60倍。此外,在實驗測試過程中,對于超過128 Byte長度大小的報文轉發速度與設備發包速度相當,即可以實現完全轉發。
(2)吞吐率結果與分析
與包轉發速率相對應,圖4(b)和表2展示了不同技術下的吞吐率,從吞吐率的表現可以得知,原生態用戶態Click的吞吐率表現最差,其最大吞吐率只有981 Mb/s,相同報文長度下,使用3種優化技術最大吞吐率達到9 860 Mb/s。測試結果顯示,從128 Byte長度大小的報文開始,同時使用輪詢、零拷貝、報文預取等技術優化的Click用戶態的吞吐率與測試儀報文發送的吞吐率相等。此外,對于優化后的Click I/O在多核、多線程時的表現也進行了簡單測試,由于經過優化的Click的I/O能力單核、單線程已經超過了5 Gb/s吞吐率,使用多核、多進程吞吐率一直保持單接口滿負荷狀態(≈10 Gb/s)。

Fig.4 Throughput and forwarding rate in different mechanisms圖4 不同技術下的吞吐率和轉發性能表現

Table 1 Forwarding rate in different mechanisms表1 不同技術下的轉發速率

Table 2 Throughput in different mechanisms表2 不同技術下的吞吐率
本文通過使用設備輪詢、零拷貝、報文預取等關鍵技術對工作在用戶態的Click軟件路由器的收發報文的I/O框架進行了優化,改進設計了一種新的面向用戶態Click的I/O優化框架,并利用Intel DPDK進行了實現和驗證。實驗證明,通過DMA將網卡中報文直接讀取到用戶態,然后使用CPU隊列的輪詢技術進行收發,能夠將轉發性能提高超過一個數量級。通過組合使用設備輪詢、零拷貝技術和緩存預取技術,可以將用戶態Click的收發報文的I/O性能提高超過兩個數量級,達到121倍。
在測試過程中發現,相對于原生的DPDK的報文轉發能力,使用DPDK優化的Click性能還有一定的性能損失,后期工作可以通過改進Click的調度機制,優化隊列等方式進行進一步的改進。此外,現階段對于Click用戶態I/O性能提升的設計與實現中主要是通用服務器上單核單進程的優化,集中在收發報文的I/O處理中,對于如何充分利用多核、多線程的并發處理能力沒有進行深入研究。此外,如何發揮批量處理能力,高效利用NUMA架構和網卡多隊列的特性優勢均沒有進行深度優化,這些都將是后續工作的方向。
[1]Morris R,Kohler E,Jannotti J,et al.The Click modular router[J].ACM Symposium on Operating Systems Principles,1999,33(5):263-297.
[2]Han Dongsu,Anand A,Dogar F,et al.XIA:efficient support for evolvable internetworking[C]//Proceedings of the 9th USENIX Symposium on Networked Systems Design and Implementation,San Jose,USA,Apr 25-27,2012.Berkeley,USA:USENIXAssociation,2012:23.
[3]Aggarwal B,Akella A,Anand A,et al.EndRE:an end-system redundancy elimination service for enterprises[C]//Proceedings of the 7th USENIX Symposium on Networked Systems Design and Implementation,San Jose,USA,Apr 28-30,2010.Berkeley,USA:USENIXAssociation,2010:28.
[4]Sekar V,Egi N,Ratnasamy S,et al.Design and implementation of a consolidated middlebox architecture[C]//Proceedings of the 9th USENIX Symposium on Networked Systems Design and Implementation,San Jose,USA,Apr 25-27,2012.Berkeley,USA:USENIXAssociation,2012:24.
[5]Dobrescu M,Egi N,Argyraki K,et al.RouteBricks:exploiting parallelism to scale software routers[C]//Proceedings of the 22nd ACM SIGOPS Symposium on Operating Systems Principles,Big Sky,USA,Oct 11-14,2009.New York:ACM, 2009:15-28.
[6]Kim J,Huh S,Jang K,et al.The power of batching in the Click modular router[C]//Proceedings of the 3rd ACM SIGOPS Asia-Pacific Conference on Systems,Seoul,Jul 23-24,2012.New York:ACM,2012:14.
[7]Han S,Jang K,Park K S,et al.PacketShader:a GPU-accelerated software router[J].ACM SIGCOMM Computer Communication Review,2010,40(4):195-206.
[8]Chen Benjie,Morris R.Flexible control of parallelism in a multiprocessor PC router[C]//Proceedings of the General Track:2002 USENIX Annual Technical Conference,Monterey,USA,Jun 10-15,2002.Berkeley,USA:USENIX Association,2002:333-346.
[9]Nikander P,Nyman B,Rinta-aho T,et al.Towards softwaredefined silicon:experiences in compiling Click to NetFPGA [C]//European NetFPGADevelopers Workshop,Sep 2010.
[10]Lockwood J W,Mckeown N,Watson G,et al.NetFPGA—an open platform for Gigabit-rate network switching and routing[C]//Proceedings of the 2007 IEEE International Conference on Microelectronic Systems Education,San Diego, Jun 3-4,2007.Piscataway,USA:IEEE,2007:160-161.
[11]Schelle G,Grunwald D.CUSP:a modular framework for high speed network applications on FPGAs[C]//Proceedings of the 13th ACM/SIGDA International Symposium on Field Programmable Gate Arrays,Monterey,USA,Feb 20-22,2005.New York:ACM,2005:246-257.
[12]Linux Kernel Contributors.Packet_mmap[EB/OL].[2015-07-22].https://www.kernel.org/doc/Documentation/networking/ p-acket_mmap.txt.
[13]Rizzo L.Netmap:a novel framework for fast packet I/O [C]//Proceedings of the 2012 USENIX Annual Technical Conference,2012.
[14]PF_RINGTM[EB/OL].[2015-07-22].http://www.ntop.org/ products/pf_ring/.
[15]Intel.Data plane development kit[EB/OL].[2015-07-22].http://www.dpdk.org.
[16]Barbette T,Soldani C,Mathy L.Fast userspace packet processing[C]//Proceedings of the 2015 ACM/IEEE Symposium on Architectures for Networking and Communications Systems,Oakland,USA,May 7-8,2015.Washington: IEEE Computer Society,2015:5-16.
[17]Gallenmuller S,Emmerich P,Wohlfart F,et al.Comparison of frameworks for high-performance packet IO[C]//Proceedings of the 2015 ACM/IEEE Symposium on Architectures for Networking and Communications Systems,Oakland,USA,May 7-8,2015.Washington:IEEE Computer Society,2015:29-38.
[18]Huggahalli R,Iyer R,Tetrick S.Direct cache access for high bandwidth network I/O[C]//Proceedings of the 32nd International Symposium on Computer Architecture,Madison,USA,Jun 7-8,2005.Washington:IEEE Computer Society,2005:50-59.
[19]Bolla R,Bruschi R.PC-based software routers:high performance and application service support[C]//Proceedings of the 2008 ACM SIGCOMM Workshop on Programmable Routers for Extensible Services of Tomorrow,Seattle, USA,Aug 17-22,2008.New York:ACM,2008:27-32.

LIU Song was born 1992.He is an M.S.candidate at National University of Defense Technology.His research interests include network virtualization and computer network,etc.
劉松(1992—),男,河南長垣人,國防科技大學碩士研究生,主要研究領域為網絡虛擬化,計算機網絡等。參與國家重點基礎研究發展計劃(973計劃)和信息保障重點實驗室開放基金項目等。

LU Zexin was born in 1963.He is a researcher and M.S.supervisor at National University of Defense Technology. His research interests include high-performance computer and high-performance router,etc.
盧澤新(1963—),男,重慶人,國防科技大學研究員、碩士生導師,主要研究領域為高性能計算機,高性能路由器等。

ZHANG Xiaozhe was born in 1976.He is an associate researcher and M.S.supervisor at National University of Defense Technology.His research interests include high-performance router,route protocol and protocol distributed parallel processing,etc.
張曉哲(1976—),男,遼寧鐵嶺人,國防科技大學副研究員、碩士生導師,主要研究領域為高性能路由器,路由協議,協議分布并行處理等。

MA Shicong was born in 1986.He is a Ph.D.candidate at National University of Defense Technology.His research interests include network virtualization and computer network,etc.
馬世聰(1986—),男,遼寧營口人,國防科技大學博士研究生,主要研究領域為網絡虛擬化,計算機網絡等。
Design and Implementation of Optimization I/O Framework for Click Modular Router in User Level*
LIU Song+,LU Zexin,ZHANG Xiaozhe,MAShicong
School of Computer,National University of Defense Technology,Changsha 410073,China
+Corresponding author:E-mail:liusong_ee@163.com
Software router has played a more and more important role in the development of modern networks,and the Click modular router has been one of the most popular software routers as it provides a good platform for new protocol development and rapid prototyping.Due to external overhead introduced by practical mechanism,I/O performance,which has become a bottleneck,strictly prevents the packet processing capability of Click in the user level. Aiming at the shortcomings of the I/O mechanism in the existing Click modular router,this paper proposes an optimized I/O framework for the Click modular router in the user level,through using the poll mode,zero copy and packet prefetching.The experimental results show that the optimized I/O framework can provide better performance (121 times)than the native.
software router;Click;I/O;poll mode;zero copy;packets prefetching
10.3778/j.issn.1673-9418.1509095
A
TP393.0
*The National Basic Research Program of China under Grant No.2012LB315900(國家重點基礎研究發展計劃(973計劃)).
Received 2015-08,Accepted 2015-10.
CNKI網絡優先出版:2015-11-11,http://www.cnki.net/kcms/detail/11.5602.TP.20151111.1648.004.html