30

31

Un bien bel OS inférieur #modui#

32

33

Pen^2 (./31) :
Un bien bel OS inférieur

Tu m'étonnes, il utilise une statue du sexe de la mémoire dixit la doc embarrassed

34

grin

35

lol
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

36

Zerosquare (./25) :
c'est foireux pour un tas de raisons :- sur un système multitâche, la situation peut avoir changé entre l'appel de la fonction qui donne la taille mémoire restante et la fonction qui alloue de la mémoire
C'est vrai, lorsqu'on est contraint de procéder en deux étapes, comme avec Linux. Mais l'OS connaît l'espace disponible à l'instant où il traite le malloc, car il traite une demande à la fois.
Windows renvoie NULL lorsque la demande dépasse la capacité ? Si oui, pourquoi Linux ne le fait pas ?
- pour satisfaire une allocation mémoire, le système peut libérer de la mémoire précédemment utilisée en swappant ou en virant des pages allouées à des caches
Il doit pouvoir anticiper ce qui sera ainsi libéré.
- la mémoire peut être fragmentée, ce qui fait qu'on ne peut pas forcément allouer autant que prévu (c'est pas trop un problème sur les machines qui gèrent la pagination, mais sur un système ancien ou peu puissant ça peut se produire)
On travaille sur Ubuntu, sur des processeurs plus récents que le 8086.
avatar
Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com.
Quelques idées personnelles ici.

37

Thibaut (./36) :
Windows renvoie NULL lorsque la demande dépasse la capacité ? Si oui, pourquoi Linux ne le fait pas ?
Ça dépend de combien tu dépasses la capacité. La gestion de la mémoire est un sujet complexe, et Windows et Linux n'ont pas fait les mêmes choix de conception (d'autant plus que sous Linux, ça peut varier d'une version de noyau à l'autre).
Thibaut (./36) :
Il sait ce qui sera ainsi libéré.
Il ne peut pas deviner si tu veux savoir la quantité de mémoire à titre indicatif, ou dans l'optique de faire une grosse allocation mémoire. Bien sûr, il pourrait ne pas compter du tout ce qui est potentiellement swappable/libérable, mais ça fausserait complètement les résultats...
Thibaut (./36) :
On travaille sur Ubuntu, sur des processeurs plus récents que le 8086.
Rappelle-toi de quand date UNIX smile
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

38

Voici une remarque du man de malloc :
By default, Linux follows an optimistic memory allocation strategy. This means that when malloc() returns non-NULL there is no guarantee that the memory really is available. This is a really bad bug. In case it turns out that the system is out of memory, one or more processes will be killed by the infamous OOM killer. In case Linux is employed under circumstances where it would be less desirable to suddenly lose some randomly picked processes, and moreover the kernel version is sufficiently recent, one can switch off this overcommitting behavior using a command like

# echo 2 > /proc/sys/vm/overcommit_memory
On dirait qu'il y a une petite guerre entre les concepteurs du noyau et les programmeurs d'applications smile
avatar
Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com.
Quelques idées personnelles ici.

39

Thibaut (./38) :
This means that when malloc() returns non-NULL there is no guarantee that the memory really is available.
?!
=>#trinux#

40

Oui. C'est pour ça que j'avais programmé la fonction dégeu de la page précédente et qui fait partie d'une unité qui redéfinit plusieurs fonctions de manipulation de la mémoire. Beaucoup de gens le font, emmerdés par cette "feature" de Linux (si l'on en croit la quantité de messages qui parlent de ça sur les forums et les listes).
avatar
Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com.
Quelques idées personnelles ici.

41

C'est charmant en tout cas #modtop#

42

L'extrait du manuel explique que ce comportement peut être changé pour correspondre à celui qu'on trouve sur les autres systèmes.
Linux est capable. Il faut accuser les distributions tongue
avatar
Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com.
Quelques idées personnelles ici.

43

Penpen: quand tu fais malloc() et que les pages actuellement allouées à l'implémentation de malloc dans la libc sont épuisées, la libc appelle sbrk() qui augmente la taille du "segment de données" et dit au krenle "crée des entrés dans le manager de VM pour dire que de nouvelles adresses virtuelles sont désormais mappables sur de la mémoire physique si on te demande cette adresse, au lieu de segfaulter comme un con".

et c'est juste au moment ou tu fait *mem = tartempion que ça fait un défaut de page, que ça dit "hmm? ah bah finalement c'était pas du bluff, faut vraiment que je mettre une page de données à cette adresse... ah bah merde j'en ai plus #modtop# ", du coup swap, OOM killer, et toussa.

quelle belle machine, en somme!

PS: du coup du calloc() est plus mieux si tu veux être sûr de ton alloc, vu qu'il initialise tes pages à zéro avant de te les filer (donc il écrit vraiment dedans)

44

Il me semble que là aussi, en cas de manque de mémoire, le programme va se faire tuer. Ca ne change rien au "bug".
avatar
Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com.
Quelques idées personnelles ici.

45

squalyl (./43) :
quelle belle machine, en somme!
#craytop#

46

Thibaut (./45) :
Il me semble que là aussi, en cas de manque de mémoire, le programme va se faire tuer.


Pas très polie cette fonction, elle pourrait renvoyer NULL embarrassed

47

J'ai vérifié vite fait. L'utilisation de calloc ne garantie pas que l'espace réservé sera utilisable. Cette fonction semble avoir un fonctionnement très malin...

Le code suivant alloue 20 Go de mémoire alors que mon ordinateur n'en a que 2.
#include <stdlib.h>
#include <stdio.h>


#define  T (20480)


int main(void) {
    int   i;
    char *P[T];
    
    
    for (i=0 ; i<T ; i++) {
        P[i]= calloc(1024,1024);
        memset(P[i], -1, 1024*1024);
    }
    
    for (i=0 ; i<T ; i++)  free(P[i]);
    
    return (0);
}

L'ordinateur se met rapidement à swaper, l'exécution est très ralentie. J'arrête le programme avant que tout saute.

Lorsqu'on retire le memset, le système ne swape plus et l'exécution est très brève.


Cela semble indiquer que la mémoire n'est réellement allouée que lorsqu'on y accède. Par conséquent, calloc et malloc auraient le même "bug".
avatar
Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com.
Quelques idées personnelles ici.

48

49

Ouai... Ca serait intéressant de savoir pourquoi Ubuntu agit comme ça. J'ai vu des man où la "feature" n'est pas citée, comme si ces distributions avaient la bonne idée d'activer la vérification avant l'allocation.
avatar
Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com.
Quelques idées personnelles ici.

50

51

Je ne sais pas si c'est un bug, ou une feature discutable. J'ai lu quelque part que certaines applis avaient tendance à réserver plein de mémoire et à n'en utiliser qu'une partie (ou du moins qu'une partie à la fois), j'imagine que ça doit être pour supporter ce genre de cas que les distribs ont fait ce choix...
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

52

Sans doute, mais ça fait quand même un peu optimisation bricolage :/

53

#linux# #sifflote#
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

54

Quel mauvais esprit embarrassed

55

c'est vrai, c'est pas parce que c'est linux que ça doit forcément être optimisé...
avatar
Webmaster du site Ti-FRv3 (et aussi de DevLynx)
Si moins de monde enculait le système, alors celui ci aurait plus de mal à nous sortir de si grosses merdes !
"L'erreur humaine est humaine"©Nil (2006) // topics/6238-moved-jamais-jaurais-pense-faire-ca

56

L'argument est compréhensible. Pour des applications courantes, c'est vrai que la réservation abusive de mémoire par une anticipation pessimiste peut être gênante.
Je suis le premier à allouer tout d'un coup et à utiliser la mémoire au fur à mesure des besoins. Mais on sait qu'on a de fortes chances de tout utiliser au bout d'un moment. Tout réserver d'un coup permet de s'assurer que le programme pourra aller jusqu'au bout de son exécution. Dans ce cas (par exemple en recherche opérationnelle), les calculs sont très longs et il serait dommage d'échouer après une longue attente alors que c'était prévisible.
avatar
Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com.
Quelques idées personnelles ici.

57

Sauf que là, non tongue
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

58

Pour mettre tout le monde d'accord, on pourrait imaginer une fonction système pour activer la vérification et l'allocation effective. Elle serait appelée par le programme en début d'exécution. Par défaut, on garde la "feature", pour les programmes qui réservent abusivement (ça peut se comprendre, ça facilite la gestion de leur espace en la délégant au système).
avatar
Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com.
Quelques idées personnelles ici.

59

Fais une suggestion sur LKML ? cheeky

Attention : je décline toute responsabilité en cas de flammage en règle suite à ce conseil.
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

60

Ils l'auraient fait si c'était possible !
avatar
Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com.
Quelques idées personnelles ici.