Skip to content

Commit 0c899fe

Browse files
committed
Do not follow pointers in skipValue
1 parent 16a9c17 commit 0c899fe

2 files changed

Lines changed: 143 additions & 152 deletions

File tree

README.md

Lines changed: 141 additions & 141 deletions
Original file line numberDiff line numberDiff line change
@@ -234,11 +234,11 @@ Here are reference results on Apple M2 Pro.
234234

235235
| Optimization | `geolite2.City` | `MyCity` | `any.Value` |
236236
|--- |--- |--- |--- |
237-
| Default | ~1,293,000 | | |
238-
| Index | ~1,454,000 | ~1,511,000 | ~1,438,000 |
239-
| Index + `.only` | ~1,531,000 | | ~1,528,000 |
240-
| Index + `Cache` | ~1,650,000 | | |
241-
| Index + `Cache` + `.only` | ~1,792,000 | | |
237+
| Default | ~1,326,000 | | |
238+
| Index | ~1,559,000 | ~3,875,000 | ~1,411,000 |
239+
| Index + `.only` | ~3,776,000 | | ~3,526,000 |
240+
| Index + `Cache` | ~1,725,000 | | |
241+
| Index + `Cache` + `.only` | ~4,399,000 | | |
242242

243243
Index means `Reader.Options{ .ipv4_index_first_n_bits = 16 }`.
244244

@@ -259,27 +259,27 @@ $ for i in $(seq 1 10); do
259259
2>&1 | grep 'Lookups Per Second'
260260
done
261261

262-
Lookups Per Second (avg):1288123.6986424406
263-
Lookups Per Second (avg):1297844.4971600326
264-
Lookups Per Second (avg):1299800.7833033653
265-
Lookups Per Second (avg):1289163.7206031256
266-
Lookups Per Second (avg):1296087.9427189995
267-
Lookups Per Second (avg):1293914.0954956787
268-
Lookups Per Second (avg):1304671.4413292515
269-
Lookups Per Second (avg):1259770.3727349874
270-
Lookups Per Second (avg):1299818.3136058154
271-
Lookups Per Second (avg):1304484.7981250943
262+
Lookups Per Second (avg):1035105.6505787085
263+
Lookups Per Second (avg):1343232.5849613282
264+
Lookups Per Second (avg):1414320.3828140981
265+
Lookups Per Second (avg):1403204.5808096242
266+
Lookups Per Second (avg):1397749.6334335194
267+
Lookups Per Second (avg):1239495.4695665902
268+
Lookups Per Second (avg):1311846.2399504937
269+
Lookups Per Second (avg):1389317.1825729539
270+
Lookups Per Second (avg):1326293.074373302
271+
Lookups Per Second (avg):1397069.5070021125
272272
---
273-
Lookups Per Second (avg):1428547.0249066802
274-
Lookups Per Second (avg):1380507.1016736578
275-
Lookups Per Second (avg):1424615.0690083539
276-
Lookups Per Second (avg):1479872.0734649224
277-
Lookups Per Second (avg):1470581.8382631212
278-
Lookups Per Second (avg):1452131.834013217
279-
Lookups Per Second (avg):1441057.419112997
280-
Lookups Per Second (avg):1460678.0011842097
281-
Lookups Per Second (avg):1469818.5626422924
282-
Lookups Per Second (avg):1427603.971951151
273+
Lookups Per Second (avg):1609554.3144103398
274+
Lookups Per Second (avg):1551616.3615884783
275+
Lookups Per Second (avg):1562781.5253244028
276+
Lookups Per Second (avg):1549749.8760265964
277+
Lookups Per Second (avg):1553338.1374043243
278+
Lookups Per Second (avg):1606371.620343102
279+
Lookups Per Second (avg):1462599.8590053734
280+
Lookups Per Second (avg):1531200.7025148824
281+
Lookups Per Second (avg):1575262.394410654
282+
Lookups Per Second (avg):1589061.3264260693
283283
```
284284

285285
</details>
@@ -301,27 +301,27 @@ $ for i in $(seq 1 10); do
301301
2>&1 | grep 'Lookups Per Second'
302302
done
303303

304-
Lookups Per Second (avg):1428547.0249066802
305-
Lookups Per Second (avg):1380507.1016736578
306-
Lookups Per Second (avg):1424615.0690083539
307-
Lookups Per Second (avg):1479872.0734649224
308-
Lookups Per Second (avg):1470581.8382631212
309-
Lookups Per Second (avg):1452131.834013217
310-
Lookups Per Second (avg):1441057.419112997
311-
Lookups Per Second (avg):1460678.0011842097
312-
Lookups Per Second (avg):1469818.5626422924
313-
Lookups Per Second (avg):1427603.971951151
304+
Lookups Per Second (avg):1609554.3144103398
305+
Lookups Per Second (avg):1551616.3615884783
306+
Lookups Per Second (avg):1562781.5253244028
307+
Lookups Per Second (avg):1549749.8760265964
308+
Lookups Per Second (avg):1553338.1374043243
309+
Lookups Per Second (avg):1606371.620343102
310+
Lookups Per Second (avg):1462599.8590053734
311+
Lookups Per Second (avg):1531200.7025148824
312+
Lookups Per Second (avg):1575262.394410654
313+
Lookups Per Second (avg):1589061.3264260693
314314
---
315-
Lookups Per Second (avg):1480631.763363951
316-
Lookups Per Second (avg):1547402.0513766634
317-
Lookups Per Second (avg):1522023.2008449882
318-
Lookups Per Second (avg):1512118.8782619492
319-
Lookups Per Second (avg):1507072.3128425558
320-
Lookups Per Second (avg):1524512.3489753657
321-
Lookups Per Second (avg):1564611.0025010307
322-
Lookups Per Second (avg):1518824.4053660445
323-
Lookups Per Second (avg):1559368.5734912506
324-
Lookups Per Second (avg):1571173.0594097849
315+
Lookups Per Second (avg):3837828.091414087
316+
Lookups Per Second (avg):3863406.691132952
317+
Lookups Per Second (avg):3631899.1474487204
318+
Lookups Per Second (avg):3868374.68303505
319+
Lookups Per Second (avg):3817877.0773159857
320+
Lookups Per Second (avg):3989842.515290244
321+
Lookups Per Second (avg):3538369.0460390393
322+
Lookups Per Second (avg):3722414.586061188
323+
Lookups Per Second (avg):3635122.737647285
324+
Lookups Per Second (avg):3859718.5300261974
325325
```
326326

327327
</details>
@@ -336,16 +336,16 @@ $ for i in $(seq 1 10); do
336336
2>&1 | grep 'Lookups Per Second'
337337
done
338338

339-
Lookups Per Second (avg):1621097.9412664056
340-
Lookups Per Second (avg):1643755.6794738034
341-
Lookups Per Second (avg):1689941.621422972
342-
Lookups Per Second (avg):1619515.4855034132
343-
Lookups Per Second (avg):1635409.8950475699
344-
Lookups Per Second (avg):1667425.4591913386
345-
Lookups Per Second (avg):1624120.681573548
346-
Lookups Per Second (avg):1663304.0203721477
347-
Lookups Per Second (avg):1669982.860181014
348-
Lookups Per Second (avg):1667252.0583156152
339+
Lookups Per Second (avg):1652482.1728157594
340+
Lookups Per Second (avg):1804678.8566034087
341+
Lookups Per Second (avg):1719533.2374486062
342+
Lookups Per Second (avg):1694836.616690878
343+
Lookups Per Second (avg):1736597.144251784
344+
Lookups Per Second (avg):1755151.149229094
345+
Lookups Per Second (avg):1767479.3964661632
346+
Lookups Per Second (avg):1802208.2468461858
347+
Lookups Per Second (avg):1643340.813272935
348+
Lookups Per Second (avg):1678393.1576825297
349349
```
350350

351351
</details>
@@ -360,16 +360,16 @@ $ for i in $(seq 1 10); do
360360
2>&1 | grep 'Lookups Per Second'
361361
done
362362

363-
Lookups Per Second (avg):1778201.5145052548
364-
Lookups Per Second (avg):1843785.5733650513
365-
Lookups Per Second (avg):1775074.2749654094
366-
Lookups Per Second (avg):1787008.1402384518
367-
Lookups Per Second (avg):1673250.9089935562
368-
Lookups Per Second (avg):1780556.2368656157
369-
Lookups Per Second (avg):1795938.4381684947
370-
Lookups Per Second (avg):1796003.7580157353
371-
Lookups Per Second (avg):1853067.3542248248
372-
Lookups Per Second (avg):1837493.7370404094
363+
Lookups Per Second (avg):4655800.5527301235
364+
Lookups Per Second (avg):4292970.178049822
365+
Lookups Per Second (avg):4623904.14454354
366+
Lookups Per Second (avg):4447315.433629933
367+
Lookups Per Second (avg):4507954.856600761
368+
Lookups Per Second (avg):4311083.472275961
369+
Lookups Per Second (avg):4367167.417000619
370+
Lookups Per Second (avg):4717858.319912245
371+
Lookups Per Second (avg):4063137.087197969
372+
Lookups Per Second (avg):3997879.1251241216
373373
```
374374

375375
</details>
@@ -384,16 +384,16 @@ $ for i in $(seq 1 10); do
384384
2>&1 | grep 'Lookups Per Second'
385385
done
386386

387-
Lookups Per Second (avg):1538491.815980477
388-
Lookups Per Second (avg):1517054.8236260759
389-
Lookups Per Second (avg):1557013.2507370606
390-
Lookups Per Second (avg):1536283.169286917
391-
Lookups Per Second (avg):1493722.1650662713
392-
Lookups Per Second (avg):1422596.100204022
393-
Lookups Per Second (avg):1578921.6062375184
394-
Lookups Per Second (avg):1506038.555716555
395-
Lookups Per Second (avg):1446028.78250593
396-
Lookups Per Second (avg):1517982.1124964976
387+
Lookups Per Second (avg):3574868.3224958642
388+
Lookups Per Second (avg):3712462.9437726922
389+
Lookups Per Second (avg):4215673.875468994
390+
Lookups Per Second (avg):3785552.852435273
391+
Lookups Per Second (avg):4096116.7391959913
392+
Lookups Per Second (avg):3790834.4038207424
393+
Lookups Per Second (avg):4150497.7283101534
394+
Lookups Per Second (avg):3614017.509011327
395+
Lookups Per Second (avg):4065847.0764656705
396+
Lookups Per Second (avg):3743099.2409548718
397397
```
398398

399399
</details>
@@ -415,27 +415,27 @@ $ for i in $(seq 1 10); do
415415
2>&1 | grep 'Lookups Per Second'
416416
done
417417

418-
Lookups Per Second (avg):1349487.9036850187
419-
Lookups Per Second (avg):1474607.7166711385
420-
Lookups Per Second (avg):1450025.6791572636
421-
Lookups Per Second (avg):1393922.5795159582
422-
Lookups Per Second (avg):1445392.2657224636
423-
Lookups Per Second (avg):1434162.4432459075
424-
Lookups Per Second (avg):1445543.9211354603
425-
Lookups Per Second (avg):1444219.8956908425
426-
Lookups Per Second (avg):1419883.9356485484
427-
Lookups Per Second (avg):1417836.1303990977
418+
Lookups Per Second (avg):1372488.367732181
419+
Lookups Per Second (avg):1381428.2973413563
420+
Lookups Per Second (avg):1436810.2525032377
421+
Lookups Per Second (avg):1298657.7295777556
422+
Lookups Per Second (avg):1435992.605534141
423+
Lookups Per Second (avg):1390345.613850623
424+
Lookups Per Second (avg):1481108.8279176715
425+
Lookups Per Second (avg):1429234.491287208
426+
Lookups Per Second (avg):1444525.002072749
427+
Lookups Per Second (avg):1443027.1238867515
428428
---
429-
Lookups Per Second (avg):1465955.9223703041
430-
Lookups Per Second (avg):1555487.9502469338
431-
Lookups Per Second (avg):1535026.522234302
432-
Lookups Per Second (avg):1517282.513153197
433-
Lookups Per Second (avg):1538161.4005770471
434-
Lookups Per Second (avg):1566922.985338839
435-
Lookups Per Second (avg):1568882.0602355888
436-
Lookups Per Second (avg):1536738.9132451336
437-
Lookups Per Second (avg):1549521.6473272059
438-
Lookups Per Second (avg):1448953.6358135713
429+
Lookups Per Second (avg):3711973.1550101433
430+
Lookups Per Second (avg):3450866.4870384834
431+
Lookups Per Second (avg):3503674.1945138867
432+
Lookups Per Second (avg):3561013.662053258
433+
Lookups Per Second (avg):3531490.6660123705
434+
Lookups Per Second (avg):3568312.1477823895
435+
Lookups Per Second (avg):3414696.5486716116
436+
Lookups Per Second (avg):3463143.9870786774
437+
Lookups Per Second (avg):3446752.06486644
438+
Lookups Per Second (avg):3607881.6020832886
439439
```
440440

441441
</details>
@@ -444,12 +444,12 @@ Lookups Per Second (avg):1448953.6358135713
444444

445445
Full GeoLite2-City scan using `any.Value`.
446446

447-
| Optimization | `any.Value` |
448-
|--- |--- |
449-
| Default | ~1,295,000 |
450-
| `.only` | ~1,458,000 |
451-
| `Cache` | ~2,455,000 |
452-
| `Cache` + `.only` | ~3,463,000 |
447+
| Optimization | `any.Value` |
448+
|--- |--- |
449+
| Default | ~1,251,000 |
450+
| `.only` | ~3,985,000 |
451+
| `Cache` | ~2,941,000 |
452+
| `Cache` + `.only` | ~8,684,000 |
453453

454454
<details>
455455

@@ -468,27 +468,27 @@ $ for i in $(seq 1 10); do
468468
2>&1 | grep 'Records Per Second'
469469
done
470470

471-
Records Per Second: 1286608.969567542
472-
Records Per Second: 1295843.0532171922
473-
Records Per Second: 1299430.7275630098
474-
Records Per Second: 1293056.1891340162
475-
Records Per Second: 1297424.4160547797
476-
Records Per Second: 1299599.593210179
477-
Records Per Second: 1296055.3662371547
478-
Records Per Second: 1293770.8917179666
479-
Records Per Second: 1296683.084988625
480-
Records Per Second: 1294042.5025624551
471+
Records Per Second: 1242452.4123182923
472+
Records Per Second: 1243499.0105694628
473+
Records Per Second: 1256255.1086560711
474+
Records Per Second: 1258270.5852588415
475+
Records Per Second: 1258737.4840462913
476+
Records Per Second: 1240246.776441071
477+
Records Per Second: 1254978.5706566381
478+
Records Per Second: 1256865.6957137983
479+
Records Per Second: 1254152.8936018357
480+
Records Per Second: 1243770.9953847837
481481
---
482-
Records Per Second: 1453867.3129307455
483-
Records Per Second: 1461263.840886964
484-
Records Per Second: 1457367.244735448
485-
Records Per Second: 1457043.3486106358
486-
Records Per Second: 1461137.9718384417
487-
Records Per Second: 1458449.0786374495
488-
Records Per Second: 1455565.253714005
489-
Records Per Second: 1460540.094927675
490-
Records Per Second: 1454875.141172453
491-
Records Per Second: 1458530.6343777399
482+
Records Per Second: 4038297.649537256
483+
Records Per Second: 3980863.123692981
484+
Records Per Second: 3987337.158356897
485+
Records Per Second: 3961305.225122879
486+
Records Per Second: 3916544.091235813
487+
Records Per Second: 3976104.5463913656
488+
Records Per Second: 4030883.5208862103
489+
Records Per Second: 3942161.4397791903
490+
Records Per Second: 4013103.2605841225
491+
Records Per Second: 4008183.3987511103
492492
```
493493

494494
</details>
@@ -510,27 +510,27 @@ $ for i in $(seq 1 10); do
510510
2>&1 | grep 'Records Per Second'
511511
done
512512

513-
Records Per Second: 2456181.6827736874
514-
Records Per Second: 2460551.0497955345
515-
Records Per Second: 2464874.3375610826
516-
Records Per Second: 2462940.773846509
517-
Records Per Second: 2448205.1643172107
518-
Records Per Second: 2462645.62772618
519-
Records Per Second: 2448077.631411299
520-
Records Per Second: 2454071.3112366917
521-
Records Per Second: 2441321.7258892707
522-
Records Per Second: 2449213.043913177
513+
Records Per Second: 2854843.2443026598
514+
Records Per Second: 2973037.4280465073
515+
Records Per Second: 2964057.4398981016
516+
Records Per Second: 2965855.6226585647
517+
Records Per Second: 2968159.7253859886
518+
Records Per Second: 2922091.105699196
519+
Records Per Second: 2946091.688041803
520+
Records Per Second: 2954772.8941297107
521+
Records Per Second: 2980153.3473268477
522+
Records Per Second: 2883343.2081189225
523523
---
524-
Records Per Second: 3458689.2169479122
525-
Records Per Second: 3460744.848789136
526-
Records Per Second: 3464104.521198864
527-
Records Per Second: 3470945.186361765
528-
Records Per Second: 3440523.702543425
529-
Records Per Second: 3448881.855919776
530-
Records Per Second: 3461577.9857890424
531-
Records Per Second: 3479900.251019196
532-
Records Per Second: 3472727.724310288
533-
Records Per Second: 3467312.0330495955
524+
Records Per Second: 8357092.292734527
525+
Records Per Second: 8731200.670444885
526+
Records Per Second: 8764048.778310044
527+
Records Per Second: 8708447.640573917
528+
Records Per Second: 8675092.065399949
529+
Records Per Second: 8741972.179699976
530+
Records Per Second: 8711490.068666434
531+
Records Per Second: 8715545.166671745
532+
Records Per Second: 8708163.382388143
533+
Records Per Second: 8722572.467671666
534534
```
535535

536536
</details>

src/decoder.zig

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -56,18 +56,9 @@ pub const Decoder = struct {
5656
pub fn skipValue(self: *Decoder) !void {
5757
const field = try self.decodeFieldSizeAndType();
5858

59-
if (field.type == FieldType.Pointer) {
60-
const next_offset = self.decodePointer(field.size);
61-
const prev_offset = self.offset;
62-
63-
self.offset = next_offset;
64-
try self.skipValue();
65-
self.offset = prev_offset;
66-
67-
return;
68-
}
69-
7059
switch (field.type) {
60+
// Consume the pointer bytes, don't follow to its payload.
61+
.Pointer => _ = self.decodePointer(field.size),
7162
// Bool has no payload, size is encoded in the control byte.
7263
.Bool => {},
7364
// Skip each array element.

0 commit comments

Comments
 (0)