WebKitでSleep()を削除した後の3.7倍の高速化

AppleのGeoff Garenは、WebKitガベージコレクターTCMalloc関数のスピンロックでSleep()呼び出しを発見しました



-#if OS(WINDOWS) - Sleep(2); -#else - struct timespec tm; - tm.tv_sec = 0; - tm.tv_nsec = 2000001; - nanosleep(&tm, NULL); -#endif
      
      





スリープを削除した後、特定の条件下でのコレクターのパフォーマンスは3.7倍に増加しました。 これは、1つの小さな最適化によって生産性が数倍向上する好例です。



HNで、これについて議論行われました。彼らは、スピンロックでの使用が悪い形と考えられるのに、なぜSleep()への呼び出しがあったのか、と言いました。 コード内の長いコメントで示されているように、彼はおそらくそこにいたのです。



その結果、WebKitでSleepコールを導入した開発者が発見されました。 彼当初、TCMallocメモリを動的に割り当てるこのカスタム関数はサーバー用に開発され、この種のスピンロックは特定の理由で存在したが、この理由はおそらくWebKitにはブラウザエンジンほど関連性がないと説明しました。



Joff Garen自身も同じ意味で話しましたが、 より視覚的な形で話しました。







WebKitコードの変更は2012年5月に行われたため、最後のSafariはおそらく最適化されたバージョンですでに動作しています。



All Articles