Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - pedromigl010

#1
Hola amigos de elhacker, soy nuevo en el mundo de servidores,mi pregunta va hacer un poco amplia, pero bueno les cuento mi situación es la siguiente si poseo 5 servidores, digamos 3  de un modelo con las siguientes características:

1. Procesador: E5-2650v3 x 2
    Núcleos: 10
    Frecuencia:2.30Ghz-3 Ghz
    Cache: 20 Mb Velocidad del Bus: 9.6 GT/s QPI, Tamaño máximo de memoria: 768 GB
2. Memoria ram: 64 GB (8 GBx 8)
3. Disco duro: 600 GB x 8

arrojando un total de:
CPU:
60 Núcleos
RAM:
192 GB
HDD:
14.4 TB

y los otros 2 servidores cuentan con las siguientes características:

1. Procesador: Intel Xeon E3-1220V3
    Núcleos: 4,  3.10 Ghz-3.50 Ghz, Cache: 8 MB, Velocidad del Bus: 5 GT/s DMI, Tamaño máximo           de memoria: 32 GB

2. Memoria Ram: 16 GB (8 GBx 2)
3. Disco duro: 500 GBx 2

arrojando un total de:
CPU:
8 Núcleos
RAM:
32 GB
HDD:
2 TB

Ustedes me corregirán si me equivoque en los cálculos.

y una conexión dedicada para cada uno de 1 Gb.

Que tipo de servicios inicialmente puedo ofrecer a clientes como empresa que ofrece servicios de centro de datos. Lo primero que tengo en cuenta es que al poseer una capacidad pequeña en cuanto al número de servidores,  lo  mas que puedo brindar son servicios hosting y VPS. Para este último (VPS) supongo que puedo ofrecer el servicio para pocos usuarios.

Digamos que destino los primeros tres servidores para emplear VPS, partiendo de esa idea, cuantas maquinas virtuales puedo configurar por servidor?, eso por un lado, por el otro indico que por ahí leí, que lo recomendable para prestar servicio VPS, el nivel mínimo es de 2 GB de ram por núcleo del procesador y el nivel óptimo es de 4 Gb de ram por cada núcleo del procesador, ya que la demanda de recursos de ram es elevada cuando se utilizan maquinas virutales, es esto cierto? si es asi poseo un total de:

Primeros tres servidores:
CPU:
60 Núcleos
RAM:
192 GB
HDD:
14.4 TB

Lo cual me indica que entra dentro de los parametros minimos GB de ram que son 120 GB en mi caso, ya que 60 núcleos por 2 GB de ram es igual a los 120 GB indicados anteriormente. Ahora si realizo el calculo por los 4 GB tengo un déficit, ya que requiero de 240 GB de ram y poseo son 192 GB.

A que voy con todo esto? si quiero prestar un servicio de calidad a mis clientes debo apuntar a cumplir con esta condición es decir 4 GB por núcleo.

En resumen como una primera respuesta me gustaría que me guiaran con lo siguiente:

1. Según mis capacidades cuantas maquinas virtuales puedo crear según características de los primeros tres servidores.
2. Para prestar un servicio de calidad debo implementar la sugerencia que indican algunos expertos de tener 4GB para cada núcleo de procesador.
3. Para las dos últimos servidores tengo pensado dedicarlos para ofrecer servicios hosting, cuantos clientes puedo albergar de acuerdo a las caracteristicas de estos últimos?
4. Que distribución de linux (ya que requiero implementar esto en software libre) me recomiendan para implementar en el pequeño centro de datos? por ahí ley que las mejores son debian server o redhat cluster.
5. Que aplicativo de balanceo de cargar me recomiendan, para optimizar el rendimiento del centro de datos.

Gracias de antemano por sus respuestas, compañeros
#2
Ya vi el problema que tengo, el mismo se asocia al bucle while(1) que tengo, ya que prácticamente al estar conectado a un puerto serial es infinito, constantemente esta leyendo por eso se guinda. Lo digo porque cuando coloco una condición para el cierre del mismo el programa corre sin ningún problema pero pierdo continuidad en la secuencia de los datos. Como puedo solucionar esto? el problema que corre en ms dos sin ningún problema y en una aplicación con interfaz gráfica se guinda debido al while?
#3
Gracias por el consejo AlbertoBSD, ya hice lo del alert, pero nada no entiendo porque se guinda, me estoy cayendo en algo aparentemente tan tonto.

Saludos
#4
Gracias por la respuesta
Como que agregue otro alert? eso si no lo entendi AlbertoBSD, disculpa.
Y si puede ser que si pero si en algun momento no se cumpliera el if en ms dos me debería dar igualmente el mismo problema y no sucede corre perfectamente en ms dos.
#5
Ok perfecto amigos gracias.

pero ahora me surge otro problema y tiene que ver con lo que estoy haciendo, pero no tanto con este tema, lo mas seguro es que cometa un error al comentarlo en este tema, lo siento pero bueno aquí va.

El código serial que coloque al comienzo como se puede observar se ejecuta en ms dos, pero requiero implementar el mismo para un proyecto con interfaz grafica a lo cual estoy usando wxwidgets especificamente la gui wxformbuilder, pero cuando aplico el código serial en mi ventana se guinda a los 5 segundos, cuando trato de incorporar un string proveniente del codigo serial en un ctrtext. Lo que asumo es que la comunicación del código con ms dos se establece en forma mas directa que por medio de wxwidgets.

El codigo que utilizo es el siguiente:

[code]#ifndef VPRINCIPAL_H
#define VPRINCIPAL_H

#include <stdint.h>
#include <iostream>
#include <windows.h>
#include <stdio.h>
#include <stdint.h>
#include <iostream>
#include <sstream>
#include <string>
#include <fstream>
#include <cstring>
#include <ctime>
#include <wx/timer.h>
#include <wx/datetime.h>
#include <wx/menu.h>
#include <wx/wx.h>
#include <wx/app.h>
#include <wx/msgdlg.h>

#include "Ventanas.h"

using namespace std;

class VPrincipal:public VentanaPrincipal{
private:

//void comenzar_tiempo(wxTimerEvent&);
protected:

public:
VPrincipal(wxWindow *parent);
//void OnBotonCerrar(wxEvent &evt);

HANDLE OpenSerialPort( char *psPort, // "COM1","COM2"
DWORD bBaudRate, // CBR_9600, CBR_19200. CBR_56000
BYTE bByteSize, // 7,8
BYTE bParity, // NOPARITY, EVENPARITY, ODDPARITY
BYTE bStopBits, // ONESTOPBIT, ONE5STOPBITS, TWOSTOPBITS
DWORD ReadTimeout   // Programmable Read Timeout
);

// Send a byte
BOOL SerialSendByte(HANDLE hPort, BYTE byte);
// return TRUE: Send OK

// Receive a byte
BOOL SerialReceiveByte(HANDLE hPort, BYTE *pbyte, BOOL *pTimeout);
// return TRUE & *pTimeout TRUE Send OK
// return TRUE & *pTimeout FALSE Timeout
// return FALSE Receive Error

// Close Serial Port
BOOL CloseSerialPort(HANDLE hPort);
};

#endif

//////////////////////////////////////////////////////////////////////////////

#include "VPrincipal.h"

VPrincipal::VPrincipal(wxWindow* parent):VentanaPrincipal(parent){


Show();

HANDLE hPort;
BOOL bRes;
BYTE byte;
BOOL timeout;

string muestra="espera";

hPort=serieOpenSerialPort("COM1",CBR_9600,8,NOPARITY,ONESTOPBIT,1000);

if (hPort==INVALID_HANDLE_VALUE)
{
wxMessageBox("Error abriendo puerto com1");
//return 1;
}

while(1){

bRes=SerialReceiveByte(hPort,&byte,&timeout);

if (!bRes)
{
break;
}

if (timeout)
{
m_textCtrl1->Clear();
m_textCtrl1->SetValue("espera");
//i++;
}

else
{
putchar(byte);
}

}


if (!bRes)
{
wxMessageBox("Error leyendo de puerto com1");
//return 1;
}

CloseSerialPort(hPort);

}


HANDLE VPrincipal::OpenSerialPort(char *psPort, // "COM1","COM2"
DWORD dwBaudRate, // CBR_9600, CBR_19200. CBR_56000
BYTE bByteSize, // 7,8
BYTE bParity, // NOPARITY, EVENPARITY, ODDPARITY
BYTE bStopBits, // ONESTOPBIT, ONE5STOPBITS, TWOSTOPBITS
DWORD Timeout       // Timeout
) {

HANDLE hPort; // port handler
DCB dcbPort; // Port configuration
COMMTIMEOUTS commTimeouts; // Port Timeouts
DWORD dwError; // Error code

// Open Serial Port
hPort=CreateFile(
psPort, // pointer to name of the file
GENERIC_READ | GENERIC_WRITE, // access (read-write) mode
0, // share mode: 0 the object cannot be share
NULL, // pointer to security attributes: NULL the handle cannot be inherited
OPEN_EXISTING, // how to create: Comx exist
0, // file/port attributes
NULL); // handle to file/port with attributes to copy 

// If the function fails, the return value
//is INVALID_HANDLE_VALUE
if ( hPort == INVALID_HANDLE_VALUE ) {
dwError = GetLastError (); // Flush error code
return hPort;
}

// Set Port Configuration

// Delete DCB configuration
FillMemory(&dcbPort, sizeof(dcbPort), 0);
dcbPort.DCBlength = sizeof(dcbPort);

// Current DCB in use for the communications port
GetCommState (hPort, &dcbPort);

// Update DCB with new parameters
dcbPort.BaudRate = dwBaudRate;         
dcbPort.ByteSize = bByteSize;               
dcbPort.Parity = bParity;           
dcbPort.StopBits = bStopBits;       

// Fixed parameters (Disable XON-XOFF and modem handshake)
dcbPort.fBinary = TRUE;                // Binary mode; no EOF check
dcbPort.fParity = TRUE;                // Enable parity checking
dcbPort.fOutxCtsFlow = FALSE;          // No CTS output flow control
dcbPort.fOutxDsrFlow = FALSE;          // No DSR output flow control
dcbPort.fDtrControl = DTR_CONTROL_ENABLE;
// DTR flow control type
// Raises the DTR line when the device is opened
dcbPort.fDsrSensitivity = FALSE;      // DSR sensitivity
dcbPort.fTXContinueOnXoff = TRUE;      // XOFF continues Tx
dcbPort.fOutX = FALSE;                // No XON/XOFF out flow control
dcbPort.fInX = FALSE;                  // No XON/XOFF in flow control
dcbPort.fErrorChar = FALSE;            // Disable error replacement
dcbPort.fNull = FALSE;                // Disable null stripping
dcbPort.fRtsControl = RTS_CONTROL_ENABLE;
// RTS flow control
// Raises the RTS line when the device is opened
dcbPort.fAbortOnError = FALSE;        // Do not abort reads/writes on
// error
// Set new configuration
if (!SetCommState (hPort, &dcbPort)) {
dwError = GetLastError (); // Flush error code
CloseSerialPort(hPort);
hPort = INVALID_HANDLE_VALUE;
return hPort;
}

// Set Port Timeouts
// Timeouts preparation  MORE INFORMATION IN WIN32 API: COMMTIMEOUTS
commTimeouts.ReadIntervalTimeout = 0;  // Specifies the maximum time, in milliseconds, allowed to elapse between the arrival
// of two characters on the communications line
// A value of zero indicates that interval time-outs are not used.
commTimeouts.ReadTotalTimeoutMultiplier = 50;   // Specifies the multiplier, in milliseconds, used to calculate
// the total time-out period for read operations.
// For each read operation, this value is multiplied
// by the requested number of bytes to be read.
commTimeouts.ReadTotalTimeoutConstant = Timeout;// Specifies the constant, in milliseconds, used to calculate the total
// time-out period for read operations
//
commTimeouts.WriteTotalTimeoutMultiplier = 10;  // Specifies the multiplier, in milliseconds, used to calculate the
// total time-out period for write operations.
// For each write operation, this value is multiplied
// by the number of bytes to be written.
commTimeouts.WriteTotalTimeoutConstant = 1000;  // Specifies the constant, in milliseconds, used to calculate the total time-out period
// for write operations
// See de win32 api for more information
// Set Timeouts
if (!SetCommTimeouts (hPort, &commTimeouts)) {
dwError = GetLastError (); // Flush error code
CloseSerialPort(hPort);
hPort = INVALID_HANDLE_VALUE;
return hPort;
}
return hPort;
}

BOOL VPrincipal::SerialSendByte(HANDLE hPort, BYTE byte){
BOOL bRes;
DWORD dwError, dwNumBytesWritten=0;

bRes=WriteFile(
hPort, // handle to file or serial port to write to
&byte, // pointer to data to write to file
1, // number of bytes to write
&dwNumBytesWritten, // pointer to number of bytes written
NULL // NULL
);


if ((!bRes)||(dwNumBytesWritten!=1)){
dwError = GetLastError (); // Flush error code
}
return bRes;
}

BOOL VPrincipal::SerialReceiveByte(HANDLE hPort, BYTE *pbyte, BOOL *pTimeout){
BOOL bRes;
DWORD dwError, lpNumberOfBytesRead=0;

*pTimeout=FALSE;
bRes=ReadFile( hPort, // handle of file or serial port to read
pbyte, // address of buffer that receives data 
1, // number of bytes to read
&lpNumberOfBytesRead, // address of number of bytes read
NULL // NULL 
);

if (!bRes) {
dwError = GetLastError (); // Flush error code
}
if ((bRes)&&(lpNumberOfBytesRead==0)){
*pTimeout = TRUE;
}
return bRes;
}



BOOL VPrincipal::CloseSerialPort(HANDLE hPort){
BOOL bRes;
DWORD dwError;

bRes=CloseHandle(hPort);
if (!bRes) {
dwError = GetLastError (); // Flush error code
}
return bRes;
}

[/code]

La venta abre sin problema y me muestra por uno segundos el mensaje "espera" pero luego se guinda el programa como comente anteriormente. Como puedo solucionar esto?
#6
Bien mafus entonces tu recomendación es que también haga las pruebas con algo asi?:
hPort=OpenSerialPort("COM1",{1200, 2400, 4800, 9600},7,NOPARITY,ONESTOPBIT,5000);, Entonces según el manual ¿como debería recibir la cadena? dame un ejemplo para tener una referencia y saber como voy con las pruebas, disculpen es que soy nuevo en la configuración de estos indicadores.
Ok AlbertoBSD voy hacer lo que me indicas, si coloco [code]printf("%.2x",byte);[/code] pero como puedo evidenciar que estoy recibiendo algún carácter basura, que debo observar en la variedad de los caracteres mostrados?.
#7
MAFUS la marca y el modelo los publique en un anterior comentario son: Virtual measurement & control modelo: vc210. Debido a que es complicado tener el manual que ofrece la marca, le mencione a AlbertoBSD que tengo referencia de la placa base de dicha balanza es un modelo que esta estandarizado y es de la serie LP7510. Ese manual si aparece en la web, se puede descargar con estos link:http://www.awtscale.com/attachments/89-LP7510_indicator_manual.pdf
http://www.awtscale.com/attachments/89-LP7510_indicator_manual.pdf
el primer link AlbertoBSD mencionó que en la pagina 24, sale la explicación de como se recibe la trama de datos. He tratado de analizar la semejanza con lo descrito en la pagina 24 del prime manula con los datos que recibo por ejemplo en 0 kg:C°xxCx°    Cx°Cx   xxx°   xCx      x°xC     C    C    C    C    C   C y como mencione anteriormente los ultimos valores que me muestra, especificamente las 6 C pude observar que son los valores que en el manual especifica que es la data. Ahora lo que no se cuanto representa cada bytes si cada caracter, cada dos caracteres o si inclusive hasta los espacios representen un espacio en el byte.
Por otra parte si el codigo que utilizo lo publique al comienzo de este tema, y es un codigo para recibir byte a byte la data, yo se que lo que recibo esta en formato de byte luego debo traducirlo a un tipo de dato char o int para que el usuario pueda entenderlo, lo primero que requiero saber es que representa un byte en el patron que me muestra la pantalla si: o si el byte es C°xxCx°. por ejemplo yo se que las 6 C representan mi valor en peso, lo que no se es si cada C representa un byte o 2 C todas las C hay esta el detalle, luego de saber eso puedo extraer y convertir el caracter a lo que quiero.
saludos
#8
Los últimos 6 valores, es decir las 6 C que aparecen, en la pantalla:C°xxCx°     Cx°Cx   xxx°   xCx      x°xC     C    C    C    C    C   C representan el valor del peso de la balanza en 0 Kg. Lo menciono porque cuando el valor incremento a 4400 kg este es el resultado que me arrojo:C°xxCx°     Cx°Cx      xxx°     xCx      x°xC     C    C   C   °C   °CC   °C variando en las ultimas 3 C. Debo extraer cada uno de esos valores y convertirlos en formato de int o char para mostrarlo en mi programa, habrá alguien que pueda ayudarme con este problema? no se cada cuantos caracteres representan un byte o si cada carácter representa un byte la verdad es que no lo se.
Saludos
#9
y el patrón que te indique se repite aproximadamente dos veces por linea, digo aproximado porque no llega a completarse el segundo patrón en la linea. Lo que si observo es que el patrón esta compuesto de la siguiente forma:

C°xxCx°     Cx°Cx      xxx°     xCx      x°xC     C    C    C    C    C   C

Yo logro distinguir que este patrón esta compuesto de 6 a 11 valores lo cual no estoy seguro, porque digo esto, por como los caracteres están mostrados y luego viene la separación por los espacios:

C°xxCx°     Cx°Cx      xxx°     xCx      x°xC     C    C    C    C    C   C
    1                2            3          4          5                        6

y la otra forma seria:

C°xxCx°     Cx°Cx      xxx°     xCx      x°xC     C    C    C    C    C   C
    1                2            3          4          5         6    7     8    9    10  11

¿si existe la posibilidad de mostrar la imagen por este medio? si es asi mejor.

Y de verdad muchas gracias!!! si puedes publicar el código para procesar la salida del valor del indicador, de verdad me ha costado interpretar esos valores que me arroja el código,  no sabes cuanto te lo agradecería!

Saludos
#10
AlbertoBSD ¿como puedo adjuntar por acá una imagen? que tome a la pantalla para que puedas observar bien el patrón.