authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2024-05-26 15:17:10-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2024-05-27 20:56:48-07:00
log807b613f71bf97d8169b6ce3ed7ad0c0dc8bb402
treef5952f83217d5c6d9cd6ed7adf667a10769c3408
parent7fe72d560d94fc379165ab46c9e568e6e684aa41

std.Progress: move more global preallocations to thread memory

Same idea as previous commit

1 files changed, 15 insertions(+), 7 deletions(-)

lib/std/Progress.zig+15-7
......@@ -532,6 +532,12 @@ const Serialized = struct {
532532 parents: [node_storage_buffer_len]Node.Parent,
533533 storage: [node_storage_buffer_len]Node.Storage,
534534 map: [node_storage_buffer_len]Node.Index,
535
536 parents_copy: [node_storage_buffer_len]Node.Parent,
537 storage_copy: [node_storage_buffer_len]Node.Storage,
538 ipc_metadata_copy: [node_storage_buffer_len]SavedMetadata,
539
540 ipc_metadata: [node_storage_buffer_len]SavedMetadata,
535541 };
536542};
537543
......@@ -583,11 +589,6 @@ fn serialize(serialized_buffer: *Serialized.Buffer) Serialized {
583589 };
584590}
585591
586var parents_copy: [node_storage_buffer_len]Node.Parent = undefined;
587var storage_copy: [node_storage_buffer_len]Node.Storage = undefined;
588var ipc_metadata_copy: [node_storage_buffer_len]SavedMetadata = undefined;
589
590var ipc_metadata: [node_storage_buffer_len]SavedMetadata = undefined;
591592var ipc_metadata_len: u16 = 0;
592593
593594const SavedMetadata = struct {
......@@ -612,6 +613,9 @@ const SavedMetadata = struct {
612613};
613614
614615fn serializeIpc(start_serialized_len: usize, serialized_buffer: *Serialized.Buffer) usize {
616 const ipc_metadata_copy = &serialized_buffer.ipc_metadata_copy;
617 const ipc_metadata = &serialized_buffer.ipc_metadata;
618
615619 var serialized_len = start_serialized_len;
616620 var pipe_buf: [2 * 4096]u8 align(4) = undefined;
617621
......@@ -707,8 +711,8 @@ fn serializeIpc(start_serialized_len: usize, serialized_buffer: *Serialized.Buff
707711 }
708712
709713 // Save a copy in case any pipes are empty on the next update.
710 @memcpy(parents_copy[0..serialized_len], serialized_buffer.parents[0..serialized_len]);
711 @memcpy(storage_copy[0..serialized_len], serialized_buffer.storage[0..serialized_len]);
714 @memcpy(serialized_buffer.parents_copy[0..serialized_len], serialized_buffer.parents[0..serialized_len]);
715 @memcpy(serialized_buffer.storage_copy[0..serialized_len], serialized_buffer.storage[0..serialized_len]);
712716 @memcpy(ipc_metadata_copy[0..ipc_metadata_len], ipc_metadata[0..ipc_metadata_len]);
713717
714718 return serialized_len;
......@@ -737,6 +741,10 @@ fn useSavedIpcData(
737741 main_index: usize,
738742 old_metadata: []const SavedMetadata,
739743) usize {
744 const parents_copy = &serialized_buffer.parents_copy;
745 const storage_copy = &serialized_buffer.storage_copy;
746 const ipc_metadata = &serialized_buffer.ipc_metadata;
747
740748 const ipc_fd = main_storage.getIpcFd().?;
741749 const saved_metadata = findOld(ipc_fd, old_metadata) orelse {
742750 main_storage.completed_count = 0;