Nuke Python 性能分析

使用性能計時器

在Nuke中打開性能計時器時号俐,就可以通過Python讀取性能信息皆怕。就能知道每個節(jié)點的運算時間妇智。
在調(diào)試運行較慢的腳本磷杏,找出耗時瓶頸上很有幫助。

注意憋活,打開性能計時器會影響Nuke的性能堕虹,因為會頻繁打開卧晓、關閉計時器,同步線程赴捞。因此打開
此功能逼裆,Nuke會更慢,但是能讓你獲取nuke腳本處理時間的快照赦政。

從命令行加上“-P” 會打開此功能胜宇,或者調(diào)用Python命令來打開計時器

nuke.startPerformanceTimers()

檢查計時器是否允許性能計時器:

nuke.usingPerformanceTimers()

關閉計時器:

nuke.resetPerformanceTimers()


Nuke架構上的注意事項

當nuke內(nèi)的節(jié)點要渲染時,有4個步驟:

  • store -- 第一件事就是存下用戶在knobs上選擇的數(shù)據(jù)
  • validate -- 節(jié)點告知Nuke其輸出的信息恢着,例如處理的哪個通道桐愉,以及大小
  • request -- 在這節(jié)點弄明白了其需要哪些輸入才能產(chǎn)生對應的輸出(例如,需要通道掰派,需要區(qū)域)
  • engine -- 在這節(jié)點干了大部分的工作从诲,并輸出。這也是花費時間最多的地方靡羡。

更多信息盏求,請看nuke 開發(fā)文檔


通過python獲取能耗時間

Nuke的性能計時器收集這四個處理階段的信息,并可以通過python來獲取亿眠。另外,性能計時器激活時磅废,
計時信息會顯示在節(jié)點圖中纳像。節(jié)點也會根據(jù)耗時比重顯示不同的顏色,從綠(最快)到紅(最慢)拯勉。

函數(shù)nuke.node.performanceInfo()會打印某個節(jié)點的時間信息竟趾。例如,下面的代碼段就能
打印當前節(jié)點樹種每個節(jié)點的時間信息(包括在 組內(nèi)的節(jié)點):

for n in nuke.allNodes(recurseGroups=True):
    print n.fullName()
    print n.performanceInfo()

對一個簡單的只有 Checkerboard-> Blur -> Defocus -> Viewer 的節(jié)點樹輸出和下面的很像:

Defocus1
{'callCount': 10228, 'timeTakenWall': 28524348, 'timeTakenCPU': 624512794}
Blur1
{'callCount': 9607, 'timeTakenWall': 9906815, 'timeTakenCPU': 151406143}
Viewer1
{'callCount': 0, 'timeTakenWall': 0, 'timeTakenCPU': 0}
CheckerBoard1
{'callCount': 34396, 'timeTakenWall': 3923322, 'timeTakenCPU': 29982254}

如上 nuke.Node.performanceInfo()返回了一個包含下列性能統(tǒng)計信息的字典:

  • callCount 這個過程被調(diào)用的次數(shù)
  • timeTakenWall 用墻上掛鐘記錄所花費的時間宫峦,用戶實際要等待此處理要結束的時間岔帽。以毫秒計算。
  • timeTakenCPU
    • Linux上是CPU執(zhí)行代碼的時間导绷,也是毫秒計時犀勒。是所有CPU上的用時總和。例如,多線程engine
      的處理時間就要比實際用時長很多贾费。如果平均CPU時間(timeTakenCPU初始使用的線程數(shù))比每個線程執(zhí)行
      時間短钦购,說明CPU線程花了很長時間但沒有執(zhí)行代碼。例如褂萧,等待鎖押桃,說明性能又問題。
    • MAC和Win上导犹,CPU時間還不能用唱凯,Mac上這個值和處理的總時間差不多。

在Linux Nuke開24線程上獲取的時間信息谎痢,我們看下最耗時的兩個節(jié)點Blur和Defocus:

Defocus1
{'callCount': 10228, 'timeTakenWall': 28524348, 'timeTakenCPU': 624512794}
Blur1
{'callCount': 9607, 'timeTakenWall': 9906815, 'timeTakenCPU': 151406143}

Blur節(jié)點的CPU時間是 wall time的24倍磕昼,Defocus節(jié)點的CPU時間是我們期望值的三分之二。說明engine的線程
都被Blur節(jié)點占用了舶得,同事Defoucs節(jié)點花費了相當長的時間來等待掰烟,同時我們也發(fā)現(xiàn)了以后優(yōu)化Nuke的一個方向!


其他性能統(tǒng)計

默認沐批,nuke.Node.performanceInfo()會給出engine處理部分,通常也是最好是部分的用時信息. 也可以
通過傳入下面的參數(shù)獲取其他處理部分的用時信息:

nuke.PROFILE_STORE
nuke.PROFILE_VALIDATE
nuke.PROFILE_REQUEST
nuke.PROFILE_ENGINE

例如,獲取Defocus節(jié)點在上面的數(shù)中的所有用時,可以用下面的代碼:

n = nuke.toNode("Defocus1")
print "Defocus1"
print "Store"
print n.performanceInfo(nuke.PROFILE_STORE)
print "Validate"
print n.performanceInfo(nuke.PROFILE_VALIDATE)
print "Request"
print n.performanceInfo(nuke.PROFILE_REQUEST)
print "Engine"
print n.performanceInfo(nuke.PROFILE_ENGINE)

結果如下:

# Result: Defocus1
Store
{'callCount': 108, 'timeTakenWall': 6571, 'timeTakenCPU': 6563}
Validate
{'callCount': 53, 'timeTakenWall': 1451, 'timeTakenCPU': 1445}
Request
{'callCount': 108, 'timeTakenWall': 1017, 'timeTakenCPU': 1009}
Engine
{'callCount': 10228, 'timeTakenWall': 28524348, 'timeTakenCPU': 624512794}

正如預料的,Defocus大部分時間花在了engine處理上,store,validate,request相對都很快.
如果并非如此,或者callCount顯示store,validate,request調(diào)用次數(shù)很多,就說明這
是一個影響性能的問題了.

注意某些節(jié)點就是要比例子中的Defocus在store,validate,request階段花費更多時間.例如,
reader在validate階段更長,因為需要打開文件,如果是網(wǎng)絡文件就會更慢. ScanlineReader節(jié)點
是另一個例子,validate要更長,同事store節(jié)點比RotoPaint更慢,因為需要bake曲線.帶有耗時
表達式的knbo也會在store節(jié)點花費更多時間.


性能信息寫入XML

當使用 "-Pf <filename>"參數(shù)運行nuke時,性能數(shù)據(jù)連帶部分系統(tǒng)數(shù)據(jù)會自動寫入XML文件.
此模式下,性能計時器會再渲染開始前啟動,渲染結束后就講數(shù)據(jù)寫入xml文件. 當nuke在
此模式運行時,調(diào)用:

nuke.performanceProfileFilename()

會返回xml文件名纫骑。

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市九孩,隨后出現(xiàn)的幾起案子先馆,更是在濱河造成了極大的恐慌,老刑警劉巖躺彬,帶你破解...
    沈念sama閱讀 219,589評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件煤墙,死亡現(xiàn)場離奇詭異,居然都是意外死亡宪拥,警方通過查閱死者的電腦和手機仿野,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,615評論 3 396
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來她君,“玉大人脚作,你說我怎么就攤上這事〉奚玻” “怎么了球涛?”我有些...
    開封第一講書人閱讀 165,933評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長校镐。 經(jīng)常有香客問我亿扁,道長,這世上最難降的妖魔是什么鸟廓? 我笑而不...
    開封第一講書人閱讀 58,976評論 1 295
  • 正文 為了忘掉前任从祝,我火速辦了婚禮襟己,結果婚禮上,老公的妹妹穿的比我還像新娘哄褒。我一直安慰自己稀蟋,他們只是感情好,可當我...
    茶點故事閱讀 67,999評論 6 393
  • 文/花漫 我一把揭開白布呐赡。 她就那樣靜靜地躺著退客,像睡著了一般。 火紅的嫁衣襯著肌膚如雪链嘀。 梳的紋絲不亂的頭發(fā)上萌狂,一...
    開封第一講書人閱讀 51,775評論 1 307
  • 那天,我揣著相機與錄音怀泊,去河邊找鬼茫藏。 笑死,一個胖子當著我的面吹牛霹琼,可吹牛的內(nèi)容都是我干的务傲。 我是一名探鬼主播,決...
    沈念sama閱讀 40,474評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼枣申,長吁一口氣:“原來是場噩夢啊……” “哼售葡!你這毒婦竟也來了?” 一聲冷哼從身側響起忠藤,我...
    開封第一講書人閱讀 39,359評論 0 276
  • 序言:老撾萬榮一對情侶失蹤挟伙,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后模孩,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體尖阔,經(jīng)...
    沈念sama閱讀 45,854評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,007評論 3 338
  • 正文 我和宋清朗相戀三年榨咐,在試婚紗的時候發(fā)現(xiàn)自己被綠了介却。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,146評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡块茁,死狀恐怖齿坷,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情龟劲,我是刑警寧澤,帶...
    沈念sama閱讀 35,826評論 5 346
  • 正文 年R本政府宣布轴或,位于F島的核電站昌跌,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏照雁。R本人自食惡果不足惜蚕愤,卻給世界環(huán)境...
    茶點故事閱讀 41,484評論 3 331
  • 文/蒙蒙 一答恶、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧萍诱,春花似錦悬嗓、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,029評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至籍凝,卻和暖如春周瞎,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背饵蒂。 一陣腳步聲響...
    開封第一講書人閱讀 33,153評論 1 272
  • 我被黑心中介騙來泰國打工声诸, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人退盯。 一個月前我還...
    沈念sama閱讀 48,420評論 3 373
  • 正文 我出身青樓彼乌,卻偏偏與公主長得像,于是被迫代替她去往敵國和親渊迁。 傳聞我的和親對象是個殘疾皇子慰照,可洞房花燭夜當晚...
    茶點故事閱讀 45,107評論 2 356

推薦閱讀更多精彩內(nèi)容

  • 從三月份找實習到現(xiàn)在,面了一些公司宫纬,掛了不少焚挠,但最終還是拿到小米、百度漓骚、阿里蝌衔、京東、新浪蝌蹂、CVTE噩斟、樂視家的研發(fā)崗...
    時芥藍閱讀 42,255評論 11 349
  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn)孤个,斷路器剃允,智...
    卡卡羅2017閱讀 134,672評論 18 139
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,190評論 25 707
  • 你今天打卡了嗎斥废? 現(xiàn)在微博、朋友圈流行打卡给郊。寫作牡肉、繪畫、運動……但是你有沒有問過你自己淆九,你今天打卡花了多少時間呢统锤?...
    汪文婧閱讀 736評論 2 0
  • 《我的偉人之路》——曾國藩故里 7月24-31日《我的偉人之路》第一期在湖南婁底曾國藩故里舉行毛俏,來自全國各地的一百...
    檸晨寶寶閱讀 168評論 0 0