天天看點

RHEL 7特性說明(七):編譯程式及工具RHEL 7特性說明(七):編譯程式及工具

red hat enterprise linux 7.0 是 red hat 的下一代作業系統完整套件,旨在用于關鍵任務企業級計算以及頂級企業級軟體和硬體零售商認證。

RHEL 7特性說明(七):編譯程式及工具RHEL 7特性說明(七):編譯程式及工具

<a target="_blank"></a>

在 red hat enterprise linux 7.0 中,gcc 工具鍊是根據 gcc-4.8.x 發行系列開發,并包含大量針對 red hat enterprise linux 6 的改進和 bug 修複。同樣,red hat enterprise linux 7 也包含binutils-2.23.52.x。這些版本與 red hat developer toolset 2.0 中的等效工具對應。red hat enterprise linux 6 和 red hat enterprise linux 7 gcc 的 binutils 版本對比請檢視:

<a href="https://access.redhat.com/site/documentation/en-us/red_hat_developer_toolset/2/html/user_guide/index.html#sect-changes_in_version_2.0-gcc" target="_blank">https://access.redhat.com/site/documentation/en-us/red_hat_developer_toolset/2/html/user_guide/index.html#sect-changes_in_version_2.0-gcc</a>

<a href="https://access.redhat.com/site/documentation/en-us/red_hat_developer_toolset/2/html/user_guide/index.html#sect-changes_in_version_2.0-binutils" target="_blank">https://access.redhat.com/site/documentation/en-us/red_hat_developer_toolset/2/html/user_guide/index.html#sect-changes_in_version_2.0-binutils</a>

red hat enterprise linux 7.0 工具鍊的主要特點如下:

建構符合 c++11 的應用程式的實驗性支援(其中包括所有 c++11 語言支援)和一些 c11 功能的實驗性支援。

改進的并行應用程式程式設計支援,其中包括 openmp v3.1, c++11 類型和自動記憶體通路的 gcc 内嵌,以及事務記憶體的實驗性支援(其中包括 intel rtm/hle 内聯函數、内嵌以及代碼生成)。

新的本地注冊配置設定程式(lra),提高代碼性能。

dwarf4 現在作為預設 debug 格式使用。

各種新的具體架構選項。

支援 amd 産品線 15h 和 16h 處理器。

接期(link-time)優化支援。

改進的警告和診斷。

各種新的 fortran 功能。

在 red hat enterprise linux 7.0 中,glibc 庫(libc, libm, libpthread, nss 插件及其他)是根據 glibc 2.17 發行本開發的,其中包含大量針對 red hat enterprise linux 6 對等産品的改進和 bug 修複。

red hat enterprise linux 7.0 glibc 庫主要特點如下:

實驗性 iso c11 支援。

新的 linux 接口:prlimit, prlimit64, fanotify_init, fanotify_mark, clock_adjtime, name_to_handle_at, open_by_handle_at, syncfs, setns, sendmmsg, process_vm_readv, process_vm_writev。

使用流 simd 擴充(sse)、補充流 simd 擴充 3(ssse3)、流 simd 擴充 4.2(sse4.2)以及進階矢量擴充(avx)為 amd64 和 intel 64 架構新優化的字元串功能。

為 ibm powerpc 和 ibm power7 新優化的字元串功能。

使用為 ibm system z10 和 ibm zenterprise 196 特别優化的程式為 ibm s/390 和 ibm system z 新優化的字元串功能。

新區域:os_ru, bem_za, en_za, ff_sn, sw_ke, sw_tz, lb_lu, wae_ch, yue_hk, lij_it, mhr_ru, bho_in, unm_us, es_cu, ta_lk, ayc_pe, doi_in, ia_fr, mni_in, nhn_mx, niu_nu, niu_nz, sat_in, szl_pl, mag_in。

新編碼:cp770, cp771, cp772, cp773, cp774。

新接口:scandirat, scandirat64。

已添加檢查 fd_set, fd_clr, fd_isset, poll 和 ppoll 檔案描述符版本的功能。

nscd 守護程序現在支援 netgroup 資料庫緩存。

新功能 secure_getenv() 可讓您安全通路該環境,如果在 suid 或者 sgid 程序中運作會傳回 null。這個功能替換了内部功能 __secure_getenv()。

現在如果傳遞違反那些值規範的鹽位元組(salt bytes),crypt() 功能會失效。在 linux 中,crypt() 功能将檢視 /proc/sys/crypto/fips_enabled 檔案決定是否啟用了 fips。如果啟用了該模式,則無法在使用摘要算法 5(md5)或者資料加密标準(des)算法的加密字元串中使用。

現在 clock_* 功能套件(在 &lt;time.h&gt; 中說明)可直接在主 c 庫中使用。之前必須将其與-lrt 連結方可使用這些功能。這一變化的效果是使用此功能的單線程程式,比如 clock_gettime()(它未與 -lrt 連結)将不再會在運作時暗自載入 pthreads 庫,同時也不會再受到其他代碼(比如 c++ 運作時庫)所支援的與多線程關聯的消耗的困擾。

新的标頭 &lt;sys/auxv.h&gt; 和功能 getauxval() 可讓您在經過 linux 核心時輕松通路 at_* key-value 對。該标頭還定義與 at_hwcap 密鑰關聯的 hwcap_* 二進制數。

已為低層具體平台功能記錄了已安裝标頭的新等級。powerpc 添加第一個附帶功能的事務以便提供基于時間的注冊通路。

在 red hat enterprise linux 7.0 中,gdb 調試程式來自 gdb-7.6.1 發行本,并包含大量針對 red hat enterprise linux 6 作業系統對等産品的改進和 bug 修複。

這個版本與 red hat developer toolset v2.0 中的 gdb 版本對應,以下列出了 red hat enterprise linux 6 和 red hat enterprise linux 7.0 gdb 版本之間的不同:

<a href="https://access.redhat.com/site/documentation/en-us/red_hat_developer_toolset/2/html/user_guide/index.html#sect-changes_in_version_2.0-gdb-red_hat_developer_toolset_1" target="_blank">https://access.redhat.com/site/documentation/en-us/red_hat_developer_toolset/2/html/user_guide/index.html#sect-changes_in_version_2.0-gdb-red_hat_developer_toolset_1</a>

<a href="https://access.redhat.com/site/documentation/en-us/red_hat_developer_toolset/2/html/user_guide/index.html#sect-changes_in_version_2.0-gdb-red_hat_enterprise_linux_6" target="_blank">https://access.redhat.com/site/documentation/en-us/red_hat_developer_toolset/2/html/user_guide/index.html#sect-changes_in_version_2.0-gdb-red_hat_enterprise_linux_6</a>

red hat enterprise linux 7.0 中包含的 gdb 主要新功能有:

使用新的 .gdb_index 部分和新的 gdb-add-index shell 指令更迅速地載入符号。注:在 red hat enterprise linux 6.1 及之後的版本中就有這個功能。

gdbserver 現在支援标準輸入/輸出(stdio)連接配接,例如:(gdb) target remote | ssh myhost gdbserver - hello

使用 -location 參數的 watch 指令有更多行為。

可使用一個新指令 info vtbl 顯示虛拟方法表。

使用新指令 info auto-load, set auto-load 和 show auto-load 控制檔案的自動載入。

使用 set filename-display absolute 指令顯示源檔案名的絕對路徑。

使用新指令 record btrace 控制有硬體支援的流量記錄。

red hat enterprise linux 7.0 所提供 gdb 的主要 bug 修複如下:

已将 info proc 指令更新為可用于 core 檔案。

在下級的所有比對的位置中設定斷點。

斷點位置的檔案名部分現在與源檔案名稱結尾部分比對。

現在可在内聯函數中使用斷點。

現在可将模闆執行個體化時将模闆參數列入範圍。

另外,red hat enterprise linux 7.0 提供一個新軟體包 gdb-doc,該軟體包包含 pdf、html以及資訊格式的 gdb 手冊。該 gdb 手冊在之前的 red hat enterprise linux 版本中由主 rpm 軟體包提供。

red hat enterprise linux 7.0 中包含對一些性能功能的最新更新版本,比如 oprofile, papi 和elfutils,提供性能、可移植性及功能性改進。

此外還有 red hat enterprise linux 7.0 首先采用的功能:

支援 performance co-pilot

systemtap 支援在整個非特權使用者空間運作的基于 dyninst 檢測,同時也支援基于 byteman 的java 應用程式精确探測。

硬體事務記憶體的 valgirnd 支援以及矢量化模組化指令的改進。

red hat enterprise linux 7.0 引進 performance co-pilot(pcp)支援,這是一個用來對系統級性能測定進行采集、歸檔和分析的工具、服務及庫套件。其輕權重、分布式架構的特點使其特别适合複雜系統的集中分析。

可使用 python、perl、c++ 界面添加性能名額。分析工具可直接使用這些用戶端 api(python、c++ 和 c),且大量網頁程式可使用 json 界面檢視所有可用性能資料。

有關詳情請參考 pcp 和 pcp-libs-devel 軟體包 man page 中的具體論述。pcp-doc 軟體包包括兩本來自 upstream 項目的免費公開圖書:

red hat enterprise linux 7.0 包含 systemtap 版本 2.4,它可提供一些新功能。這些包括可選的純使用者空間腳本執行、更豐富且有效的 java 探測、虛拟機探測、改進的報錯資訊以及大量 bug 修複和新功能。特别是:

使用 dyninst 二進制編輯庫,systemtap 現在可以執行一些純用于使用者空間層的腳本;無需提供核心或者 root 特權。這個模式可使用 stap --dyninst 選擇,隻啟用那些對使用者自己的程序産生影響的探測或者操作類型。注:這個模式與引發 c++ 異常的程式不相容。

與 byteman 工具聯合支援向 java 應用程式中注入探測的新方法。新的 systemtap 探測類型 java("com.app").class("class_name").method("name(signature)").*,該探測類型啟用了對進入退出某個應用程式的獨立方法的探測,無需進行系統範圍内的追蹤。

在 systemtap 驅動程式中添加了新的程式,該程式可以啟用在伺服器中運作的由 libvirt 管理的 kvm 事務中執行遠端任務。它可将編譯的 systemtap 腳本通過專門的安全 virtio-serial 連結自動且安全地傳送到虛拟機中。新的虛拟機端守護程序将載入該腳本并将其輸出結果傳送回主機。這個方法比 ssh 更快速、有效,且不需要在主機和虛拟機之間建立 ip 級網絡連接配接。要測試此功能,請運作以下指令:

stap --remote=libvirt://myvirtualmachine

另外,對 systemtap 診斷資訊有了大量改進:

現在很多資訊給出相關手冊頁供參考。這些頁面給出對出錯資訊的解釋及建議修正。

如果懷疑腳本輸入包含排版錯誤,則會以分類清單方式向使用者提供建議。當使用者指定名稱與可接受名稱不比對時會在很多上下文中使用這個建議功能,比如探測功能名稱、标記符、變量、檔案、别名等等。

已改進診斷重複資訊删除。

在資訊中添加 ansi 顔色使其更容易了解。

red hat enterprise linux 7.0 包含一個檢測架構 valgrind,該架構附帶大量工具用于配置應用程式。這個版本是基于 valgrind 3.9.0 發行本,且包含針對 red hat enterprise linux 6 和 red hat developer toolset 2.0 副本的大量改進,後者是在 valgrind 3.8.1 的基礎上開發的。

red hat enterprise linux 7.0 中包含的 valgrind 的主要新功能如下:

在安裝了 dfp 程式的主機中支援 ibm system z 十進制浮點指令。

支援 ibm power8 (power isa 2.07) 指令。

支援 intel avx2 指令。注:隻适用于 64 位架構。

intel 事務同步擴充初期支援,包括受限制事務記憶體(rtm)以及硬體鎖定省略(hie)。

在 ibm powerpc 中對硬體事務記憶體的初期支援。

已将轉移緩存預設大小增加到 16 個扇區,表現為大程式需要插入并存儲大量代碼。同樣,可追蹤的與記憶體映射的片段數已增加了 6 倍。轉移緩存中的最大扇區數可由新标簽 --num-transtab-sectors 控制。

valgrind 不再臨時生成整個對象的映射以便從中讀取資料,而是通過一個小的固定緩存讀取。這樣可在 valgrind 從大的共享對象中讀取 debug 資訊時避免虛拟記憶體尖波。

使用的禁止顯示清單(如果指定 -v 選項就會顯示)現在為每個使用的禁止顯示提示檔案名以及定義禁止顯示的行号。

現在可以使用新标簽 --sigill-diagnostics 控制在即時(just-in-time,jit)編譯程式遇到它無法轉譯的指令時是否給出診斷資訊。實際行為 — 向應用程式發出 sigill 信号 — 保持不變。

已改進 memcheck 工具,增加了下述功能:

處理向量化代碼能力的提升,大量減少錯報。使用 --partial-loads-ok=yes 标簽可從中獲益。

更好地控制洩露檢查。現在可以指定應顯示的洩露類型(definite/indirect/possible/reachable),哪些應被視為錯誤,以及哪些應通過給出洩露抑制而禁止顯示。這可通過在 suppression 條目中分别使用選項 --show-leak-kinds=kind1,kind2,..、--errors-for-leak-kinds=kind1,kind2,.. 和自選 match-leak-kinds: 行完成。注:生成的洩露抑制包含這個新行,這比之前的發行本要更具體。要擷取與之前發行本相同的行為,請在使用它們前從生成的抑制中删除 match-leak-kinds: 行。

使用更好的試探法減少洩露檢查程式中的 possible leak 報告。可用的試探法為std::stdstring、帶有析構函數元素的新[ ]配置設定的陣列以及指向使用多個繼承的 c++ 項目内置部分提供有效内部指針探測。可使用 --leak-check-heuristics=heur1,heur2,... 選項進行選擇。

對于堆上配置設定塊更好的 stacktrace 捕獲控制。使用 --keep-stacktraces 選項有可能獨立控制是否為每個配置設定和取消配置設定進行棧跟蹤。可使用這個選項生成更好的 “use after free”出錯資訊,或者通過記錄更少的資訊減少 valgrind 的資源消耗。

更好地報告洩漏禁止顯示使用。已使用禁止顯示清單(指定 -v 選項時會顯示)現在為每個洩漏禁止顯示在上次洩漏搜尋中禁止顯示的塊和位元組數。

使用以下監控指令改進了 valgrind gdb 伺服器整合:

新的螢幕指令 v.info open_fds 給出打開的檔案描述符及附加資訊清單。

新的螢幕指令 v.info execontext 可顯示 valgrind 記錄的棧追蹤資訊。

新的螢幕指令 v.do expensive_sanity_check_general 運作某些内部一緻性檢查。

red hat enterprise linux 7.0 提供最新的 ruby 2.0.0。版本 2.0.0 與 red hat enterprise linux 6 中所包含版本 1.8.7 的主要不同點在于:

新的解釋程式 yarv(另一個 ruby vm),該程式可限制降低載入時間,特别是那些有大樹結構或者檔案的應用程式。

新且迅速的 "lazy sweep" 垃圾收集程式。

ruby 限制支援字元串編碼。

ruby 限制支援内部線程而不是綠色線程。

red hat enterprise linux 7.0 包含 python 2.7.5,它是 python 2.7 系列發行本的最新版本。這個版本包含很多性能改進,并向前相容 python 3。python 2.7.5 中的主要變化如下:

排序的字典類型

快速的 i/o 子產品

集合及代碼詞典解讀

sysconfig 子產品

red hat enterprise linux 提供 openjdk7 作為預設 java 開發套件(jdk),java 7 作為預設 java 版本。所有 java 7 個軟體包(java-1.7.0-openjdk, java-1.7.0-oracle, java-1.7.0-ibm)允許平行安裝多個版本,類似于核心。平行安裝的功能可讓使用者同時嘗試多個 jdk 版本,以便在需要時調節性能并解決問題。準确的 jdk 與原來一樣通過備選方法進行選擇。

本系列文章來自 rhel 7.0 的發行注記

原文釋出時間:2014-07-16

本文來自雲栖合作夥伴“linux中國”