est ici un problème d'optimisation intéressante que je pense depuis quelques jours:Adaptive IO Optimization problème
Dans un système que je lis les données d'un périphérique IO lente. Je ne sais pas à l'avance combien de données j'ai besoin. La longueur exacte n'est connue qu'une fois que j'ai lu un paquet entier (pensez-y car il a une sorte de symbole de fin). Lire plus de données que nécessaire n'est pas un problème, sauf qu'il perd du temps dans IO.
Deux contraintes entrent également en jeu: Les lectures sont très lent. Chaque octet que je lis coûte. Chaque requête de lecture a également un coût d'installation constant quel que soit le nombre d'octets lus. Cela rend l'octet de lecture par octet coûteux. En règle générale, les coûts d'installation sont à peu près aussi élevés que 5 octets.
Les paquets que je lis sont généralement entre 9 et 64 octets, mais il y a des occurrences rares des paquets plus grands ou plus petits. Toute la gamme sera entre 1 à 120 octets.
Bien sûr, je connais un peu mes données: Les paquets viennent en séquences de tailles identiques. Je peux classer trois modèles ici:
Sequences de lit avec des tailles identiques:
A A A A A ...
séquences Alternance:
A B A B A B A B ...
et des séquences de triplets:
A B C A B C A B C ...
Le cas particulier des triplets dégénérés existent aussi:
A A B A A B A A B ...
(A, B et C désignent une taille d'emballage comprise entre 1 et 120 ici).
Question:
Sur la base de la taille des paquets précédents, comment puis-je prédire la taille de la prochaine demande de lecture? J'ai besoin de quelque chose qui s'adapte rapidement, qui utilise peu de mémoire (disons moins de 500 octets) et qui soit rapide d'un point de vue calculatoire.
Oh - et la pré-génération de certaines tables ne fonctionnera pas parce que la statistique des tailles de lecture peut varier beaucoup avec différents périphériques que je lis.
Des idées?
1) Oui, possible et déjà fait. Cependant, la lecture est le principal goulot d'étranglement dans l'application. 2) Oui, mais pas beaucoup, un kilo-octet tout au plus. 3) Non, je ne peux pas jeter un coup d'œil au premier octet. Si je lis N octets cela prendra du temps. –