[llvm] r269682 - ThinLTO caching: reload cached file with mmap and drop heap-allocated memory buffer
Duncan P. N. Exon Smith via llvm-commits
llvm-commits at lists.llvm.org
Mon May 16 13:57:52 PDT 2016
> On 2016-May-16, at 12:12, Mehdi Amini via llvm-commits <llvm-commits at lists.llvm.org> wrote:
>
> Author: mehdi_amini
> Date: Mon May 16 14:11:59 2016
> New Revision: 269682
>
> URL: http://llvm.org/viewvc/llvm-project?rev=269682&view=rev
> Log:
> ThinLTO caching: reload cached file with mmap and drop heap-allocated memory buffer
>
> This is reducing pressure on the OS memory system, and is NFC
> when not using a cache.
> I measure a 10x memory consumption reduction when linking opt
> with full debug info.
>
> From: Mehdi Amini <mehdi.amini at apple.com>
>
> Modified:
> llvm/trunk/lib/LTO/ThinLTOCodeGenerator.cpp
>
> Modified: llvm/trunk/lib/LTO/ThinLTOCodeGenerator.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/LTO/ThinLTOCodeGenerator.cpp?rev=269682&r1=269681&r2=269682&view=diff
> ==============================================================================
> --- llvm/trunk/lib/LTO/ThinLTOCodeGenerator.cpp (original)
> +++ llvm/trunk/lib/LTO/ThinLTOCodeGenerator.cpp Mon May 16 14:11:59 2016
> @@ -484,9 +484,10 @@ public:
> }
>
> // Cache the Produced object file
> - void write(MemoryBufferRef OutputBuffer) {
> + std::unique_ptr<MemoryBuffer>
> + write(std::unique_ptr<MemoryBuffer> OutputBuffer) {
> if (EntryPath.empty())
> - return;
> + return OutputBuffer;
>
> // Write to a temporary to avoid race condition
> SmallString<128> TempFilename;
> @@ -499,7 +500,7 @@ public:
> }
> {
> raw_fd_ostream OS(TempFD, /* ShouldClose */ true);
> - OS << OutputBuffer.getBuffer();
> + OS << OutputBuffer->getBuffer();
> }
> // Rename to final destination (hopefully race condition won't matter here)
> EC = sys::fs::rename(TempFilename, EntryPath);
> @@ -509,8 +510,16 @@ public:
> if (EC)
> report_fatal_error(Twine("Failed to open ") + EntryPath +
> " to save cached entry\n");
> - OS << OutputBuffer.getBuffer();
> + OS << OutputBuffer->getBuffer();
> }
> + auto ReloadedBufferOrErr = MemoryBuffer::getFile(EntryPath);
> + if (auto EC = ReloadedBufferOrErr.getError()) {
> + // FIXME diagnose
Do you have a plan to resolve this FIXME?
> + errs() << "error: can't reload cached file '" << EntryPath
> + << "': " << EC.message() << "\n";
> + return OutputBuffer;
> + }
> + return std::move(*ReloadedBufferOrErr);
> }
> };
>
> @@ -943,7 +952,7 @@ void ThinLTOCodeGenerator::run() {
> ExportList, GUIDPreservedSymbols, ResolvedODR, CacheOptions,
> DisableCodeGen, SaveTempsDir, count);
>
> - CacheEntry.write(*OutputBuffer);
> + OutputBuffer = CacheEntry.write(std::move(OutputBuffer));
> ProducedBinaries[count] = std::move(OutputBuffer);
> }, count);
> count++;
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list