If you can collect an instruments profile of the frontend running one of the 
particularly-slow files, it might help localize the subsystem of the 
typechecker; aside from that, I'm currently putting some new counters and 
timers in the frontend, so am likely to have slightly more-constructive news in 
the next little while, but don't have that work done just yet.

For collecting an instruments profile, try something like:

  $ 
SWIFTBIN=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift
  $ instruments -t 'Time Profiler' $SWIFTBIN -frontend -parse somefile.swift
  $ open instrumentscli0.trace

Then expand all (option-click the triangle next to 'swift' in the call-tree), 
select-all, copy and paste the complete call-tree into a text file and attach 
it here, that might give a bit of insight. On my local copy of instruments one 
also has to toggle the "separate by state" box of the details pane to get the 
full call-tree to expand, not sure why; might just be a transient bug.

-Graydon

> On Oct 5, 2016, at 3:37 PM, Ben Asher via swift-dev <swift-dev@swift.org> 
> wrote:
> 
> I just tried with both Xcode 8.1 beta 2 and Xcode 8.0, and 8.1b2 seems maybe 
> 15s faster (to build our main huge target): 7m28s compared to 7m43s. It's 
> some improvement, but I'm not exactly sure what kind of improvement was 
> expected.
> 
> Is there any profiling/tracing you all would recommend to help find problem 
> areas? I don't mind building from Swift master, using someone's preferred 
> profiling tools, etc. I'm not really sure where to start.
> 
> Ben
> 
> On Wed, Oct 5, 2016 at 1:05 PM, Ben Asher <benashe...@gmail.com 
> <mailto:benashe...@gmail.com>> wrote:
> Apologies for not starting off with system info: macOS Sierra (10.12.0), 
> Xcode 8.0 (from the App Store).
> 
> I'll try with Xcode 8.1 beta this afternoon and report back. Ill also open a 
> ticket for improving -debug-time-function-bodies if I can confirm anything.
> 
> Thanks!
> 
> Ben
> 
> On Wed, Oct 5, 2016 at 1:00 PM, Mark Lacey <mark.la...@apple.com 
> <mailto:mark.la...@apple.com>> wrote:
> 
>> On Oct 4, 2016, at 2:38 PM, Ben Asher via swift-dev <swift-dev@swift.org 
>> <mailto:swift-dev@swift.org>> wrote:
>> 
>> Hello! I work with a large project (~900 .swift files and more .m files). We 
>> have a nightly job that compiles the app and calls out function bodies 
>> (using -debug-time-function-bodies) that are slower than 100ms to compile. 
>> Since upgrading to Swift 3, the number of trouble function bodies has one 
>> from > 150 to < 20, so we're really happy about that! The only issue though 
>> is that build time overall increased by ~1 min (amount of time to build all 
>> targets before automatically merging to master in our integration build).
> 
> Is this using a particular release of Xcode (8.0 or an 8.1 beta?), or with 
> one of the toolchain builds from swift.org <http://swift.org/>?
> 
> Xcode 8.1 beta 2 includes some type checker performance improvements which 
> might have an impact here.
> 
>> 
>> To dig into this further, we've started a new nightly job that builds the 
>> app using the -debug-time-compilation flag, and using that we've found that 
>> some files take as long as 2-3 seconds to compile. But, there's no targeted 
>> output to help us get this down via the -debug-time-function-bodies flag 
>> (i.e. no function bodies that we can refactor to get compile times much 
>> faster).
> 
> One thing to look out for here is that I believe there are some cases where 
> -debug-time-function-bodies isn’t reporting type checking time. >From my 
> (potentially faulty) recollection, things like let bindings with literals or 
> closures on the right hand side do not show up in the 
> -debug-time-function-bodies output, and depending on the specifics of the 
> expression these can sometimes take a long time to type check. When these 
> appear within the body of another type declaration they can end up getting 
> type checked multiple times during a full project build, and that time can 
> add up.
> 
> I don’t believe there is a bug open for improving -debug-time-function-bodies 
> to help diagnose this, but opening a bug would be appreciated if you can 
> confirm that this is the case, and of course patches to fix it are definitely 
> welcome as well.
> 
> Mark
> 
>> We can see that most of the time is spent in "Type checking / Semantic 
>> analysis" for these problem files, but we don't currently have any way of 
>> knowing what that means. It feels like we've exhausted the available options 
>> at this point (unless there are other flags I'm missing) in terms of 
>> existing actionable debugging/profiling/reporting, so now our question is 
>> this: what kind of reports would Swift maintainers be interested in seeing 
>> in terms of output from profiling tools, etc. to help debug/diagnose these 
>> slow compile issues? We're willing to devote time to tooling to help 
>> generate such reports and file bugs.
>> 
>> Thanks!
>> 
>> Ben
>> _______________________________________________
>> swift-dev mailing list
>> swift-dev@swift.org <mailto:swift-dev@swift.org>
>> https://lists.swift.org/mailman/listinfo/swift-dev 
>> <https://lists.swift.org/mailman/listinfo/swift-dev>
> 
> 
> 
> 
> -- 
> -Ben
> 
> 
> 
> -- 
> -Ben
> _______________________________________________
> swift-dev mailing list
> swift-dev@swift.org <mailto:swift-dev@swift.org>
> https://lists.swift.org/mailman/listinfo/swift-dev 
> <https://lists.swift.org/mailman/listinfo/swift-dev>
_______________________________________________
swift-dev mailing list
swift-dev@swift.org
https://lists.swift.org/mailman/listinfo/swift-dev

Reply via email to