Rémi Moyen wrote:Oui enfin le problème du swap, c'est que je peux allouer la mémoire
par blocs de 1 Go ou 2. Dans ce cas, le temps de swapper assez pour me
faire de la place dans la RAM n'est pas négligeable et si je fais
cette opération pour rien (i.e. qu'à la fin de mon allocation de 1 Go
je me rends compte que je ne peux récupérer que 900 Mo et que mon t ruc
échoue), j'ai un peu gâché plein de temps.
Mais ce n'est pas parceque le noyau t'alloue 1 Go qu'il se dépêche de
swapper pour que tu puisses bénéficier de 1 Go en mémoire physique. En
fait il t'alloue 1 Go de mémoire *virtuelle* et c'est uniquement au
moment de s'en servir, page par page, qu'il va swapper des choses pour
faire de la place. Peut être qu'il n'aura même pas besoin de swapper du
tout parceque d'autres pages seront devenues naturellement libres, et
donc réutilisables directement sans avoir besoin de les copier en swap.
Donc j'ai l'impression que le problème que tu te poses est un faux
problème.
D'où ma question initiale. Je voudrais juste être sûr que quand le
noyau commence à swapper des trucs, il ne le fait pas pour rien. Donc
Mais ce n'est pas toi qui gère ça, ni qui doit le gérer, c'est le n oyau
qui le fait en fonction de la connaissance qu'il a de l'ensemble des
requêtes au système de mémoire virtuelle. Depuis très longtemps s ous
FreeBSD et plus récemment sous Linux, il maintient des statistiques sur
l'utilisation des pages, et swappe les moins utilisées. Donc tu devrais
pouvoir compter sur le noyau pour résoudre optimalement ton problème
d'allocation de mémoire sans que tu ais à y penser en quoi que ce soi t.
Toute mesure que tu prendrais pour améliorer les choses risque de les
rendre pire, parceque dans ton raisonnement tu négliges complètement les
requêtes des autres processus.
La bonne technique est d'avoir du swap
en surabondance pour éviter le problème à tout prix, et en second, de
dimensionner la ram pour que le système ne se mette à swapper que
rarement. Tu connais la taille maximale de ton programme, il te suffit
d'avoir un peu plus de ram (il faut penser aux autres programmes) et
le problème est résolu.
Rémi Moyen <rmo...@gmail.com> wrote:
Oui enfin le problème du swap, c'est que je peux allouer la mémoire
par blocs de 1 Go ou 2. Dans ce cas, le temps de swapper assez pour me
faire de la place dans la RAM n'est pas négligeable et si je fais
cette opération pour rien (i.e. qu'à la fin de mon allocation de 1 Go
je me rends compte que je ne peux récupérer que 900 Mo et que mon t ruc
échoue), j'ai un peu gâché plein de temps.
Mais ce n'est pas parceque le noyau t'alloue 1 Go qu'il se dépêche de
swapper pour que tu puisses bénéficier de 1 Go en mémoire physique. En
fait il t'alloue 1 Go de mémoire *virtuelle* et c'est uniquement au
moment de s'en servir, page par page, qu'il va swapper des choses pour
faire de la place. Peut être qu'il n'aura même pas besoin de swapper du
tout parceque d'autres pages seront devenues naturellement libres, et
donc réutilisables directement sans avoir besoin de les copier en swap.
Donc j'ai l'impression que le problème que tu te poses est un faux
problème.
D'où ma question initiale. Je voudrais juste être sûr que quand le
noyau commence à swapper des trucs, il ne le fait pas pour rien. Donc
Mais ce n'est pas toi qui gère ça, ni qui doit le gérer, c'est le n oyau
qui le fait en fonction de la connaissance qu'il a de l'ensemble des
requêtes au système de mémoire virtuelle. Depuis très longtemps s ous
FreeBSD et plus récemment sous Linux, il maintient des statistiques sur
l'utilisation des pages, et swappe les moins utilisées. Donc tu devrais
pouvoir compter sur le noyau pour résoudre optimalement ton problème
d'allocation de mémoire sans que tu ais à y penser en quoi que ce soi t.
Toute mesure que tu prendrais pour améliorer les choses risque de les
rendre pire, parceque dans ton raisonnement tu négliges complètement les
requêtes des autres processus.
La bonne technique est d'avoir du swap
en surabondance pour éviter le problème à tout prix, et en second, de
dimensionner la ram pour que le système ne se mette à swapper que
rarement. Tu connais la taille maximale de ton programme, il te suffit
d'avoir un peu plus de ram (il faut penser aux autres programmes) et
le problème est résolu.
Rémi Moyen wrote:Oui enfin le problème du swap, c'est que je peux allouer la mémoire
par blocs de 1 Go ou 2. Dans ce cas, le temps de swapper assez pour me
faire de la place dans la RAM n'est pas négligeable et si je fais
cette opération pour rien (i.e. qu'à la fin de mon allocation de 1 Go
je me rends compte que je ne peux récupérer que 900 Mo et que mon t ruc
échoue), j'ai un peu gâché plein de temps.
Mais ce n'est pas parceque le noyau t'alloue 1 Go qu'il se dépêche de
swapper pour que tu puisses bénéficier de 1 Go en mémoire physique. En
fait il t'alloue 1 Go de mémoire *virtuelle* et c'est uniquement au
moment de s'en servir, page par page, qu'il va swapper des choses pour
faire de la place. Peut être qu'il n'aura même pas besoin de swapper du
tout parceque d'autres pages seront devenues naturellement libres, et
donc réutilisables directement sans avoir besoin de les copier en swap.
Donc j'ai l'impression que le problème que tu te poses est un faux
problème.
D'où ma question initiale. Je voudrais juste être sûr que quand le
noyau commence à swapper des trucs, il ne le fait pas pour rien. Donc
Mais ce n'est pas toi qui gère ça, ni qui doit le gérer, c'est le n oyau
qui le fait en fonction de la connaissance qu'il a de l'ensemble des
requêtes au système de mémoire virtuelle. Depuis très longtemps s ous
FreeBSD et plus récemment sous Linux, il maintient des statistiques sur
l'utilisation des pages, et swappe les moins utilisées. Donc tu devrais
pouvoir compter sur le noyau pour résoudre optimalement ton problème
d'allocation de mémoire sans que tu ais à y penser en quoi que ce soi t.
Toute mesure que tu prendrais pour améliorer les choses risque de les
rendre pire, parceque dans ton raisonnement tu négliges complètement les
requêtes des autres processus.
La bonne technique est d'avoir du swap
en surabondance pour éviter le problème à tout prix, et en second, de
dimensionner la ram pour que le système ne se mette à swapper que
rarement. Tu connais la taille maximale de ton programme, il te suffit
d'avoir un peu plus de ram (il faut penser aux autres programmes) et
le problème est résolu.
Peut-être, mais je n'ai pas l'impression :-)
Supposons que mon système a 2 Go de RAM et 4 Go de swap. À un instant
donné, y'a disons 3 Go sur le swap et toute la RAM d'occuppée. Je
demande au système 2 Go. Il va me dire "ok", parce qu'il ne réserve
rien à cet instant. Seulement dans mon cas, mes 2 Go, c'est un tableau
que je remplis immédiatement avec des valeurs. Donc je commence à
écrire, page par page, et (en supposant qu'aucun autre process ne
libère de mémoire par ailleurs) après avoir swappé 1 Go de RAM dans le
swap (enfin, y'a probablement des pages qui ne peuvent pas y passer,
mais peu importe), le système va voir que tout est plein et échouer.
Au choix, il tuera des trucs au hasard ou me retournera une erreur,
peu importe pour l'exemple. Ce qui compte, c'est qu'il n'échouera
qu'après avoir passé plein de temps à bouger des trucs dans le swap.
Si dès le début il me disait "attention, là à l'instant présent j'ai
pas assez de place, mais peut-être que ça ira mieux plus tard", ça me
permettrait de ne pas essayer de remplir mon tableau et de remonter
une erreur à l'utilisateur. Bien sûr, je comprends bien que pendant
que je remplis mon tableau quelqu'un peut faire de la place ailleurs,
mais c'est assez peu probable que dans ce délai je gagne le Go qui
manque (je sais plus ou moins ce qui tourne sur ma machine et le
contexte d'utilisation).
Donc dans ce cas, j'aimerais avoir un moyen de voir avant d'allouer ma
mémoire si c'est complétement irréaliste ou si y'a une chance que ça
passe. La seule méthode que je voie, c'est d'aller compter à la main
free + cache + free swap avant chaque new() (en fait, y'a que quelques
cas où j'alloue des si gros blocs que j'utilise immédiatement, donc je
peux me contenter de surveiller ces cas-là) et de comparer ça à la
taille que je veux allouer pour éviter d'en demander trop si je sais,
de manière évidente, que ça ne passera pas. Je me trompe ?
Mais dans ce cas, je *sais* que mon programme va être le seul à
allouer/désallouer des blocs de mémoire de taille importante à ce
moment. Est-ce que ça n'est pas quand même utile d'essayer d'optimiser
un peu les choses pour éviter des écritures dont je suis certain
qu'elles vont droit dans le mur ? Je veux bien que, dans l'absolu,
l'OS sait mieux que moi ce qu'il faut faire, mais dans ce cas présent,
si l'OS me dit "oui mais dans 3 minutes tu auras peut-être ton Go
manquant", je peux lui répondre "bullshit !" tout de suite. Alors... ?
Et je fais comment si mon utilisateur a sous la main des jeux de
données d'une dizaine de Go et qu'il peut très bien décider d'en
charger l'un ou l'autre morceau à n'importe quel moment ? Je vais
avoir du mal à mettre 10 Go de RAM sur ma machine (d'autant plus que
ce jour-là, il aura un jeu de données de 11 Go, ou 20, ou plus). Il
faut d'une manière ou d'une autre que je limite ce qu'il peut charger.
Moi, j'espérais naïvement laisser le système faire le boulot et
récupérer les exceptions lancées par new() pour fixer la limite. Là,
je me rends compte qu'il va falloir que j'ajoute à la main un
méchanisme de contrôle à côté.
Peut-être, mais je n'ai pas l'impression :-)
Supposons que mon système a 2 Go de RAM et 4 Go de swap. À un instant
donné, y'a disons 3 Go sur le swap et toute la RAM d'occuppée. Je
demande au système 2 Go. Il va me dire "ok", parce qu'il ne réserve
rien à cet instant. Seulement dans mon cas, mes 2 Go, c'est un tableau
que je remplis immédiatement avec des valeurs. Donc je commence à
écrire, page par page, et (en supposant qu'aucun autre process ne
libère de mémoire par ailleurs) après avoir swappé 1 Go de RAM dans le
swap (enfin, y'a probablement des pages qui ne peuvent pas y passer,
mais peu importe), le système va voir que tout est plein et échouer.
Au choix, il tuera des trucs au hasard ou me retournera une erreur,
peu importe pour l'exemple. Ce qui compte, c'est qu'il n'échouera
qu'après avoir passé plein de temps à bouger des trucs dans le swap.
Si dès le début il me disait "attention, là à l'instant présent j'ai
pas assez de place, mais peut-être que ça ira mieux plus tard", ça me
permettrait de ne pas essayer de remplir mon tableau et de remonter
une erreur à l'utilisateur. Bien sûr, je comprends bien que pendant
que je remplis mon tableau quelqu'un peut faire de la place ailleurs,
mais c'est assez peu probable que dans ce délai je gagne le Go qui
manque (je sais plus ou moins ce qui tourne sur ma machine et le
contexte d'utilisation).
Donc dans ce cas, j'aimerais avoir un moyen de voir avant d'allouer ma
mémoire si c'est complétement irréaliste ou si y'a une chance que ça
passe. La seule méthode que je voie, c'est d'aller compter à la main
free + cache + free swap avant chaque new() (en fait, y'a que quelques
cas où j'alloue des si gros blocs que j'utilise immédiatement, donc je
peux me contenter de surveiller ces cas-là) et de comparer ça à la
taille que je veux allouer pour éviter d'en demander trop si je sais,
de manière évidente, que ça ne passera pas. Je me trompe ?
Mais dans ce cas, je *sais* que mon programme va être le seul à
allouer/désallouer des blocs de mémoire de taille importante à ce
moment. Est-ce que ça n'est pas quand même utile d'essayer d'optimiser
un peu les choses pour éviter des écritures dont je suis certain
qu'elles vont droit dans le mur ? Je veux bien que, dans l'absolu,
l'OS sait mieux que moi ce qu'il faut faire, mais dans ce cas présent,
si l'OS me dit "oui mais dans 3 minutes tu auras peut-être ton Go
manquant", je peux lui répondre "bullshit !" tout de suite. Alors... ?
Et je fais comment si mon utilisateur a sous la main des jeux de
données d'une dizaine de Go et qu'il peut très bien décider d'en
charger l'un ou l'autre morceau à n'importe quel moment ? Je vais
avoir du mal à mettre 10 Go de RAM sur ma machine (d'autant plus que
ce jour-là, il aura un jeu de données de 11 Go, ou 20, ou plus). Il
faut d'une manière ou d'une autre que je limite ce qu'il peut charger.
Moi, j'espérais naïvement laisser le système faire le boulot et
récupérer les exceptions lancées par new() pour fixer la limite. Là,
je me rends compte qu'il va falloir que j'ajoute à la main un
méchanisme de contrôle à côté.
Peut-être, mais je n'ai pas l'impression :-)
Supposons que mon système a 2 Go de RAM et 4 Go de swap. À un instant
donné, y'a disons 3 Go sur le swap et toute la RAM d'occuppée. Je
demande au système 2 Go. Il va me dire "ok", parce qu'il ne réserve
rien à cet instant. Seulement dans mon cas, mes 2 Go, c'est un tableau
que je remplis immédiatement avec des valeurs. Donc je commence à
écrire, page par page, et (en supposant qu'aucun autre process ne
libère de mémoire par ailleurs) après avoir swappé 1 Go de RAM dans le
swap (enfin, y'a probablement des pages qui ne peuvent pas y passer,
mais peu importe), le système va voir que tout est plein et échouer.
Au choix, il tuera des trucs au hasard ou me retournera une erreur,
peu importe pour l'exemple. Ce qui compte, c'est qu'il n'échouera
qu'après avoir passé plein de temps à bouger des trucs dans le swap.
Si dès le début il me disait "attention, là à l'instant présent j'ai
pas assez de place, mais peut-être que ça ira mieux plus tard", ça me
permettrait de ne pas essayer de remplir mon tableau et de remonter
une erreur à l'utilisateur. Bien sûr, je comprends bien que pendant
que je remplis mon tableau quelqu'un peut faire de la place ailleurs,
mais c'est assez peu probable que dans ce délai je gagne le Go qui
manque (je sais plus ou moins ce qui tourne sur ma machine et le
contexte d'utilisation).
Donc dans ce cas, j'aimerais avoir un moyen de voir avant d'allouer ma
mémoire si c'est complétement irréaliste ou si y'a une chance que ça
passe. La seule méthode que je voie, c'est d'aller compter à la main
free + cache + free swap avant chaque new() (en fait, y'a que quelques
cas où j'alloue des si gros blocs que j'utilise immédiatement, donc je
peux me contenter de surveiller ces cas-là) et de comparer ça à la
taille que je veux allouer pour éviter d'en demander trop si je sais,
de manière évidente, que ça ne passera pas. Je me trompe ?
Mais dans ce cas, je *sais* que mon programme va être le seul à
allouer/désallouer des blocs de mémoire de taille importante à ce
moment. Est-ce que ça n'est pas quand même utile d'essayer d'optimiser
un peu les choses pour éviter des écritures dont je suis certain
qu'elles vont droit dans le mur ? Je veux bien que, dans l'absolu,
l'OS sait mieux que moi ce qu'il faut faire, mais dans ce cas présent,
si l'OS me dit "oui mais dans 3 minutes tu auras peut-être ton Go
manquant", je peux lui répondre "bullshit !" tout de suite. Alors... ?
Et je fais comment si mon utilisateur a sous la main des jeux de
données d'une dizaine de Go et qu'il peut très bien décider d'en
charger l'un ou l'autre morceau à n'importe quel moment ? Je vais
avoir du mal à mettre 10 Go de RAM sur ma machine (d'autant plus que
ce jour-là, il aura un jeu de données de 11 Go, ou 20, ou plus). Il
faut d'une manière ou d'une autre que je limite ce qu'il peut charger.
Moi, j'espérais naïvement laisser le système faire le boulot et
récupérer les exceptions lancées par new() pour fixer la limite. Là,
je me rends compte qu'il va falloir que j'ajoute à la main un
méchanisme de contrôle à côté.
Mais dans ce cas, je *sais* que mon programme va être le seul à
allouer/désallouer des blocs de mémoire de taille importante à ce
moment. Est-ce que ça n'est pas quand même utile d'essayer d'optimiser
un peu les choses pour éviter des écritures dont je suis certain
qu'elles vont droit dans le mur ? Je veux bien que, dans l'absolu,
l'OS sait mieux que moi ce qu'il faut faire, mais dans ce cas présent,
si l'OS me dit "oui mais dans 3 minutes tu auras peut-être ton Go
manquant", je peux lui répondre "bullshit !" tout de suite. Alors... ?
Si tu sais que ton programme va être seul, tu dois aussi savoir
combien de mémoire tu as dans ton ordinateur et donc combien tu peux
allouer...
Et je fais comment si mon utilisateur a sous la main des jeux de
données d'une dizaine de Go et qu'il peut très bien décider d'en
charger l'un ou l'autre morceau à n'importe quel moment ? Je vais
avoir du mal à mettre 10 Go de RAM sur ma machine (d'autant plus que
ce jour-là, il aura un jeu de données de 11 Go, ou 20, ou plus). Il
faut d'une manière ou d'une autre que je limite ce qu'il peut charger.
Moi, j'espérais naïvement laisser le système faire le boulot et
récupérer les exceptions lancées par new() pour fixer la limite. Là,
je me rends compte qu'il va falloir que j'ajoute à la main un
méchanisme de contrôle à côté.
En effet. Si tu as des données à traiter en si grande quantité,
comparé à la taille de la mémoire, il faut en revenir aux anciennes
technique de travail avec des fichiers externes. Tu alloue un espace
de travail en RAM qui dépend de la taille de la mémoire disponible, et
tu ne charge dans cet espace de travail que des morceaux des données à
traiter.
Mais dans ce cas, je *sais* que mon programme va être le seul à
allouer/désallouer des blocs de mémoire de taille importante à ce
moment. Est-ce que ça n'est pas quand même utile d'essayer d'optimiser
un peu les choses pour éviter des écritures dont je suis certain
qu'elles vont droit dans le mur ? Je veux bien que, dans l'absolu,
l'OS sait mieux que moi ce qu'il faut faire, mais dans ce cas présent,
si l'OS me dit "oui mais dans 3 minutes tu auras peut-être ton Go
manquant", je peux lui répondre "bullshit !" tout de suite. Alors... ?
Si tu sais que ton programme va être seul, tu dois aussi savoir
combien de mémoire tu as dans ton ordinateur et donc combien tu peux
allouer...
Et je fais comment si mon utilisateur a sous la main des jeux de
données d'une dizaine de Go et qu'il peut très bien décider d'en
charger l'un ou l'autre morceau à n'importe quel moment ? Je vais
avoir du mal à mettre 10 Go de RAM sur ma machine (d'autant plus que
ce jour-là, il aura un jeu de données de 11 Go, ou 20, ou plus). Il
faut d'une manière ou d'une autre que je limite ce qu'il peut charger.
Moi, j'espérais naïvement laisser le système faire le boulot et
récupérer les exceptions lancées par new() pour fixer la limite. Là,
je me rends compte qu'il va falloir que j'ajoute à la main un
méchanisme de contrôle à côté.
En effet. Si tu as des données à traiter en si grande quantité,
comparé à la taille de la mémoire, il faut en revenir aux anciennes
technique de travail avec des fichiers externes. Tu alloue un espace
de travail en RAM qui dépend de la taille de la mémoire disponible, et
tu ne charge dans cet espace de travail que des morceaux des données à
traiter.
Mais dans ce cas, je *sais* que mon programme va être le seul à
allouer/désallouer des blocs de mémoire de taille importante à ce
moment. Est-ce que ça n'est pas quand même utile d'essayer d'optimiser
un peu les choses pour éviter des écritures dont je suis certain
qu'elles vont droit dans le mur ? Je veux bien que, dans l'absolu,
l'OS sait mieux que moi ce qu'il faut faire, mais dans ce cas présent,
si l'OS me dit "oui mais dans 3 minutes tu auras peut-être ton Go
manquant", je peux lui répondre "bullshit !" tout de suite. Alors... ?
Si tu sais que ton programme va être seul, tu dois aussi savoir
combien de mémoire tu as dans ton ordinateur et donc combien tu peux
allouer...
Et je fais comment si mon utilisateur a sous la main des jeux de
données d'une dizaine de Go et qu'il peut très bien décider d'en
charger l'un ou l'autre morceau à n'importe quel moment ? Je vais
avoir du mal à mettre 10 Go de RAM sur ma machine (d'autant plus que
ce jour-là, il aura un jeu de données de 11 Go, ou 20, ou plus). Il
faut d'une manière ou d'une autre que je limite ce qu'il peut charger.
Moi, j'espérais naïvement laisser le système faire le boulot et
récupérer les exceptions lancées par new() pour fixer la limite. Là,
je me rends compte qu'il va falloir que j'ajoute à la main un
méchanisme de contrôle à côté.
En effet. Si tu as des données à traiter en si grande quantité,
comparé à la taille de la mémoire, il faut en revenir aux anciennes
technique de travail avec des fichiers externes. Tu alloue un espace
de travail en RAM qui dépend de la taille de la mémoire disponible, et
tu ne charge dans cet espace de travail que des morceaux des données à
traiter.
faire. Je suis censé hausser des épaules et dire "c'est normal", ou
y'a une stratégie propre pour éviter ça ???
--
Rémi Moyen
faire. Je suis censé hausser des épaules et dire "c'est normal", ou
y'a une stratégie propre pour éviter ça ???
--
Rémi Moyen
faire. Je suis censé hausser des épaules et dire "c'est normal", ou
y'a une stratégie propre pour éviter ça ???
--
Rémi Moyen
La question, c'est comment se comporte new()? Comment est elle
implémentée?
Je sais pas... c'est aussi la question que je me pose (et que je pose
aux gens ici...) !
La question, c'est comment se comporte new()? Comment est elle
implémentée?
Je sais pas... c'est aussi la question que je me pose (et que je pose
aux gens ici...) !
La question, c'est comment se comporte new()? Comment est elle
implémentée?
Je sais pas... c'est aussi la question que je me pose (et que je pose
aux gens ici...) !
Michel Talon wrote in message <er422f$1o3h$:C'est le fameux problème de l'"overcommit".
Pas seulement.
Il y a deux niveaux :
- La noyau sait combien de mémoire virtuelle il lui reste, et si un
processus demande trop de mémoire, il lui répond non.
- Le noyau ne choisit pas immédiatement la mémoire qu'il attribue au
processus, il se contente de noter la quantité dans ses tables. Les pages
ne sont effectivement allouées que quand le processus y accède.
L'overcommit joue entre ces deux effets : si un processus demande beaucoup
mais utilise peu, alors les pages en rab peuvent être disponibles pour
d'autres processus.banquiers qui prêtent de l'argent qu'ils n'ont pas
Légalement, les banquiers créent l'argent qu'ils prêtent.
Michel Talon wrote in message <er422f$1o3h$4@asmodee.lpthe.jussieu.fr>:
C'est le fameux problème de l'"overcommit".
Pas seulement.
Il y a deux niveaux :
- La noyau sait combien de mémoire virtuelle il lui reste, et si un
processus demande trop de mémoire, il lui répond non.
- Le noyau ne choisit pas immédiatement la mémoire qu'il attribue au
processus, il se contente de noter la quantité dans ses tables. Les pages
ne sont effectivement allouées que quand le processus y accède.
L'overcommit joue entre ces deux effets : si un processus demande beaucoup
mais utilise peu, alors les pages en rab peuvent être disponibles pour
d'autres processus.
banquiers qui prêtent de l'argent qu'ils n'ont pas
Légalement, les banquiers créent l'argent qu'ils prêtent.
Michel Talon wrote in message <er422f$1o3h$:C'est le fameux problème de l'"overcommit".
Pas seulement.
Il y a deux niveaux :
- La noyau sait combien de mémoire virtuelle il lui reste, et si un
processus demande trop de mémoire, il lui répond non.
- Le noyau ne choisit pas immédiatement la mémoire qu'il attribue au
processus, il se contente de noter la quantité dans ses tables. Les pages
ne sont effectivement allouées que quand le processus y accède.
L'overcommit joue entre ces deux effets : si un processus demande beaucoup
mais utilise peu, alors les pages en rab peuvent être disponibles pour
d'autres processus.banquiers qui prêtent de l'argent qu'ils n'ont pas
Légalement, les banquiers créent l'argent qu'ils prêtent.
Les banquiers ne tuent pas arbitrairement certains clients à qui ils
doivent de l'argent,
contrairement à Linux et son "out of memory killer"
http://lwn.net/Articles/104179/ .
Je préfère rester sous Solaris.
Les banquiers ne tuent pas arbitrairement certains clients à qui ils
doivent de l'argent,
contrairement à Linux et son "out of memory killer"
http://lwn.net/Articles/104179/ .
Je préfère rester sous Solaris.
Les banquiers ne tuent pas arbitrairement certains clients à qui ils
doivent de l'argent,
contrairement à Linux et son "out of memory killer"
http://lwn.net/Articles/104179/ .
Je préfère rester sous Solaris.
Jean-Louis Liagre wrote in message
<45d6dda7$0$20038$:Les banquiers ne tuent pas arbitrairement certains clients à qui ils
doivent de l'argent,
Mais Linux n'est pas capable de créer de la mémoire.
contrairement à Linux et son "out of memory killer"
http://lwn.net/Articles/104179/ .
Je préfère rester sous Solaris.
Tu ferais surtout bien d'apprendre à lire la doc, ainsi que les articles que
tu cites.
« Simply setting the sysctl parameter vm/overcommit_memory to 2 turns off
the overcommit behavior and keeps the OOM killer forever at bay. »
Jean-Louis Liagre wrote in message
<45d6dda7$0$20038$426a34cc@news.free.fr>:
Les banquiers ne tuent pas arbitrairement certains clients à qui ils
doivent de l'argent,
Mais Linux n'est pas capable de créer de la mémoire.
contrairement à Linux et son "out of memory killer"
http://lwn.net/Articles/104179/ .
Je préfère rester sous Solaris.
Tu ferais surtout bien d'apprendre à lire la doc, ainsi que les articles que
tu cites.
« Simply setting the sysctl parameter vm/overcommit_memory to 2 turns off
the overcommit behavior and keeps the OOM killer forever at bay. »
Jean-Louis Liagre wrote in message
<45d6dda7$0$20038$:Les banquiers ne tuent pas arbitrairement certains clients à qui ils
doivent de l'argent,
Mais Linux n'est pas capable de créer de la mémoire.
contrairement à Linux et son "out of memory killer"
http://lwn.net/Articles/104179/ .
Je préfère rester sous Solaris.
Tu ferais surtout bien d'apprendre à lire la doc, ainsi que les articles que
tu cites.
« Simply setting the sysctl parameter vm/overcommit_memory to 2 turns off
the overcommit behavior and keeps the OOM killer forever at bay. »
Dans la limite de l'espace disque disponible si. (swapon, swap -a ou
équivalent).
J'ai aussi lu:
http://developers.sun.com/solaris/articles/subprocess/subprocess.html
On y apprend que sous Linux, même quand l'overcommit est désactivé, il y
est quand même (!),
Dans la limite de l'espace disque disponible si. (swapon, swap -a ou
équivalent).
J'ai aussi lu:
http://developers.sun.com/solaris/articles/subprocess/subprocess.html
On y apprend que sous Linux, même quand l'overcommit est désactivé, il y
est quand même (!),
Dans la limite de l'espace disque disponible si. (swapon, swap -a ou
équivalent).
J'ai aussi lu:
http://developers.sun.com/solaris/articles/subprocess/subprocess.html
On y apprend que sous Linux, même quand l'overcommit est désactivé, il y
est quand même (!),
Jean-Louis Liagre wrote in message
<45d6e2dc$0$3702$:Dans la limite de l'espace disque disponible si. (swapon, swap -a ou
équivalent).
Ce n'est pas créer, ça.J'ai aussi lu:
http://developers.sun.com/solaris/articles/subprocess/subprocess.html
On y apprend que sous Linux, même quand l'overcommit est désactivé, il y
est quand même (!),
On y apprend surtout que Greg Nakhimovsky ne lit pas bien les docs.
Jean-Louis Liagre wrote in message
<45d6e2dc$0$3702$426a74cc@news.free.fr>:
Dans la limite de l'espace disque disponible si. (swapon, swap -a ou
équivalent).
Ce n'est pas créer, ça.
J'ai aussi lu:
http://developers.sun.com/solaris/articles/subprocess/subprocess.html
On y apprend que sous Linux, même quand l'overcommit est désactivé, il y
est quand même (!),
On y apprend surtout que Greg Nakhimovsky ne lit pas bien les docs.
Jean-Louis Liagre wrote in message
<45d6e2dc$0$3702$:Dans la limite de l'espace disque disponible si. (swapon, swap -a ou
équivalent).
Ce n'est pas créer, ça.J'ai aussi lu:
http://developers.sun.com/solaris/articles/subprocess/subprocess.html
On y apprend que sous Linux, même quand l'overcommit est désactivé, il y
est quand même (!),
On y apprend surtout que Greg Nakhimovsky ne lit pas bien les docs.