feat(sync): full code sync from release
This commit is contained in:
@@ -0,0 +1,83 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"sort"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func buildOpenAISchedulerBenchmarkCandidates(size int) []openAIAccountCandidateScore {
|
||||
if size <= 0 {
|
||||
return nil
|
||||
}
|
||||
candidates := make([]openAIAccountCandidateScore, 0, size)
|
||||
for i := 0; i < size; i++ {
|
||||
accountID := int64(10_000 + i)
|
||||
candidates = append(candidates, openAIAccountCandidateScore{
|
||||
account: &Account{
|
||||
ID: accountID,
|
||||
Priority: i % 7,
|
||||
},
|
||||
loadInfo: &AccountLoadInfo{
|
||||
AccountID: accountID,
|
||||
LoadRate: (i * 17) % 100,
|
||||
WaitingCount: (i * 11) % 13,
|
||||
},
|
||||
score: float64((i*29)%1000) / 100,
|
||||
errorRate: float64((i * 5) % 100 / 100),
|
||||
ttft: float64(30 + (i*3)%500),
|
||||
hasTTFT: i%3 != 0,
|
||||
})
|
||||
}
|
||||
return candidates
|
||||
}
|
||||
|
||||
func selectTopKOpenAICandidatesBySortBenchmark(candidates []openAIAccountCandidateScore, topK int) []openAIAccountCandidateScore {
|
||||
if len(candidates) == 0 {
|
||||
return nil
|
||||
}
|
||||
if topK <= 0 {
|
||||
topK = 1
|
||||
}
|
||||
ranked := append([]openAIAccountCandidateScore(nil), candidates...)
|
||||
sort.Slice(ranked, func(i, j int) bool {
|
||||
return isOpenAIAccountCandidateBetter(ranked[i], ranked[j])
|
||||
})
|
||||
if topK > len(ranked) {
|
||||
topK = len(ranked)
|
||||
}
|
||||
return ranked[:topK]
|
||||
}
|
||||
|
||||
func BenchmarkOpenAIAccountSchedulerSelectTopK(b *testing.B) {
|
||||
cases := []struct {
|
||||
name string
|
||||
size int
|
||||
topK int
|
||||
}{
|
||||
{name: "n_16_k_3", size: 16, topK: 3},
|
||||
{name: "n_64_k_3", size: 64, topK: 3},
|
||||
{name: "n_256_k_5", size: 256, topK: 5},
|
||||
}
|
||||
|
||||
for _, tc := range cases {
|
||||
candidates := buildOpenAISchedulerBenchmarkCandidates(tc.size)
|
||||
b.Run(tc.name+"/heap_topk", func(b *testing.B) {
|
||||
b.ReportAllocs()
|
||||
for i := 0; i < b.N; i++ {
|
||||
result := selectTopKOpenAICandidates(candidates, tc.topK)
|
||||
if len(result) == 0 {
|
||||
b.Fatal("unexpected empty result")
|
||||
}
|
||||
}
|
||||
})
|
||||
b.Run(tc.name+"/full_sort", func(b *testing.B) {
|
||||
b.ReportAllocs()
|
||||
for i := 0; i < b.N; i++ {
|
||||
result := selectTopKOpenAICandidatesBySortBenchmark(candidates, tc.topK)
|
||||
if len(result) == 0 {
|
||||
b.Fatal("unexpected empty result")
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user