Skip to content

Commit 2fe04a0

Browse files
committed
[KLIB] Piping ZipFileSystemCacheableAccessor when cache limit is set to missing sections
While profiling a regression with -Xklib-zip-file-accessor-cache-limit flag set, createKonanLibary and createKonanLibraryComponnets appear as hot and using ZipFileSystemInPlaceAccessor (Not cacheable). KT-81670
1 parent 3d14798 commit 2fe04a0

File tree

5 files changed

+40
-21
lines changed

5 files changed

+40
-21
lines changed

kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/KonanDriver.kt

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import org.jetbrains.kotlin.config.CompilerConfiguration
2323
import org.jetbrains.kotlin.config.CompilerConfigurationKey
2424
import org.jetbrains.kotlin.config.LanguageFeature
2525
import org.jetbrains.kotlin.config.nativeBinaryOptions.BinaryOptions
26+
import org.jetbrains.kotlin.config.zipFileSystemAccessor
2627
import org.jetbrains.kotlin.konan.file.File
2728
import org.jetbrains.kotlin.konan.library.impl.createKonanLibrary
2829
import org.jetbrains.kotlin.konan.target.CompilerOutputKind
@@ -74,7 +75,13 @@ class KonanDriver(
7475
when {
7576
!filesToCache.isNullOrEmpty() -> filesToCache
7677
configuration.get(KonanConfigKeys.MAKE_PER_FILE_CACHE) == true -> {
77-
val lib = createKonanLibrary(File(libPath), "default", null, true)
78+
val lib = createKonanLibrary(
79+
File(libPath),
80+
"default",
81+
null,
82+
true,
83+
configuration.zipFileSystemAccessor
84+
)
7885
val mainIr = lib.mainIr
7986
(0 until mainIr.fileCount()).map { fileIndex ->
8087
val fileReader = IrLibraryFileFromBytes(IrKlibBytesSource(mainIr, fileIndex))

kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/KonanLibrariesResolveSupport.kt

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import org.jetbrains.kotlin.cli.common.messages.getLogger
99
import org.jetbrains.kotlin.config.CompilerConfiguration
1010
import org.jetbrains.kotlin.config.DuplicatedUniqueNameStrategy
1111
import org.jetbrains.kotlin.config.KlibConfigurationKeys
12+
import org.jetbrains.kotlin.config.zipFileSystemAccessor
1213
import org.jetbrains.kotlin.konan.file.File
1314
import org.jetbrains.kotlin.konan.library.defaultResolver
1415
import org.jetbrains.kotlin.konan.target.Distribution
@@ -35,10 +36,12 @@ class KonanLibrariesResolveSupport(
3536
private val unresolvedLibraries = libraryPaths.toUnresolvedLibraries
3637

3738
private val resolver = defaultResolver(
38-
libraryPaths + includedLibraryFiles.map { it.absolutePath },
39-
target,
40-
distribution,
41-
configuration.getLogger()
39+
libraryPaths + includedLibraryFiles.map { it.absolutePath },
40+
target,
41+
distribution,
42+
configuration.getLogger(),
43+
false,
44+
configuration.zipFileSystemAccessor
4245
).libraryResolver(resolveManifestDependenciesLenient)
4346

4447
// We pass included libraries by absolute paths to avoid repository-based resolution for them.

native/utils/src/org/jetbrains/kotlin/konan/library/SearchPathResolver.kt

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package org.jetbrains.kotlin.konan.library
22

33
import org.jetbrains.kotlin.konan.file.File
4+
import org.jetbrains.kotlin.konan.file.ZipFileSystemAccessor
45
import org.jetbrains.kotlin.konan.library.impl.createKonanLibraryComponents
56
import org.jetbrains.kotlin.konan.target.Distribution
67
import org.jetbrains.kotlin.konan.target.KonanTarget
@@ -17,29 +18,33 @@ fun defaultResolver(
1718
target: KonanTarget,
1819
distribution: Distribution,
1920
logger: Logger = DummyLogger,
20-
skipCurrentDir: Boolean = false
21+
skipCurrentDir: Boolean = false,
22+
zipFileSystemAccessor: ZipFileSystemAccessor? = null,
2123
): SearchPathResolverWithTarget<KonanLibrary> = KonanLibraryProperResolver(
2224
directLibs = directLibs,
2325
target = target,
2426
distributionKlib = distribution.klib,
2527
skipCurrentDir = skipCurrentDir,
26-
logger = logger
28+
logger = logger,
29+
zipFileSystemAccessor,
2730
)
2831

2932
class KonanLibraryProperResolver(
3033
directLibs: List<String>,
3134
override val target: KonanTarget,
3235
distributionKlib: String?,
3336
skipCurrentDir: Boolean,
34-
override val logger: Logger
37+
override val logger: Logger,
38+
val zipFileSystemAccessor: ZipFileSystemAccessor? = null,
3539
) : KotlinLibraryProperResolverWithAttributes<KonanLibrary>(
3640
directLibs = directLibs,
3741
distributionKlib = distributionKlib,
3842
skipCurrentDir = skipCurrentDir,
3943
logger = logger,
4044
knownIrProviders = listOf(KLIB_INTEROP_IR_PROVIDER_IDENTIFIER)
4145
), SearchPathResolverWithTarget<KonanLibrary> {
42-
override fun libraryComponentBuilder(file: File, isDefault: Boolean) = createKonanLibraryComponents(file, target, isDefault)
46+
override fun libraryComponentBuilder(file: File, isDefault: Boolean) =
47+
createKonanLibraryComponents(file, target, isDefault, zipFileSystemAccessor)
4348

4449
override val distPlatformHead: File?
4550
get() = distributionKlib?.File()?.child("platform")?.child(target.visibleName)

native/utils/src/org/jetbrains/kotlin/konan/library/impl/KonanLibraryImpl.kt

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
package org.jetbrains.kotlin.konan.library.impl
1818

1919
import org.jetbrains.kotlin.konan.file.File
20+
import org.jetbrains.kotlin.konan.file.ZipFileSystemAccessor
2021
import org.jetbrains.kotlin.konan.library.*
2122
import org.jetbrains.kotlin.konan.properties.Properties
2223
import org.jetbrains.kotlin.konan.properties.propertyList
@@ -84,15 +85,16 @@ fun createKonanLibrary(
8485
libraryFilePossiblyDenormalized: File,
8586
component: String,
8687
target: KonanTarget? = null,
87-
isDefault: Boolean = false
88+
isDefault: Boolean = false,
89+
zipFileSystemAccessor: ZipFileSystemAccessor? = null,
8890
): KonanLibrary {
8991
// KT-58979: The following access classes need normalized klib path to correctly provide symbols from resolved klibs
9092
val libraryFile = Paths.get(libraryFilePossiblyDenormalized.absolutePath).normalize().File()
91-
val baseAccess = BaseLibraryAccess<KotlinLibraryLayout>(libraryFile, component)
92-
val targetedAccess = TargetedLibraryAccess<TargetedKotlinLibraryLayout>(libraryFile, component, target)
93-
val metadataAccess = MetadataLibraryAccess<MetadataKotlinLibraryLayout>(libraryFile, component)
94-
val irAccess = IrLibraryAccess<IrKotlinLibraryLayout>(libraryFile, component)
95-
val bitcodeAccess = BitcodeLibraryAccess<BitcodeKotlinLibraryLayout>(libraryFile, component, target)
93+
val baseAccess = BaseLibraryAccess<KotlinLibraryLayout>(libraryFile, component, zipFileSystemAccessor)
94+
val targetedAccess = TargetedLibraryAccess<TargetedKotlinLibraryLayout>(libraryFile, component, target, zipFileSystemAccessor)
95+
val metadataAccess = MetadataLibraryAccess<MetadataKotlinLibraryLayout>(libraryFile, component, zipFileSystemAccessor)
96+
val irAccess = IrLibraryAccess<IrKotlinLibraryLayout>(libraryFile, component, zipFileSystemAccessor)
97+
val bitcodeAccess = BitcodeLibraryAccess<BitcodeKotlinLibraryLayout>(libraryFile, component, target, zipFileSystemAccessor)
9698

9799
val base = BaseKotlinLibraryImpl(baseAccess, isDefault)
98100
val targeted = TargetedLibraryImpl(targetedAccess, base)
@@ -106,11 +108,12 @@ fun createKonanLibrary(
106108
fun createKonanLibraryComponents(
107109
libraryFile: File,
108110
target: KonanTarget? = null,
109-
isDefault: Boolean = true
111+
isDefault: Boolean = true,
112+
zipFileSystemAccessor: ZipFileSystemAccessor? = null,
110113
) : List<KonanLibrary> {
111114
val baseAccess = BaseLibraryAccess<KotlinLibraryLayout>(libraryFile, null)
112115
val base = BaseKotlinLibraryImpl(baseAccess, isDefault)
113116
return base.componentList.map {
114-
createKonanLibrary(libraryFile, it, target, isDefault)
117+
createKonanLibrary(libraryFile, it, target, isDefault, zipFileSystemAccessor)
115118
}
116119
}

native/utils/src/org/jetbrains/kotlin/konan/library/impl/KonanLibraryLayoutImpl.kt

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package org.jetbrains.kotlin.konan.library.impl
22

33
import org.jetbrains.kotlin.konan.file.File
4+
import org.jetbrains.kotlin.konan.file.ZipFileSystemAccessor
45
import org.jetbrains.kotlin.konan.file.createTempDir
56
import org.jetbrains.kotlin.konan.file.file
67
import org.jetbrains.kotlin.konan.file.unzipTo
@@ -26,8 +27,8 @@ class BitcodeLibraryLayoutImpl(klib: File, component: String, target: KonanTarge
2627

2728
}
2829

29-
open class TargetedLibraryAccess<L : TargetedKotlinLibraryLayout>(klib: File, component: String, val target: KonanTarget?) :
30-
BaseLibraryAccess<L>(klib, component) {
30+
open class TargetedLibraryAccess<L : TargetedKotlinLibraryLayout>(klib: File, component: String, val target: KonanTarget?, zipFileSystemAccessor: ZipFileSystemAccessor?) :
31+
BaseLibraryAccess<L>(klib, component, zipFileSystemAccessor) {
3132

3233
override val layout = TargetedLibraryLayoutImpl(klib, component, target)
3334
protected open val extractingLayout: TargetedKotlinLibraryLayout by lazy { ExtractingTargetedLibraryImpl(layout) }
@@ -40,8 +41,8 @@ open class TargetedLibraryAccess<L : TargetedKotlinLibraryLayout>(klib: File, co
4041
action(layout as L)
4142
}
4243

43-
open class BitcodeLibraryAccess<L : BitcodeKotlinLibraryLayout>(klib: File, component: String, target: KonanTarget?) :
44-
TargetedLibraryAccess<L>(klib, component, target) {
44+
open class BitcodeLibraryAccess<L : BitcodeKotlinLibraryLayout>(klib: File, component: String, target: KonanTarget?, zipFileSystemAccessor: ZipFileSystemAccessor?) :
45+
TargetedLibraryAccess<L>(klib, component, target, zipFileSystemAccessor) {
4546

4647
override val layout = BitcodeLibraryLayoutImpl(klib, component, target)
4748
override val extractingLayout: BitcodeKotlinLibraryLayout by lazy { ExtractingBitcodeLibraryImpl(layout) }

0 commit comments

Comments
 (0)