edge-bench-rs: file stems and subject remainders by hand, mimalloc

The suffix and remainder regexes were most of a new file's description
(333k on boneless 2026): now plain byte matching, with the regex versions
kept as the reference in a test of tricky names and subjects. mimalloc
for the many small strings. Boneless 2026: 360k -> 495k headers/s;
check.ts still finds the outputs identical on all three captures.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Daan MeijerandClaude Opus 5.5 committed 2026-10-09 09:28:08 +02:00
1 parent bacc9aa3b3
commit 43e74199d4
5 files changed
+289 -4

No files matched your search

+11 -1
View File
@@ -8,6 +8,8 @@ use crate::names::{self, is_random_file, JudgedFile, Release, Verdict};
use rustc_hash::{FxHashMap, FxHashSet};
use std::rc::Rc;
pub static mut PROF: [u64; 8] = [0; 8];
pub struct FileMeta {
pub file_key: String,
pub name: String,
@@ -193,7 +195,9 @@ impl Scanner {
let file = match self.files.get(self.key.as_str()) {
Some(f) => f.clone(),
None => {
let t = std::time::Instant::now();
let f = describe(subject, name_end, &counter, from, xref, group).map(Rc::new);
unsafe { PROF[0] += t.elapsed().as_nanos() as u64; PROF[1] += 1; }
self.files.insert(self.key.clone(), f.clone());
f
}
@@ -208,7 +212,7 @@ impl Scanner {
message_id: id.to_string(),
bytes: js::parse_int(bytes).unwrap_or(0),
article,
posted_at: js::parse_date(date),
posted_at: { let t = std::time::Instant::now(); let d = js::parse_date(date); unsafe { PROF[2] += t.elapsed().as_nanos() as u64; } d },
file,
})
}
@@ -405,13 +409,17 @@ impl RangeIndexer {
}
fn end_chunk(&mut self, segments: Vec<Seg>, next: i64) {
let t = std::time::Instant::now();
let done = self.aggregator.add(segments);
unsafe { PROF[3] += t.elapsed().as_nanos() as u64; }
self.files(done);
if self.chunk_articles == 0 {
self.chunk_articles = next - self.batch.from;
}
let t = std::time::Instant::now();
let gone = self.aggregator.evict(self.idle);
self.cut_off(gone, false);
unsafe { PROF[4] += t.elapsed().as_nanos() as u64; }
self.batch.next = next;
}
@@ -422,7 +430,9 @@ impl RangeIndexer {
}
pub fn take(&mut self) -> Batch {
let t = std::time::Instant::now();
self.judge_releases();
unsafe { PROF[5] += t.elapsed().as_nanos() as u64; }
self.scanner.files.clear();
let next = self.batch.next;
let mut out = std::mem::replace(&mut self.batch, Batch { from: next, next, ..Default::default() });